Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: jga en 04 de Octubre 2014, 10:50

Título: php Warning: Cannot modify header information - headers already sent by
Publicado por: jga en 04 de Octubre 2014, 10:50
Hola como estais , a ver si alguien me puede echar una mano con este ejercicio por favor :

Notice: Undefined variable: _SESSION in C:\xampp\htdocs\recibe_inicio_de_sesion.php on line 23

tambien me da un error igual en la tercera pagina al intentar acceder al inicio_de _sesion_exitoso aunque no deja entrar sin logearse aparece el mismo error tras la ventana de alerta 

este es el error que me aparece al enviar el usuario y/o contraseña erroneos o vacios ( tras la ventana de alert )

pagina 1
Código: [Seleccionar]
<!DOCTYPE html >
<head>

<title>inicio de sesion</title>
</head>

<body>
<form name="form1" method="post" action="recibe_inicio_de_sesion.php">
  <p>
    <label>nombre<br>
      <input type="text" name="nombre" id="textfield">
    </label>
  </p>
  <p>
    <label>pass<br>
<input type="text" name="pass" id="textfield2">
    </label>
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Enviar">
  </p>
</form>


</body>
</html>

pagina 2
Código: [Seleccionar]

<?php

$nombre
=$_POST['nombre'];
$nombre=strtoupper ($nombre);

$pass=$_POST['pass'];
$pass=strtoupper($pass);

if  ( 
$nombre == "JORGE" &&  $pass == "PASS" )

 

 { 
session_start();
  
$_SESSION['entrar']=1;
  
$_SESSION['usuario']=$nombre
  
 
  }
 

 if (
$_SESSION['entrar']==1){header ("location:inicio_de_sesion_exitoso.php");}

 
 else { 
             
?>

 <script type="text/javascript" language="javascript">
 
 alert("usuario y/o contraseña incorrecto/s ");
location.href="inicio_de_sesion.php";</script>
 
 <?php
 
}

?>






pagina 3

Código: [Seleccionar]

<script type="text/javascript" language="javascript"> function salir(){location.href="inicio_de_sesion.php"}</script>
<?php
session_start
();
if (
$_SESSION['entrar'] !=1)

 
?>

    <script type="text/javascript" language="javascript">
    alert("No estas autorizado a entrar sin logearte")
location.href="inicio_de_sesion.php";
   
 
    </script>
<?php
}


?>

<html>
<head>
<title>
</title>
<body>
           
<p>Bienvenido <?php echo $_SESSION['usuario'?></br>

<input name="salir" value="Logout" type="button" onClick="salir()">
           
</p>
<p>&nbsp;</p>
</body>
</head>
</html>

<?php

session_unset 
($_SESSION['usuario']);
?>


en principio creo que funciona todo bien pero lo unico son esos errores , espero vuestro sabio consejo . Gracias y un abrazo fuerte.
Título: Re:php Warning: Cannot modify header information - headers already sent by
Publicado por: Ogramar en 04 de Octubre 2014, 13:15
Hola, he mirado y veo distintos detalles que habría que revisar. Las recomendaciones para que este código funcione:


1) Comprobar que tienes codificación de archivo en UTF-8 sin BOM

2) Eliminar espacios antes y después de las etiquetas de apertura y cierre de php, es decir

_
_
<?php

...

?>
_
_

___<?php ____

<?____
____<?


Donde los guiones indican que hay líneas en blanco o espacios en blanco: elimina esas líneas o espacios en blanco.


3) Poner el sesión_start() al principio: todo lo que se ejecute estará dentro de una misma sesión

4) Te falta la etiqueta de apertura <html> en inicio_de_sesion.php (tienes la de cierre, pero no la de apertura)

5) En inicio_de_sesion_exitoso.php tienes mal puestas las etiquetas <head>... </head>

6) En inicio_de_sesion_exitoso.php tienes mal construido el código html en general

