Autor Tema: php Warning: Cannot modify header information - headers already sent by  (Leído 9403 veces)

jga

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 31
    • Ver Perfil
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.
« Última modificación: 04 de Octubre 2014, 13:13 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:php Warning: Cannot modify header information - headers already sent by
« Respuesta #1 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

jga

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 31
    • Ver Perfil
Re:php Warning: Cannot modify header information - headers already sent by
« Respuesta #2 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.

jga

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 31
    • Ver Perfil
Re:php Warning: Cannot modify header information - headers already sent by
« Respuesta #3 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.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:php Warning: Cannot modify header information - headers already sent by
« Respuesta #4 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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".