problema con php

cHiv0rz

Hola chicos,

estoy siguiendo un curso que imparte la universidad sobre php, y estoy realizando un ejemplo relacionado con las sesiones. Tengo una página index.php que lo unico que hace es mostrarla si se esta identificado, y si no lo esta, llama a la pagina formulario. La página principal es esta:

<html>
<body>
<?php
require('require_auth.php');
?>
Pagina cifrada
</body>
</html>

en require_auth compruebo si se esta identificado, y si no llamo con la funcion include a la pagina del formulario.php.

Mi problema es que cuando accedo al index.php, me muestra el formulario pero tambien me muestra debajo el contenido de la página que no tiene que mostrar hasta que se esté identificado. Alguna ayuda?

Gracias

LOc0

Todo el código HTML que no vaya dentro de un bloque <?php ?> se muestra SIEMPRE. Si quieres que php "decida" qué mostrar tendrás que utilizar echo y los if/else de siempre.

<html>

<?php
require('require_auth.php');

if(lo que sea)
echo página_cifrada;
else
echo página_normal;

?>

</html>

El código común entre las dos páginas puedes ponerlo fuera del bloque <?php ?>

Salu2 ;)

cHiv0rz

pero con echo pagina cifrada, lo unico que te muestra es pagina cifrada, no te abre la pagina que quieres mostrar

cHiv0rz

bueno, ya he visto que cn el echo puedo mostrar codigo html. Ahora tengo otro problema:

<html>
<?php
require_once('require_auth.php');
if($_SESSION['auth']===true){
echo '<html><body> Has entradoooo <br> <a href="?logout=1">Salir</a></body> </html>';
}
?>
</html>

Esto me lo hace bien, me identifica y tal, pero en el enlace de salida, yo en require_auth.php tengo una funcion que mira el ?login=1 para que llame a logout.php, pero me sale el siguiente error:

Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/tema6/index.php:2) in /opt/lampp/htdocs/tema6/require_auth.php on line 8

el codigo de require es este:

if (IsSet($GET['logout'])){
//Quitamos la variable de sesión
unset($
SESSION['auth']);
//Redirigimos a donde estaba, quitando el logout de la url
header('Location: '.preg_replace('/logout=[&]*/','',$_SERVER['REQUEST_URI']));
exit;
}

gracias

LOc0

La función header() tienes que usarla ANTES de enviar cualquier dato (ya sea con echo o poniéndolo fuera del <?php ?>) Hay varias formas para solucionarlo.

Una forma:

<?php
require_once('require_auth.php');
if($_SESSION['auth']===true)
echo '<html><body> Has entradoooo <a href="?logout=1">Salir</a></body> </html>';
else
echo '<html><body>NO estás dentro. Introduce tu lo que sea bla bla bla...</body></html>';
?>

if (isset($GET['logout'])){
//Quitamos la variable de sesión
unset($
SESSION['auth']);
//Redirigimos a donde estaba, quitando el logout de la url
header('Location: '.preg_replace('/logout=[&]*/','',$_SERVER['REQUEST_URI']));
exit;
}

NO pongas código html (con echo o "a pelo") antes del require (ó en require_auth.php antes de la llamada a header() )

Salu2 ;)

cHiv0rz

muchas gracias, ya me funciona :D

Usuarios habituales

  • cHiv0rz
  • LOc0