Foros del Web » Programando para Internet » PHP »

Insert dinámico.

Estas en el tema de Insert dinámico. en el foro de PHP en Foros del Web. Tengo un formulario de varios checkbox, los cuales surgen de una consulta. Es decir, los checkbox que se muestran en pantalla, surgen de una consulta ...
  #1 (permalink)  
Antiguo 11/04/2006, 20:57
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Insert dinámico.

Tengo un formulario de varios checkbox, los cuales surgen de una consulta.

Es decir, los checkbox que se muestran en pantalla, surgen de una consulta previa realizada por el usuario, mostrándose un listado de opciones cada uno con su respecto checkbox
Ej:

Opcion 1 []
Opcion 2 []
Opcion 9 []

Cada [] viene a ser un checkbox

Ahora bien, cuando el usuario envía el formulario, yo debería guardar el valor de los checkbox seleccionados unicamente en una tabla, junto a otros datos que no vienen al caso.

Y acá me genera la duda,... como debo hacer el loop del insert?

Hce lo siguiente, pero lo que hace es introducirme en la tabla el valor del primer checkbox seleccionado, de forma repetida constantemente sin parar,... o sea, un loop infinito con el primer valor:

Código:
do { 
 
   $valor_dinamico = $_POST['valor'];
 
   [INSERT...]
 
   } while ($_POST['valor'] != $_POST['valor']);
 
}
?>
Siendo $_POST['valor'], el nombre del checkbox, el cual se repetirá tantas veces como opciones haya tildado el usuario en el formulario.

También probé lo siguiente, pero el resultado fue el mismo:
Código:
do { 
 
   $valor_dinamico = $_POST['valor'];
 
   [INSERT...]
 
   } while ($_POST['valor'] == '');
 
}
?>
Espero haberme explicado bien. No soy muy bueno programando, asi que les pediría la mayor didáctica posible por favor. Desde ya muchas gracias.

Última edición por chancha; 11/04/2006 a las 21:04
  #2 (permalink)  
Antiguo 11/04/2006, 22:20
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 3 meses
Puntos: 2
Mira me parece a mi que tendrias que usar "FOR EACH".

Con for each recorres un array asi:
Código PHP:
    foreach ($_POST as $campo => $valor) {
                 echo 
"CAMPO Nombre: ".$campo."<br>Valor del campo: ".$valor."<br>";
       } 
Tenes tambien que filtrar los CAMPOS, es decir, el FOR EACH buscara en todos los $_POST ($_POST['nombre'], $_POST['mi_mama'], $_POST['ametralladoras']), y de seguro algunos de esos no vas a querer involucrarlos en el bucle que INSERTA a la base... entonces hace así:

Código PHP:
    foreach ($_POST as $campo => $valor) {
                if (
$campo != 'mi_mama' && $campo != 'ametralladoras') {
                                
$sql "meter $valor a mi base";
                                echo 
"Mira mama estoy metiendo muchos campos al mismo tiempo";

                }
       } 
Y asi creo que lo solucionas... cuestion nomas de probar e ir modificando todo hasta que ande.

Chequeate "foreach()" en www.php.net :)

saludos
  #3 (permalink)  
Antiguo 11/04/2006, 22:57
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
Probé el primer ejemplo, como para empezar a jugar con eso ya que es algo nuevo para mi, pero me encuentro que solo muestra el nombre y valor de uno de los checkbox.

Es decir, continuando con el ejemplo que di en mi primer post, si selecciono opcion 1 y 2, solamente me muestra el 2. No me muestra 1 y 2. Me explico?.
Me muestra el resto de las variables post enviadas (submit, etc) pero no hace lo mismo con los checkbox.

Ten en cuenta que todos los checkbox tienen el mismo nombre.
De hecho, probé de cambiarles el nombre a cada uno y funcionó.
Es correcto esto?

Respecto al segundo ejemplo, entiendo que el loopeado para el insert lo está haciendo solamente para $_POST['nombre'], y no para las otras dos,... verdad?

Nuevamente gracias por tu ayuda.
  #4 (permalink)  
Antiguo 12/04/2006, 00:39
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 3 meses
Puntos: 2
Hola chancha...

Con respecto a los nombres... yo esta funcion que de di de ejemplo la use SIEMPRE con distintos nombres (Si vamos al caso, no pueden haber dos elementos con el mismo nombre en el array ¿entendes? cuando pones más de un elemento con el mismo nombre, EN ESTE CASO, estas renombrando todos los checkbox!!)

Solucion: Genera los check box con distinto nombre, podes hacerlo dinamicamente:

for ($i=0; $i <= $que_tanto; $i++) {
echo "<input type="checkbox" name="checkbox_num".$i." value=".$value." />";
}

Con respecto a lo primero... no te entendi... ¿me mostras el codigo?

Bye
  #5 (permalink)  
Antiguo 12/04/2006, 06:20
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Cita:
Iniciado por Computer XTress
Hola chancha...
Solucion: Genera los check box con distinto nombre, podes hacerlo dinamicamente:

for ($i=0; $i <= $que_tanto; $i++) {
echo "<input type="checkbox" name="checkbox_num".$i." value=".$value." />";
}
Creo que sería mejor utilizar un arreglo de checkbox en lugar de darles a todos un nombre distinto:

Código PHP:
<?
for ($i=0$i <= $que_tanto$i++) {
   echo 
"<input type=\"checkbox\" name=\"nombre_checkbox[]\" value=\"$value\" />";
?>
Luego, el la pagina que recibe los datos utilizas un foreach sobre $_POST['nombre_checkbox']. De esta forma vas a asegurarte que estas obteniendo solo los valores de los checkbox y no los de los otros campos que tenga el formulario, por lo que te ahorras el filtrado:

Código PHP:
<?
foreach($_POST['nombre_checkbox'] as $clave => $valor) {
   
//haces los insert
   
}
?>
Saludos.
__________________
¿Se me entiende la letra?
  #6 (permalink)  
Antiguo 05/05/2006, 12:23
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 18 años, 3 meses
Puntos: 0
JorgitoAlfajor, lo que tu me dices no me funciona.
Me tira el siguiente error: Warning: Invalid argument supplied for foreach() on line 20

Y en la linea 20, justamente tengo el foreach.

En el nombre del checkbox le pones un [],... que es esto?

Gracias
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 06:43.