Tengo un problema raro, y por alguna razón no puedo dar con él. Ocurre que estoy llenando una variable de tipo array con mensajes de errores, que después paso a una variable de sesión, para poder mostrarlos después que direccione la página, pero por alguna razón cuando carga la página de nuevo por redirección, la variable de sesion viene vacía... no sé que hacer, lo he depurado de mil formas, pero nada cambia.
El código es el siguiente:
Código PHP:
<?php
session_start();
$a_mensajes = array();
if ( isset($_SESSION["a_mensajes"]) ) { $a_mensajes = $_SESSION["a_mensajes"]; }
//echo gettype($a_mensajes);
//echo gettype($_SESSION["a_mensajes"]);
// Pruebo redireccion
if ( !($_GET["redir"]) ) {
$a_mensajes[] = "Redirecciono y muestro error";
redirecciona("?redir=true");
}
/* Redirecciona usando el HEADER */
function redirecciona($args = "") {
global $a_mensajes;
$url = $_SERVER['PHP_SELF'];
if ( strlen($args) > 0 ) { $url = $url . $args; }
/* Antes de redireccionar, veo si hay errores.
Si hay, los mando a la sesión para que se muestren en el cuadro de errores
*/
if ( isset($a_mensajes) && count($a_mensajes) > 0 ) {
if ( !(isset($_SESSION["a_mensajes"])) ) { $_SESSION["a_mensajes"] = array(); }
$_SESSION["a_mensajes"] = $a_mensajes;
} else {
//$a_mensajes[] = "No llegaron los mensajes.";
//$_SESSION["a_mensajes"] = $a_mensajes;
header("Location: " . $url);
}
}
function muestraMensajes($a_mensajes) {
echo '<strong> Han ocurrido algunos problemas con la acción realizada recientemente. Esta es una lista con los mensajes de error encontrados:</strong>' . "\n" . '<ul>' . "\n";
foreach($a_mensajes as $msg) {
echo '<li>' . $msg . '</li>' . "\n";
}
echo '</ul>' . "\n";
if ( isset($_SESSION["a_mensajes"]) ) { unset($_SESSION["a_mensajes"]); }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<?php
// Verifico que no vengan mensajes de antes.
/*
echo "<p>session : ";
var_dump($_SESSION["a_mensajes"]);
echo "</p>";
echo "<p>array : ";
var_dump($a_mensajes);
echo "</p>";
*/
if ( !(empty($a_mensajes)) ) {
//var_dump($a_mensajes);
?>
<table width="100%" border="0" cellpadding="5", cellspacing="0">
<tr>
<td><?php muestraMensajes ($a_mensajes); ?></td>
</tr>
</table>
<?php
} //else { echo "<p>Nunca pasé por ahí.</p>"; }
// Fin Pequeña línea
?>
<p><a href="sesion.php">Refrescar</a></p>
<body>
</body>
</html>
Alguna ayuda?
![Neurótico](http://static.forosdelweb.com/fdwtheme/images/smilies/scared.png)
Gracias!