Foros del Web » Programando para Internet » PHP »

Probemas con envio de multiples campos...

Estas en el tema de Probemas con envio de multiples campos... en el foro de PHP en Foros del Web. hola a todos, tengo un problema y el cual ya hace como 3 dias que me tiene parado en el mismo lugar. Paso a explicarlo ...
  #1 (permalink)  
Antiguo 03/03/2004, 15:34
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Probemas con envio de multiples campos...

hola a todos, tengo un problema y el cual ya hace como 3 dias que me tiene parado en el mismo lugar. Paso a explicarlo para ver si alguno me puede ayudar a dar con la solucion, la verdad que no doy mas....

Tengo un formulario en el cual mediante un query me desplega una lista de campos, un campo de texto y el segundo un checkbox:

input type="text" name="datos[]" value="$datos"

y

input type="checkbox" name="cat_id2[]" value="$cat_id2"

Ahora, al hacer el envio de los datos necesito que se me cren en una tabla tantos INSERTS como datos se hayan completado y checkboxes se hayan seleccionado. Mediante un FOR o un FOREACH puedo lograr esto perfectamente, siempre y cuando los campos que se completen sean correlativos. Osea que el problema esta cuando se completan campos al azar.
En la tabla se me crean la cantidad de inserts correctos pero el ultimo campo $datos me lo deja vacio.

Aca les dejo el codigo del foreach que recibe los datos en la funcion para ver si alguno me puede ayudar...

foreach ($cat_id2 as $key=>$valor) {

$rs_get_ciudad = sql_query("SELECT cui_id FROM ${prefix}_movies_salas WHERE cat_id = '$valor'",$dbi);

list($cui_id) = sql_fetch_row($rs_get_ciudad);

$sql_ins_datsalas = "INSERT INTO ${prefix}_movies_salas_datos VALUES (NULL, '$sid', '$cui_id', '$valor', '$datos[$key]', '$parentid')";

$rs_ins_datsalas = sql_query($sql_ins_datsalas,$dbi) OR die(mysql_error());

}

Repito que el problema se encuentra cuando se ingresan datos en campos no correlativos..

Saludos a todos y encontre mucha info en esta web.

PD: hace mucho que tengo una cuenta de usuario "holucas" pero no se que pasa que con ella no puedo ingresar ningun mensaje, si quieren la pueden borrar. Gracias
holucas, www.desarrollonuke.org

Última edición por holucas2; 03/03/2004 a las 15:37
  #2 (permalink)  
Antiguo 04/03/2004, 10:21
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Por favor amigos, ninguno tiene algo como para decirme?
Es posible hacerlo o estoy tratando algo imposible?

