Foros del Web » Programando para Internet » PHP »

Error en Listas Dependientes -Sencillo -

Estas en el tema de Error en Listas Dependientes -Sencillo - en el foro de PHP en Foros del Web. Tengo estas tablas: Y uso este code para las listas desplegables, pero no me funciona, em sale que "No hay ningún Item Seleccionado" Código PHP: ...
  #1 (permalink)  
Antiguo 11/08/2005, 17:26
 
Fecha de Ingreso: agosto-2005
Mensajes: 159
Antigüedad: 18 años, 8 meses
Puntos: 0
Error en Listas Dependientes -Sencillo -

Tengo estas tablas:



Y uso este code para las listas desplegables, pero no me funciona, em sale que "No hay ningún Item Seleccionado"

Código PHP:
<? 
// datos de conexion a la BD. 
$servidor ="localhost"// host 
$usuario ="root"
$clave     =""
$basedatos ="listas"// Indicar una Base de datos. 
// si se ha pulsao el boton enviar ($enviado) se procesa el formulario .. 
// Sino, se continua con el formulario y los nuevos valores de los Select .. 
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser 
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda. 
if (!empty($_POST['enviado'])){ 
// Procesar el formulario ... 
echo "Procesando formulario:<br>"
echo 
"Recibido id_tabla_padre: ".$_POST['country_id']."<br>"
echo 
"Recibido id_tabla_hija: ".$_POST['state_id']; 
} else { 
// Conexión a la BD 
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error()); 
mysql_select_db($basedatos$conexion) or die(mysql_error()); 
// Obtener el $id_padre del envio a si mismo del formulario .. 
$id_padre=$_POST['country_id']; 
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script). 
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n"
// Formar Selec "Padre". 
echo "<select name=\"country_id\" onChange=\"this.form.submit()\">\n"
echo 
"<option value=\"\"> Seleccione un Item </option>\n"
$SQLconsulta_padre="SELECT * FROM countries"
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error()); 
While (
$registro_padre=mysql_fetch_assoc($consulta_padre )){ 
     
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo. 
     // Se selecciona en consecuencia (selected) la opción elegida. 
     
if ($id_padre == $registro_padre['id']){ 
         echo 
"<option value=\"".$registro_padre['name']."\" selected>".$registro_padre['name']."</option>\n"
     } else { 
         echo 
"<option value=\"".$registro_padre['name']."\">".$registro_padre['name']."</option>\n"
     } 
    } 
echo 
"</select>\n\n"
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta. 
// Formar Select "Hijo" 
echo "<select name=\"state_id\">\n"
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo 
// se muestra el mensaje de "seleccine un item" (del select padre). 
if (!empty($id_padre)){ 
     
$SQLconsulta_hija="SELECT * FROM states WHERE country_id='$id_padre'"
     
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error()); 
     
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select .. 
     
if (mysql_num_rows($consulta_hija) != 0){ 
         While (
$registro_hija=mysql_fetch_assoc($consulta_hija)) { 
            echo 
"<option value=\"".$registro_hija['name']."\">".$registro_hija['name']."</option>\n"
         } 
        } else { 
            echo 
"<option value=\"\"> No hay registros para este Item </option>"
        } 
    } else { 
        echo 
"<option value=\"\"> <-- Seleccione un Item </option>"
    } 
    
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta. 
 
    
echo "</select>\n\n"
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n"
    echo 
"</form>\n"

?>
  #2 (permalink)  
Antiguo 11/08/2005, 22:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Según tu modelo de datos y nombres de campos .. usas como clave foránea: "contry_id" .. no "id"

if ($id_padre == $registro_padre['id']){

debería ser:
if ($id_padre == $registro_padre['country_id']){

En definitiva .. tu modelo de datos (tu relación de tus dos tablas) es el que el código que muestras de ejemplo (de las FAQ's?) hace el tema de las listas dependientes .. Sólo presta atención al nombre de los campos de tus tablas usados.

PD: Podrías revisar el mismo proceso de listas dependientes pero usando técnicas de Ajax o RSS (Remote Scripting) (en la FAQ que creo que obtuvistes el código de ejemplo al pié del mismo se cita un link sobre RSS .. y en el foro puedes ver más ejemplos sobre Ajax .. revisalos .. son interesantes soluciones para este tipo de casos).

Un saludo,
  #3 (permalink)  
Antiguo 12/08/2005, 08:15
 
Fecha de Ingreso: agosto-2005
Mensajes: 159
Antigüedad: 18 años, 8 meses
Puntos: 0
Gracias, ya lo hice pero no funciona

Me sale Notice: Undefined index: country_id en esta línea:


$id_padre=$_POST['country_id'];
  #4 (permalink)  
Antiguo 12/08/2005, 10:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 152
Antigüedad: 20 años, 5 meses
Puntos: 2
el error no se que pasa, pero creo que no es de base de datos.
solo unas recomendasiones:
para comprobar que si existe la variable puedes utilizar isset$_POST['enviado']:

ejem : if (isset($_POST['enviado']))


y esta linea no me parece necesario

$id_padre=$_POST['country_id'];

bueno, para tu pregunta solo puede ser eso, no encuentro mas error.
__________________
Mamani Calderón, Edwin Fredy
Ingeniería de Sistemas www.gruposistemas.com
  #5 (permalink)  
Antiguo 12/08/2005, 12:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por DUDO_DE_ADRIANA
Gracias, ya lo hice pero no funciona

Me sale Notice: Undefined index: country_id en esta línea:


$id_padre=$_POST['country_id'];
El mensaje sólo es un aviso de una "mala programación" .. realmente siempre se debería validar la existencia de una variable antes de pretender accederla usando isset() como plantea edwinmc.

También puedes ajustar el nivel de avisos que PHP te va a mostrar (errores/avisos) usando la función (o vía php.ini):

error_reporting() y ajustando a un nivel más bajo de errores.

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 01:02.