Foros del Web » Programando para Internet » PHP »

Funciona, pero tiene algo anormal

Estas en el tema de Funciona, pero tiene algo anormal en el foro de PHP en Foros del Web. Hola: Estoy usando el clasico codigo para insertar en la base de datos pero se me ha complicado porque parte del formulario son dos listas ...
  #1 (permalink)  
Antiguo 03/03/2006, 00:02
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Funciona, pero tiene algo anormal

Hola:

Estoy usando el clasico codigo para insertar en la base de datos pero se me ha complicado porque parte del formulario son dos listas dependientes.

Lo extraño es que como tengo actualmente el codigo, funciona perfectamente, es decir, inserta sin problemas los datos en la base de datos... Explico:

lista uno CATEGORIAS
lista dos (depende de uno) SUBCATEGORIAS
campo text nombre
campo text direccion, etc etc

Siempre hay CATEGORIAS pero no siempre estas tienen SUBCATEGORIAS

Caso 1: Si mando (al click en submit) CATEGORIA y SUBCATEGORIA + demas campos del form, perfecto, me muestra la pagina que procesa con un mensajito de "espera.....bla bla" y listo, vuelve al form indicando que inserto y en efecto, inserto perfectamente categoria, subcategoria y demas campos del form.

Caso 2: Si mando SOLO CATEGORIA porque no tiene subcategoria, lo mismo, la pagina con el mensajito y vuelve al form, insertando perfectamente en este caso la categoria + los demas campos del form.

SIEMPRE INSERTA PERFECTO PERO...

Cuando no envio SUBCATEGORIA (caso 2), mientras esta en la pagina del mensajito (la que procesa - ingresar_datos.php) que dice "espera...bla bla, sale esto en la parte superior del navegador:

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 6 in /home/xxxxxx/public_html/xxxxxx/ingresar_datos.php on line 40

Aunque siempre inserta bien, es molesto el mensaje superior para un cliente ademas que indica que algo esta mal...

Alguna sugerencia?

