Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO ¿donde va el header?

Estas en el tema de ¿donde va el header? en el foro de PHP en Foros del Web. esta es una pregunta simple, es que cada que pongo el header para que cuando marque un error de logueo, lo marque en el mismo ...
  #1 (permalink)  
Antiguo 08/05/2014, 09:37
 
Fecha de Ingreso: abril-2014
Mensajes: 56
Antigüedad: 10 años
Puntos: 0
Pregunta ¿donde va el header?

esta es una pregunta simple, es que cada que pongo el header para que cuando marque un error de logueo, lo marque en el mismo index pero solo me redirecciona al index y no marca el error por eso quiero preguntarles si estoy bien miren:

Código PHP:
Ver original
  1. include('configuracion.php');
  2.  
  3. if ($_POST['entrar']) {
  4. $username=$_POST['username'];
  5. $password=$_POST['password'];
  6. if($username==NULL|$password==NULL) {
  7. echo "un campo está vacio.";
  8. header("Location: ../index");
  9. }else{
  10. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  11. $udata = mysql_fetch_array($query);
  12. if($udata['username'] != $username) {
  13. echo "Usuario incorrecto.";
  14. header("Location: ../index");
  15. }else{
  16. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  17. $data = mysql_fetch_array($query);
  18. if($data['password'] != $password) {
  19. echo "contraseña incorrecta.";
  20. header("Location: ../index");
  21. }else{
  22. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  23. $row = mysql_fetch_array($query);
  24. $_SESSION["s_username"] = $row['username'];
  25. echo "Has sido logueado correctamente ".$_SESSION['s_username']." y puedes acceder al Me.";
  26. header("Location: ../me");
  27. }
  28. }
  29. }
  30. }
el header final si me redirecciona a la pagina sin problemas ¿me dicen si estoy bien o mal y como lo corrijo porfa?
  #2 (permalink)  
Antiguo 08/05/2014, 09:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿donde va el header?

El problema no es donde va, sino cuándo va...
El mismo manual de referencia de PHP te lo dice muy claramente:
Cita:
Recuerde que header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP. Es un error muy común leer código con funciones como include o require, u otro tipo de funciones de acceso de ficheros que incluyen espacios o líneas en blanco que se muestran antes de llamar a la función header(). Sucede el mismo problema cuando se utiliza un solo fichero PHP/HTML.
O sea, no puedes mandar desde ese PHP ningún echo antes de usarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/05/2014, 10:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: ¿donde va el header?

Sip... es lo mismo que session_start() en que nada debe salir por pantalla debe ir ANTES de usarlas, la lista completa es:

header / header_remove
session_start / session_regenerate_id
setcookie / setrawcookie
__________________
Salu2!
  #4 (permalink)  
Antiguo 08/05/2014, 11:30
 
Fecha de Ingreso: abril-2014
Mensajes: 56
Antigüedad: 10 años
Puntos: 0
Pregunta Respuesta: ¿donde va el header?

¿entonces seria así:?
Código PHP:
Ver original
  1. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  2. $udata = mysql_fetch_array($query);
  3. if($udata['username'] != $username) {
  4. header("Location: ../index");
  5. echo "Usuario incorrecto.";
perdonen pero no entiendo muy bien el header :c
  #5 (permalink)  
Antiguo 08/05/2014, 11:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: ¿donde va el header?

MMMMm

header("Location: pagina.php"); seguido de exit(); es para enviarte a otra pagina, entonces eso seria lo "ultimo" que haces antes de irte de ahi

Cualquier mensaje seria mostrado en la pagina a donde redireccionas (y el mesaje como tal se lo puedes pasar por la url o sea GET, por variable de session, etc)
__________________
Salu2!
  #6 (permalink)  
Antiguo 08/05/2014, 11:39
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años
Puntos: 4
Respuesta: ¿donde va el header?

el "echo" nunca se ejecutara, porque redirecciona, antes, pero ese codigo seria valido.
  #7 (permalink)  
Antiguo 08/05/2014, 11:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: ¿donde va el header?

Cita:
Iniciado por nanotk58 Ver Mensaje
el "echo" nunca se ejecutara, porque redirecciona, antes, pero ese codigo seria valido.
Falso, si se ejecuta, lea el manual

Por eso el exit() debe colocarse justo despues del header()
__________________
Salu2!
  #8 (permalink)  
Antiguo 08/05/2014, 12:28
 
Fecha de Ingreso: abril-2014
Mensajes: 56
Antigüedad: 10 años
Puntos: 0
Respuesta: ¿donde va el header?

Cita:
Iniciado por nanotk58 Ver Mensaje
el "echo" nunca se ejecutara, porque redirecciona, antes, pero ese codigo seria valido.
de echo si se ejecuta, osea si va a la pagina pero no muestra el mensaje que seria "usuario incorrecto", puse el ext(); despues del header pero no marco el error :/
  #9 (permalink)  
Antiguo 08/05/2014, 19:35
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: ¿donde va el header?

lo que deseas hacer tu es enviar el mensaje de error al usuarios también llamados mensajes flash
Cita:
Un mensaje flash es un mensaje temporal que se almacena en la sesión del usuario y que se borra automáticamente después de la siguiente petición.
se manejan a nivel de session, ejemplo
Código PHP:
Ver original
  1. session_start(); //debe de estar al comienzo del archivo php
  2. if ($udata['username'] != $username) {
  3.     $_SESSION['erro'] = "Usuario incorrecto.";
  4.     header("Location: ../index");
  5.     exit();
  6. }

en tu página index
Código PHP:
Ver original
  1. session_start();//debe de estar al principio
  2. if (isset($_SESSION['error']) {
  3.     echo $_SESSION['error'];
  4.    unset($_SESSION['error']);
  5. }

claro normalmente en cuando uno usa un framework el componente de user te provee de métodos para trabajar este tipo de mensajes, pero en teoría el concepto es ese, crear una variable de sesión con el mensaje que se mostrará luego de la redirección y en esa petición se elimina
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #10 (permalink)  
Antiguo 08/05/2014, 23:02
 
Fecha de Ingreso: abril-2014
Mensajes: 56
Antigüedad: 10 años
Puntos: 0
Respuesta: ¿donde va el header?

ok, muchas gracias voy a probar a ver si es que funciona

Etiquetas: mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:26.