Las variables no tienen efecto cuando se usa header:ubicación

Tengo esta sección de php que si es cierta en el estado actual a continuación, el usuario es enviado de vuelta a mail.php y ambos $mailErrorMsg y $mailErrorDisplay funciona correctamente.

el php original

if ($sql_recipient_num == 0){

    $mailErrorMsg = '<u>ERROR:</u><br />The Recipient does not exist.<br />';
 $mailErrorDisplay = ''; 

} 

Y la parte css que cambia

#mail_errors {
height: 30px;
width: 767px;
text-align: center;
color: #666666;
font-family: Verdana, Geneva, sans-serif;
font-size: 9px;
clear: both;
font-weight: bold;
<?php print "$mailErrorDisplay";?>  
background-color: #FFF; 
border: thin solid <?php print "$mail_color";?>;

}

Sin embargo, si agrego esta línea header('Location: mail.php?tid=3'); lo que me permite asegurarme de que el usuario está mirando la pestaña en la que se encuentra el error, ninguna de las variables enumeradas anteriormente tiene lugar y, por lo tanto, el error no se muestra. ¿Hay alguna otra forma de encabezado: ubicación que pueda usar?

if ($sql_recipient_num == 0){
     header('Location: mail.php?tid=3');
    $mailErrorMsg = '<u>ERROR:</u><br />The Recipient does not exist.<br />';
 $mailErrorDisplay = ''; 

}

preguntado el 22 de mayo de 12 a las 20:05

3 Respuestas

El uso de un encabezado no pasará ninguna de esas variables. Lo que debes hacer es usar una sesión.

session_start(); // put this on the top of each page you want to use
if($sql_recipient_num == 0){
    $_SESSION['mailErrorMsg'] = "your message";
    $_SESSION['mailErrorDisplay'] = "whatever";
    // header
}

Luego, en su página donde desea imprimir estos mensajes de error.

session_start();
print $_SESSION['mailErrorMsg'];
// then you want to get rid of the message
unset($_SESSION['mailErrorMsg']; // or use session_destroy();

contestado el 22 de mayo de 12 a las 20:05

ok, genial, lo intentaré ahora, una pregunta, aunque tengo esto $mailErrorDisplay = 'display:none;'; en la parte superior del php que establece el valor predeterminado, por lo que el error no se muestra hasta que haya uno, ¿cómo hago para que esto funcione con las variables de sesión? Porque en el momento en que lo dejamos, el error se muestra constantemente, mientras que antes no lo hacía. al-hennessey

Puedes decir: $mailErrorDisplay = (isset($_SESSION['mailErrorDisplay'])) ? "display: visible" : "display:none"; - marcus recck

Hola, acabo de intentarlo y todavía muestra el error, agregué el código de comentario anterior en la parte superior como dijiste. Esto es lo que tengo en el php if ($sql_recipient_num == 0){ $_SESSION['mailErrorMsg'] = "<u>ERROR:</u><br />The Recipient does not exist.<br />"; $_SESSION['mailErrorDisplay'] = ''; header('Location: mail.php?tid=3'); } y esto es lo que tengo en el css #mail_errors {height: 30px; width: 767px; <?php /*?><?php print "$mailErrorDisplay";?><?php */?> <?php echo $_SESSION['mailErrorDisplay']; unset($_SESSION['mailErrorDisplay']); ?> } - al-hennessey

header('location: mail.php');

Redirige al navegador a esa página. Todas las variables están entonces vacías. Usaría una variable de sesión para almacenar la información.

session_start(); //must be before any output
if ($sql_recipient_num == 0){
    header('Location: mail.php?tid=3');
    $_SESSION['mailErrorMsg'] = '<u>ERROR:</u><br />The Recipient does not exist.<br />';
    $_SESSION['mailErrorDisplay'] = ''; 
}

Luego, cuando quieras mostrar:

session_start(); //must be before any output
echo $_SESSION['mailErrorMsg']; unset($_SESSION['mailErrorMsg']);

Eso debería darte lo que necesitas.

contestado el 22 de mayo de 12 a las 20:05

Estás pensando que el comando header() actúa como require_once() donde el nuevo script se 'inyecta' en el script actual. En realidad, está enviando un encabezado http al navegador. que dice "Ubicación: mail.php?tid=3". Luego, el navegador cumple redirigiendo a la página mail.php, algo así como hacer clic en un enlace.

Cualquier cosa que tenga debajo seguirá ejecutándose en segundo plano, pero el navegador de personas ahora está en la nueva página. Si desea pasar $mailErrorMsg y/o $mailErrorDisplay, deberá almacenarlos en una variable de sesión o cookie, y coloque esas declaraciones sobre la redirección de su encabezado de la siguiente manera:

if ($sql_recipient_num == 0){
     $mailErrorMsg = '<u>ERROR:</u><br />The Recipient does not exist.<br />';
     $mailErrorDisplay = ''; 
     header('Location: mail.php?tid=3');
} 

contestado el 22 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.