Foros del Web » Programando para Internet » PHP »

Extraño error con selected en un formulario (select)

Estas en el tema de Extraño error con selected en un formulario (select) en el foro de PHP en Foros del Web. Hola a todos Tengo un formulario con un desplegable que lee los valores de una tabla que tiene de campos dia,mes y anio. La idea ...
  #1 (permalink)  
Antiguo 03/11/2009, 10:08
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
Extraño error con selected en un formulario (select)

Hola a todos

Tengo un formulario con un desplegable que lee los valores de una tabla que tiene de campos dia,mes y anio.
La idea es que cuando selecciono una fecha y envio el valor la siguiente vez que quiera seleccionar una fecha aparezca por defecto la que he puesto la vez anterior.
Si yo le doy a las variables de sesion valores funciona perfectamente pero no funciona cuando estas tienen que almacenar los valores que yo le envio con post, el error que aparece es el siguiente:

4
Notice: Undefined index: dia in C:\wamp\www\resultados\index.php on line 159
- 8
Notice: Undefined index: mes in C:\wamp\www\resultados\index.php on line 169
- 2015
Notice: Undefined index: anio in C:\wamp\www\resultados\index.php on line 179


el script es el siguiente:

<?php

abro una sesion para que almacene en variables de sesion los valores que le envio con el formulario:

session_name("sesion");
session_start();
if (isset($_POST["dia"]) && isset($_POST["mes"]) && isset($_POST["anio"])){
$_SESSION["dia"]=$_POST["dia"];
$_SESSION["mes"]=$_POST["mes"];
$_SESSION["anio"]=$_POST["anio"];
}


le indico al formulario que tome como valor seleccionado el valor de la variable de sesion:

$resultado=mysql_query("select * from tiempo order by dia")

echo '<form method="post" action="">';

echo "<select name='dia' id='dia'>";
while($fila=mysql_fetch_array ($resultado)){
echo "<option value='".$fila["dia"];
if($fila["dia"]==$_SESSION["dia"]) echo " selected='selected'";
echo "'> " .$fila["dia"]. "</option>";
}
echo "</select>";

mysql_data_seek ($resultado, 0);

echo "<select name='mes' id='mes'>";
while($fila=mysql_fetch_array ($resultado)){
echo "<option value='".$fila["mes"];
if($fila["mes"]==$_SESSION["mes"]) echo " selected='selected'";
echo "'> " .$fila["mes"]. "</option>";
}
echo "</select>";

mysql_data_seek ($resultado, 0);

echo "<select name='anio' id='anio'>";
while($fila=mysql_fetch_array ($resultado)){
echo "<option value='".$fila["anio"];
if($fila["anio"]==$_SESSION["anio"]) echo " selected='selected'";
echo "'> " .$fila["anio"]. "</option>";
}

echo "</select>";

echo '</form>';

Muchas gracias a todos de antemano

?>
  #2 (permalink)  
Antiguo 03/11/2009, 10:17
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: Extraño error con selected en un formulario (select)

Hola,

el problema que tienes es que las tres variables que estás utilizando no las has declarado, esto no es algo muy grave, pero para mantener buenas practicas de programación es recomentable declarar todas las variables con las que se trabajará.

Para evitar que te salgan los notice tienes varias opciones,

1. Declrarar todas las vaiables antes de utilizarlas (recomendado)
2. Evitar que te salgan los notice, para ello debes agregar un @ antes de cada línea donde te salen estas notices
3. Modificar tu aplicación para que no las muestre, esto lo puedes hacer utilizando la funcion error_reporting(E_ALL & ~E_NOTICE)
4. Modificar el php.ini para que no te muestre las notice. (Esta opción modificará la opción de notificaciones en todo tu servidor)


Un saludo.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #3 (permalink)  
Antiguo 03/11/2009, 10:18
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Extraño error con selected en un formulario (select)

No se trata de un error, si no de una NOTICE (notificación). El mensaje viene a decir que estás usando una variable que no ha sido inicializada nunca. En producción (cuando la web este disponible a los usuarios) deberías modificar el php.ini para que los errores y notificaciones no salten, por dos razones:

- Por seguridad.
- Por estética.

Estos mensajes de error y notificación son útiles en la fase de desarrollo solamente.

Saludos!
  #4 (permalink)  
Antiguo 03/11/2009, 10:25
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Extraño error con selected en un formulario (select)

Buenas

Sólo una cosa, tienes un pequeño error aquí:

Código PHP:
if($fila["dia"]==$_SESSION["dia"]) echo "/* ahora iría una comilla simple*/ selected='selected'";
// Sinó, cuando fuera selected haría <option value='07-10-88 selected='selected'> 
En cuanto a lo de las sessiones así a simple vista no veo nada...
Yo probaría a quitar la primera parte del script y ponerlo así:

Código PHP:
session_register("dia");
session_register("mes");
session_register("anio");
if (isset(
$_POST["dia"]) && isset($_POST["mes"]) && isset($_POST["anio"])){
   echo 
"<br/><b>He entrado!</b><br/>"// Comprobamos q entra
   
$_SESSION["dia"]=$_POST["dia"];
   
$_SESSION["mes"]=$_POST["mes"];
   
$_SESSION["anio"]=$_POST["anio"];
   echo 
"<br/>POST[dia]=<b>".$_POST['dia']."</b><br/>"// Comprobamos q es correcto
   
echo "<br/>POST[mes]=<b>".$_POST['mes']."</b><br/>"// Comprobamos q es correcto
   
echo "<br/>POST[anio]=<b>".$_POST['anio']."</b><br/>"// Comprobamos q es correcto
}
echo 
"<br/>SESSION[dia]=<b>".$_SESSION['dia']."</b><br/>"// Comprobamos q es correcto
echo "<br/>SESSION[mes]=<b>".$_SESSION['mes']."</b><br/>"// Comprobamos q es correcto
echo "<br/>SESSION[anio]=<b>".$_SESSION['anio']."</b><br/>"// Comprobamos q es correcto 
Esto debería darte las pistas para saber qué puede estar saliendo mal y dónde.

Saludos y suerte!
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 18:57.