7) Debes añadir session_unset ($_SESSION['entrar']); para que no se pueda entrar después de pulsar logout si no se introducen los datos correctos

He introducido algún cambio más.

El código quedaría así (al menos a mí así me está funcionando):

Archivo inicio_de_sesion.php

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>inicio de sesion</title>
</head>
<body>
<form name="form1" method="post" action="recibe_inicio_de_sesion.php">
  <p>
    <label>nombre<br>
      <input type="text" name="nombre" id="textfield">
    </label>
  </p>
  <p>
    <label>pass<br>
<input type="text" name="pass" id="textfield2">
    </label>
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Enviar">
  </p>
</form>
</body>
</html>

Archivo recibe_inicio_de_sesion.php

Código: [Seleccionar]
<?php 
session_start
();
$nombre=$_POST['nombre'];
$nombre=strtoupper ($nombre);
$pass=$_POST['pass'];
$pass=strtoupper($pass);
if  ( 
$nombre == "JORGE" &&  $pass == "PASS" ) { 
$_SESSION['entrar']=1;
$_SESSION['usuario']=$nombre
}
if (
$_SESSION['entrar']==1){
header ("location:inicio_de_sesion_exitoso.php");
}
else { 
?>

<script type="text/javascript" language="javascript">
alert("usuario y/o contraseña incorrecto/s ");
location.href="inicio_de_sesion.php";</script> 
<?php

?>


Archivo inicio_de_sesion_exitoso.php

Código: [Seleccionar]
<?php
session_start
(); 
if (
$_SESSION['entrar'] !=1)

?>

    <script type="text/javascript" language="javascript">
alert("No estas autorizado a entrar sin logearte")
location.href="inicio_de_sesion.php";
    </script>
<?php
}
?>

<p>Bienvenido <?php echo $_SESSION['usuario'?></br></p>
<input name="salir" value="Logout" type="button" onClick="location.href='inicio_de_sesion.php'">
<?php
session_unset 
($_SESSION['usuario']);
session_unset ($_SESSION['entrar']);
?>


Salu2
Título: Re:php Warning: Cannot modify header information - headers already sent by
Publicado por: jga en 05 de Octubre 2014, 14:01
Ante todo gracias por tu estimada contestacion y aclaraciones Ogramar , he probado el codigo que pusiste y corregiste y no entiendo el porque de estos errores que aparecen

error despues de introducir mal el usuario o pass

Notice: Undefined index ........on line 13 en la pagina recibe_inicio_de_sesion.php

(linea 13) if ($_SESSION['entrar']==1)

  despues de ingresar correctamente

Notice: Undefined index ........on line 17 en la pagina inicio_de_sesion_exitoso

 (linea 17) session_unset ($_SESSION['entrar'])

si se intenta acceder directamente a inicio de sesion exitoso

Notice: Undefined index ........on line 3 en la pagina inicio_de_sesion_exitoso

(linea 3) if ($_SESSION['entrar'] !=1)

de nuevo te doy las gracias por tu atencion , un abrazo.
Título: Re:php Warning: Cannot modify header information - headers already sent by
Publicado por: jga en 05 de Octubre 2014, 16:45
Hola otra vez , respecto a los errores comentados anteriormente , he investigado un poco y  parece que el codigo esta bien y es un error del servidor apache , que se puede omitir añadiendo

error_reporting('0');   al abrir  <?php  al principio
decir que el error "Notice" no es un error fatal y no impide que el programa se ejecute bien,
aunque si desactivamos el error reporting no veremos los demas posibles errores.

asi que problema resuelto y gracias por el apoyo , un abrazo.
Título: Re:php Warning: Cannot modify header information - headers already sent by
Publicado por: Ogramar en 05 de Octubre 2014, 19:03
Pues me alegro que se haya solucionado. En el servidor en que probé yo el código no me aparecía ningún mensaje de error ni warning, sino simplemente la ejecución correcta del código.

Salu2