Saludos y perdon por apurar pero en cualquier momento agarro el 38. :(
  #3 (permalink)  
Antiguo 04/03/2004, 10:41
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
no se que pueda pasar por que en la documentacion de php, dice que se pasan sólo los valores seleccionados, cuando se colocan los campos como un arreglo, osea como tu lo estas haciendo, la verdad, no me ha dado problemas cuando lo he usado.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #4 (permalink)  
Antiguo 04/03/2004, 10:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No sé que dato relaciona tu "checbox" .. pero en teoría deberiera relaciona al "dato" que asocias .. así que si no está ese checbox seleccionado no tendría por qué existir "dato" asociado.

Tal vez .. si pretendes que al escribir sobre el "dato" (text) pase ese dato aunque el checkbox no lo lo seleccinen siendo que este parece que es o relaciona un identificador de un registro de una tabla (cat_id2[]) tendrías que obligar a seleccionarlo también o hacerlo automáticamente -en el cliente- con javascript .. pero recuerda que si no está seleccionado no va "viajar" y por ende esa relación automática que haces usando indices de arrays [] se va a perder ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 04/03/2004, 11:45
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola, gracias por responderme.
Paso a explicarlo mejor mediante dos images asi pueden ver bien que es lo que pasa...

En ambas imagenes veran arriba los campos del form y abajo los resultados del insert.

Las primera imagen es cuando "completo y marco" cada uno de los datos en forma correlativa, tanto el campo texto como el checkbox "El checkbox pasa un dato numerico de un ID" y el otro la informacion.



Y esta segunda imagen es de cuando completo datos salteados.




A ver si ahora me pueden hechar un cable y ojala me haya explicado mejor.
Saludos a todos.
holucas
  #6 (permalink)  
Antiguo 04/03/2004, 11:56
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
De nuevo,,, tomando como referencia la ultima imagen aca les dejo tambien los resultados de los dos arrays que me llegan mediante:

print_r($_POST[datos]);
y
print_r($_POST[cat_id2]);

------------------------------------
Campos de textos:
Array ( [0] => 1:00 - 4:30 - 23:30 [1] => [2] => 11:00 - 3:30 - 22:30 [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => )

Checkboxes:
Array ( [0] => 1 [1] => 11 ) "aca esta todo perfecto, el ID:1 y el ID:11, como fueron marcados en los checkboxes"

Espero que estos datos mas me puedan ayudar!!

Como veran aca lo que esta pasando es que no me respeta el orden en el que fueron completado los campos de texto, dejandome el array "[1] => " vacio alli tendria que estar el dato del array "[2] => 11:00 - 3:30 - 22:30 " y todo el resto ni siquiera se tendrian que imprimir.

Vaya en... en lo que estoy metido!!

Última edición por holucas2; 04/03/2004 a las 12:04
  #7 (permalink)  
Antiguo 04/03/2004, 12:17
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
dentro de este codigo (foreach ($cat_id2 as $key=>$valor)),¿ por que es necesario esto (as $key=>$valor)?. Al menos yo siempre lo he usado asi:

foreach ($cat_id2 as $valor)
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #8 (permalink)  
Antiguo 04/03/2004, 12:39
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
porque es la unica forma de que se realice el insert de los campos '$datos[$key]',
gracias
  #9 (permalink)  
Antiguo 04/03/2004, 12:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y el dato de ciudad(es) ese ID que tienes a la izquierda de todo que agrupa salas .. donde lo usas? ....

Creo que deberías usar arrays bidimensionales minimo tipo:

input type="text" name="datos[$id_ciudad][]" value="$datos"

input type="checkbox" name="cat_id2[$id_ciudad][]" value="$cat_id2"

Por qué .. según se ven en las imagenes tienes un par de bucles anidados para representar los grupos de salas que pertenecen a cada ciudad ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 04/03/2004, 13:41
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola Cluster, entonces tengo que usar un FOR en vez de FOREACH?

gRACIAS
  #11 (permalink)  
Antiguo 04/03/2004, 14:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. en principio si.. pero todavía no sé como formas ese formulario con esos campos .. si usas llamadas a tu BD y bucles while() para representar su resultado .. puedes usar contadores clásicos para ir definiendo tu array bidimensional: $contador++;

Y en el script que proceses esos datos te vendría mejor un for() por lo menos para el bucle "padre" (el que lea esos ID_ciudad) y para el anidado consecutivo ya podrías usar lo que actualmente usas ... o más bucles for().

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 04/03/2004, 14:34
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
HOla, en el formulario lo que hago es que me muestre las salas que pertencen a cada ciudad en el campo de texto tengo que poner los horarios en que esa pelicula se proyectara en cada sala de cada ciudad.
Los datos los tomo desde dos tablas, una tabla es la de las ciudades y de alli tomo el ID el el nombre de cada ciudad, con el id hago where en la tabla "salas" para que me muestre que sala corresponde a cada ciudad. El checkbox es para enviar el ID de cada sala.

$listaciudades = sql_query("SELECT * FROM ".$prefix."_movies_ciudades ORDER BY ciudad", $dbi);
while(list($cat_id3, $ciudad) = sql_fetch_row($listaciudades, $dbi)) {
$listasalas = sql_query("SELECT * FROM ".$prefix."_movies_salas WHERE cui_id='$cat_id3' ORDER BY sala", $dbi);
$totalsalas = sql_num_rows($listasalas);
echo "<tr>";
echo "<td rowspan=\"".$totalsalas."\" align=\"center\" valign=\"middle\" width=\"*\">";
echo "<b>ID:</b> $cat_id3 <br><b>".$ciudad."</b>";
echo "</td>";

while(list($cat_id2, $cui_id2, $sala2) = sql_fetch_row($listasalas, $dbi)){
echo "<td align=\"right\" width=\"*\">&nbsp;";
echo "<b>ID:</b> $cat_id2<br>".$sala2.":&nbsp;<input type=\"text\" name=\"datos[$sala2]\" value=\"$datos\" size=\"50\">&nbsp;<input type=\"checkbox\" name=\"cat_id2[$sala2]\" value=\"$cat_id2\">";
echo "</td>";
echo "</tr>";
}
}

A ver si sirve eso! Un abrazo y gracias!!
holucas

PD: este sistema de foros es buenisimo!!
  #13 (permalink)  
Antiguo 04/03/2004, 15:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
A ver si me centro ..

El cui_id necesitas pasarlo a tu script de proceso. Para ello crea un campo hidden de mismo estilo a los anteriores tipo array:

Código PHP:
echo "<input type=\"hidden\" name=\"cui_id[]\" value=\"$cat_id3\">"
esto debe ir en el bucle superior (el primer while ..)

En tu script de proceso .. deberias leer el bucle principal con un foro o foreach para obtener todos esos ID de cui_id que llegarán desde tu formulario (a todo esto suponemos que el formulario <form> y final </form> lo defines antes y despues del bucle superior ..?)

Código PHP:
foreach ($_POST['cui_id'] as $cui_id2){ 
    for (
$contador=0$contador<count($_POST['cat_id2']); $contador++){

   
$sql_ins_datsalas "INSERT INTO ${prefix}_movies_salas_datos VALUES (NULL, '$sid', '$cui_id2', '$_POST[cat_id2][$contador]', '$_POST[datos][$contador]', '$parentid')";
  
// resto ejecución consulta ...


  
//cierre for
}// cierre foreach 
Así hasta evitas esa consulta SQL en tu proceso de insercción cuando ya lo tenías en tu formulario. El resto de campos . ese $sid y demás variables junto con ese valor "NULL" para castdes_id (que supongo que será un campo autincremental?) no sé de donde provienen esos datos .. supongo que se generarán furea de esos bucles anidados que usas.

En el "transfondo" de todo esto .. no se si se habrá resuelto tu problema .. mas bien ahora que lo veo se habría "optimizado" .. El código que escribo es " al vuelo" .. no es lo mismo probarlo y tener datos de prueba para ello + observar como funciona y se comparta que dar "ideas" en un foro así que .. por mi parte lo que te comento igual funciona pero puede no funcionar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/03/2004 a las 15:15
  #14 (permalink)  
Antiguo 04/03/2004, 17:12
 
Fecha de Ingreso: marzo-2004
Mensajes: 8
Antigüedad: 20 años, 1 mes
Puntos: 0
Bueno, no hay caso, voy a tener que decistir porque una semana peleando con esto ya es demaciado.

Cita:
<form> y final </form>
Si esta definido, solo los evite para ahorrar espacio.

Cita:
ese $sid y demás variables junto con ese valor "NULL" para castdes_id (que supongo que será un campo autincremental?) no sé de donde provienen esos datos .. supongo que se generarán furea de esos bucles anidados que usas.
Asi es, el $sid es el valor perteneciente a la pelicula. Y el $castdes_id se autoincrementa.

Cita:
En el "transfondo" de todo esto .. no se si se habrá resuelto tu problema .. mas bien ahora que lo veo se habría "optimizado" ..
Tenes razon Cluster, haciendolo de esa forma me ahorro el 1er query para tomar el "$cui_id".

Pero bueno, haciendolo de la forma que sea el problema del campo de texto $datos se pierde al ingresar campos al azar, por ejemplo comletando solamente el campo de texto y el checkbox "Lauren Blanes 10:" en las imagenes es el campo que figura con el "ID: 11" osea el 3ro empezando de arriba.


Pues nada amigos, gracias por haberme ayudado y si en algun momento logro la solucion no dudare en postearla . Si os ocurre algo mas, seguire leyendo.

Saludos a tod@s
holucas
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 22:22.