Aqui el codigo de ingresar_datos.php
Código PHP:
<?
if(isset($_POST['id_padre'])){ 
$id_padre=$_POST['id_padre']; 


if(isset(
$_POST['id_hija'])){ 
$id_hija=$_POST['id_hija']; 
}

$sql_categoria="SELECT * FROM categorias WHERE id_categoria='".$id_padre."'"
$categoria_resultado=mysql_query($sql_categoria,$conexion); 
$categoria=mysql_result($categoria_resultado,0,"categoria");

$sql_subcategoria="SELECT * FROM subcategorias WHERE id_subcategoria='".$id_hija."'"
$subcategoria_resultado=mysql_query($sql_subcategoria,$conexion); 
$subcategoria=mysql_result($subcategoria_resultado,0,"subcategoria");

$sql="insert into clientes2 (categoria,subcategoria,nombre,direccion,punto_referencia,telf_principal,telf_alternativo,correo_principal,correo_alternativo,direccion_web,persona_contacto,descripcion) values ('$categoria','$subcategoria','$nombre','$direccion','$punto_referencia','$telf_principal','$telf_alternativo','$correo_principal','$correo_alternativo','$direccion_web','$persona_contacto','$descripcion')";
$resultado=mysql_query($sql,$conexion);
?>
Nota: Los select que vienen del form son respectivamente id_padre y id_hija (categoria y subcategoria)

La linea 40 es:
Código PHP:
<?
$subcategoria
=mysql_result($subcategoria_resultado,0,"subcategoria");
?>
  #2 (permalink)  
Antiguo 03/03/2006, 08:59
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Como que nadie....?

Sera que lo dejo asi, porque no he encontrado como resolverlo, haciendo todas las combinaciones posibles en el codigo, quito aqui, pongo alla y nada. Es como mejor me funciona, es decir, es como SI funciona... con otras opciones, no me salen las CAT y SUBCAT o me salen pero sus ID (los numeros y no los nombres de cada una)
  #3 (permalink)  
Antiguo 03/03/2006, 10:26
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
El problema es que como no envias la subcategoria tu variable $id_hija no esta definida. Entonces cuando haces la consulta
$sql_subcategoria="SELECT * FROM subcategorias WHERE id_subcategoria='".$id_hija
obtines un resultado vacio, por lo tanto, cuando querés acceder con mysql_result() a la fila 0 del resultado (la primera fila) ves ese mensaje de error, porque el resultado de la consulta no tiene ninguna fila.
Probá con esto:

Código PHP:
<?
...
if (isset(
$id_hija)) {
$sql_subcategoria="SELECT * FROM subcategorias WHERE id_subcategoria='".$id_hija."'";  
$subcategoria_resultado=mysql_query($sql_subcategoria,$conexion);  
$subcategoria=mysql_result($subcategoria_resultado,0,"subcategoria");
}
...
Saludos
__________________
¿Se me entiende la letra?
  #4 (permalink)  
Antiguo 03/03/2006, 10:50
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Me sigue dando el mismo error...

Con tu sgerencia el codigo quedo asi:
Código PHP:
<?
if(isset($_POST['id_padre'])){ 
$id_padre=$_POST['id_padre']; 
}

$sql_categoria="SELECT * FROM categorias WHERE id_categoria='".$id_padre."'"
$categoria_resultado=mysql_query($sql_categoria,$conexion); 
$categoria=mysql_result($categoria_resultado,0,"categoria");

if (isset(
$id_hija)) {
$sql_subcategoria="SELECT * FROM subcategorias WHERE id_subcategoria='".$id_hija."'";  
$subcategoria_resultado=mysql_query($sql_subcategoria,$conexion);  
$subcategoria=mysql_result($subcategoria_resultado,0,"subcategoria");
}

$sql="insert into clientes2 (categoria,subcategoria,nombre,direccion,punto_referencia,telf_principal,telf_alternativo,correo_principal,correo_alternativo,direccion_web,persona_contacto,descripcion) values ('$categoria','$subcategoria','$nombre','$direccion','$punto_referencia','$telf_principal','$telf_alternativo','$correo_principal','$correo_alternativo','$direccion_web','$persona_contacto','$descripcion')";
$resultado=mysql_query($sql,$conexion);
?>
Igual que antes, inserta los datos perfectamente pero muestro la linea de warning mientras lo hace
  #5 (permalink)  
Antiguo 03/03/2006, 11:11
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Tambiés podes probar esto:
Código PHP:
<? 
... 
$sql_subcategoria="SELECT * FROM subcategorias WHERE id_subcategoria='".$id_hija."'";   
$subcategoria_resultado=mysql_query($sql_subcategoria,$conexion);   
if (
mysql_num_rows($subcategoria_resultado)>0) {
    
$subcategoria=mysql_result($subcategoria_resultado,0,"subcategoria"); 
    }
...
Igualmente creo que deberías hacer alguna verificación para no realizar esa consulta si no es necesario (es decir, si no se ha seleccionado ninguna subcategoria).
Saludos.
__________________
¿Se me entiende la letra?
  #6 (permalink)  
Antiguo 03/03/2006, 11:19
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Excelente JorgitoAlfajor...

Ahora no da el warning.

Muchas gracias!!!!
  #7 (permalink)  
Antiguo 03/03/2006, 11:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Upppppppssssss!!!!!!

Algo que no habia notado antes... si no lleno nada ni escojo nada en las listas, me envia el form vacio.
  #8 (permalink)  
Antiguo 03/03/2006, 11:56
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Bueno, con php lo único que puedes hacer es verificar el valor de los campos antes de insertarlos en la base de datos. Deberías usar isset() o algo como $_POST['tu_campo'] != '' para verificar que el usuario no envie campos vacios. Si lo que querés es evitar que el formulario llegue a enviarse deberias utilizar alguna funcion javascript que verifique que los campos contengan datos antes de enviar el formulario.
Saludos.
__________________
¿Se me entiende la letra?
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 11:44.