Foros del Web » Programando para Internet » PHP »

problema con sessiones

Estas en el tema de problema con sessiones en el foro de PHP en Foros del Web. Hola, tengo este script para validar los datos de un formulario: <?php session_start(); error_reporting(E_ALL); require_once ('bookmark_fns.php'); if(isset($_POST['enviar'])) { $usuario = addslashes (trim($HTTP_POST_VARS['usuario'])); $passwd = addslashes ...
  #1 (permalink)  
Antiguo 09/03/2005, 05:21
 
Fecha de Ingreso: enero-2005
Mensajes: 9
Antigüedad: 19 años, 2 meses
Puntos: 0
problema con sessiones

Hola, tengo este script para validar los datos de un formulario:

<?php
session_start();
error_reporting(E_ALL);

require_once ('bookmark_fns.php');

if(isset($_POST['enviar'])) {
$usuario = addslashes (trim($HTTP_POST_VARS['usuario']));
$passwd = addslashes (trim($HTTP_POST_VARS['passwd']));
$passwd2 = addslashes (trim($HTTP_POST_VARS['passwd2']));
$email = addslashes (trim($HTTP_POST_VARS['email']));
$email2 = addslashes (trim($HTTP_POST_VARS['email2']));
$fecha = $dia[$gisett].", ".date("d")." de ".$mes[$mesnum]." del ".date("Y");
$nivel = 1;
$ip = $REMOTE_ADDR;;
$mensaje ='';

$_SESSION['variable'] = "$usuario";

if (strlen($usuario)<5 || strlen($usuario)>15)
{
$mensaje .= 'El nombre de usuario debera tener entre 5 y 15 caractares.<br>';
}
if (strlen($passwd)<6 || strlen($passwd)>16)
{
$mensaje .= 'La contraseña debera tener entre 6 y 16 caracteres.<br>';
}
if (!valid_email($email))
{
$mensaje .= 'Debes escribir un email valido.<br>';
}
if ($mensaje !='')
{
echo "Se han encontrado los siguientes problemas.<br>".$mensaje;
}
$reg_result = registrar ($usuario, $passwd, $email, $fecha, $nivel, $ip);
if ($reg_result === true)
{
$HTTP_POST_VARS['valid_user'] = $usuario;
echo 'Usuario registrado con exito.';
}
}
if ($zona=="registro")
{
display_registration_form();
}
?>

y aqui tengo el html separado del formulario:


<?php
function display_registration_form()
{
?>
<html>
<head>
</head>

<body>
<form name="registro" method="post" action="index.php?zona=registro">
<input type="text" name="usuario" value="<?php echo $_SESSION['variable']; ?>">
<br>
<input type="password" name="passwd">
<br>
<input type="password" name="passwd2">
<br>
<input type="text" name="email">
<br>
<input type="text" name="email2">
<br>
<input type="submit" name="enviar" value="Enviar">
</form>
</body>
</html>
<?php
unset($_SESSION['variable']);
}
?>

Uso las sesiones para mantener los datos del formulario y cuando haya un error que no desaparezcan los datos introducidos. El problema esta que siempre me pone este error;

Notice: Undefined index: variable in output_fns.php on line 11

pero a pesar de eso todo funciona perfectamente. Alguna idea?
  #2 (permalink)  
Antiguo 09/03/2005, 07:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si usas:
error_reporting(E_ALL);

Estas forzando a PHP a que te dé todo "aviso" de una "mala programación". El aviso que obtienes se debe a que en el primer instante de ejecución de tu script, las variables "externas" que obtienes por el $HTTP_xxx_VARS no están definidas todavía .. si que lo estarán cuando envies tu formulario .. pero no antes.

Lo lógico y seguro es "validar" que exista la variable antes de pretender usarla:

Código PHP:
if (isset($HTTP_POST_VARS['variable'])){
// y por aquí la usas ..

También puedes "bajar" el nivel de mensajes de error que PHP ha de mostrar .. pero el "error" seguirá estando ahí. Para eso puedes usar otro parámetro para error_reporting() (www.php.net/error_reporting)

Por cierto .. usa los arrays superglobales: $_GET .. $_POST .. etc en lugar de $HTTP_xxx_VARS ... que de hecho ya lo usas para las sesiones cuando usas $_SESSION .. no mezcles cosas .. sino obtendrás resultados inesperados en ciertas configuraciones de PHP (sobre todo con register_globals a OFF)

Un saludo,
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 13:42.