PHP - Insertar varias filas a la vez

 
Vista:
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 05/10/2016 16:42:57
Buenas,

como siempre, llevo ya unos cuantos días atascado con este asunto, he rastreado webs y probado códigos pero no logro conseguir grabar varios datos a la vez.
He creído entender el funcionamiento del foreach pero no consigo llevar los datos a mi tabla...

he simplificado mi código, y así es como lo estoy intentando:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<form method="post" action="prenotas.php">
<table width="100%" border="2" align="center">
  <tbody>
    <tr bgcolor="#E6F1CD">
      <th width="14%" rowspan="2" scope="col"></th>
      <th colspan="3" scope="col"></th>
      <th width="23%" rowspan="2" scope="col">OBSERVACIONES</th>
    </tr>
    <tr>
      <th colspan="3" bgcolor="#E6F1CD" scope="col">Hasta el día de hoy, su hijo/a está trabajando de forma satisfactoria</th>
    </tr>
 
    <?php do { ?>
      <tr>
        <td > <input type="hidden" id="hidden" name="hidden[]" value="<?php echo $row_Alumnado_profe['Id. Escolar']; ?>"></td>
        <td width="12%" bgcolor="#DFFCA1" style="text-align: center"><label><input type="checkbox" name="checkbox_prenotas[]" value="Si"><strong>SI</strong></label></td>
        <td width="12%" bgcolor="#FBFFBF" style="text-align: center"><label><input type="checkbox" name="checkbox_prenotas[]" value="A veces"><strong>A VECES</strong></label></td>
        <td width="12%" bgcolor="#FDC7C8" style="text-align: center"><label><input type="checkbox" name="checkbox_prenotas[]" value="No"><strong>NO</strong></label></td>
        <td width="40%"><select id="select_" name="select_[]">
        					<option selected value="">Elige una observación</option>
        					<option value="aa">aa</option>
        					<option value="ss">ss</option>
     						</select></td>
      </tr>
      <?php } while ($row_Alumnado_profe = mysql_fetch_assoc($Alumnado_profe)); ?>
  </tbody>
</table>
 
      <input type="submit" name="submit" value="Submit" />
</form>
 
 
 
 
  <?php
if (isset($_POST['submit'])) {
 
foreach($_POST['hidden'] as $hidden){
         $source .= $hidden.", ";
        $insertar=mysql_query("INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('".$hidden."', '".$_POST['checkbox_prenotas']."', '".$_POST['select_']."')");
		}
}
?>

qué hago mal?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Holman (1 intervención) el 05/10/2016 20:14:43
Estas llamando mal el Php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 05/10/2016 20:37:47
Cierto, por eso pregunto... como debería llamarlo bien?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar varias filas a la vez

Publicado por xve (6935 intervenciones) el 05/10/2016 20:53:10
Hola Daniel, prueba ha mostrar las consultas sql en el foreach... algo así:
1
echo "INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('".$hidden."', '".$_POST['checkbox_prenotas']."', '".$_POST['select_']."')";

para ver que ponga correctamente todos los valores.

También puedes ver que contiene la variable $_POST['hidden'] con:
1
print $_POST['hidden']

Si nos puedes mostrar que te devuelven...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 05/10/2016 21:12:04
Hola xve!

Pues al hacer el echo que me pides, me imprime lo siguiente:

INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3296334', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3280725', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3322959', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2967828', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3002876', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2679133', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2959874', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3259993', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3306215', 'Array', 'Array')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2988730', 'Array', 'Array')....


así con todos los hidden.

Estos hidden son números de identificación, por lo que veo que lo recorre bien. En la base de Datos se guarda precisamente eso, la columna hidden_id con los números correctamente, pero en las otras dos columnas sólo pone array cuando debería grabar lo seleccionado por el usuario.

Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar varias filas a la vez

Publicado por xve (6935 intervenciones) el 06/10/2016 08:26:56
Hola Daniel, fijate que tienes definido el input así:
1
<input type="checkbox" name="checkbox_prenotas[]" value="Si">
indicando que envias un array de valores...

prueba a enviar simplemente un valor... pon así:
1
<input type="checkbox" name="checkbox_prenotas" value="Si">


Y el select lo mismo... cambia esto:
1
<select id="select_" name="select_[]">
por esto:
1
<select id="select_" name="select_">

Coméntanos ,ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 06/10/2016 16:16:50
En ese caso, me graba en todas las columnas el ultimo checkbox que seleccioné, es decir, en vez de la palabra "Array" Aparece todo "No".
En cuanto al select, aparece todo con la primera opción.

Vuelvo a hacer el echo...

INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3296334', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3280725', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3322959', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2967828', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3002876', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2679133', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2959874', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3259993', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('3306215', 'No', 'aa')INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('2988730', 'No', 'aa')....

es increíble no poder hacerlo... ya había usado el foreach() de forma parecida en otro código y me iba bien... no lo entiendo.

estoy viendo también el uso del for()... pero no lo entiendo aun muy bien, tenéis un ejemplo para hacer un insert?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 07/10/2016 23:25:59
Hola de nuevo;

otro dia más para llegar a lo mismo. Esta vez, con este código para insertar los datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if (isset($_POST['submit'])) {
 
$checkbox=$_POST['checkbox_prenotas'];
$select=$_POST['select_'];
 
foreach ($_POST['hidden'] as $hidden) {
    $Valores .= "('$hidden', '$checkbox', '$select'),";
}
$Valores = rtrim($Valores, ',');
 
$query = "INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs)
VALUES $Valores";
 
$q2 = mysql_query($query);
 
if (!$q2)
  {
  echo ('Q2 failed: ' . mysql_error());
  }
 else {echo 'success Q2';}
}
 
?>


Obtengo los mismos resultados; si los imput tienen el name "checkbox_prenotas[]" obtengo en mi base de datos la palabra Array para todas las filas insertadas.

Si el name es "checkbox_prenotas" se graba el ultimo valor de los checkbox seleccionados, en mi caso la palabra "No" para todas las filas insertadas

Ando ya a la desesperada pensando en abandonar, pero no puede ser tan difícil!! Alguna idea o sugerencia por donde pueda investigar?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 08/10/2016 21:39:42
Por fin lo consegui!!!

me ha tenido en jaque varios días, y no estaba yo tan desencaminado: ahi va el código que me ha funcionado:

1
2
3
4
5
6
7
8
9
10
<?php
if (isset($_POST['submit'])) {
 $i=0;
foreach($_POST['hidden'] as $hidden){
 
        $insertar=mysql_query("INSERT INTO prenotas (hidden_id, checkbox_prenotas, select_obs) VALUES ('".$hidden."', '".$_POST['checkbox_prenotas'][$i]."', '".$_POST['select_'][$i]."')");
		$i++;
		}
}
?>

los name de los Impuls deben tener corchetes... tal como lo tenia en el código inicial.

Ahi queda eso, por si alguien lo busca

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 09/10/2016 12:11:13
Pues me surge ahora otro problema...

supongamos que el while me genera 10 filas, cada con su id, checkboxes y su select.

Si el usuario solo selecciona checkboxes del primero y ultimo y le da a grabar... todo va bien menos la base de datos, donde el valor del checkbox se lo da al primer y segundo id...

A ver si me explico bien con imágenes:

Este es un ejemplo de mi web: fijaos que no he seleccionado nada en algunos alumnos

Captura-de-pantalla-2016-10-09-a-las-12.02.19

bien, pues si hago submit, esos valores de checkbox los asigna por orden, dándoselos a los que no había seleccionado nada.

¿PORQUE EL PHP es tan injusto conmigo? jaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Ignacio (15 intervenciones) el 09/10/2016 12:47:12
Hola Daniel, tengo una duda con respecto a tu aplicación ¿Por cada fila o alumno solo se podrá seleccionar una única opción de las tres opciones: "SI", "A VECES" y "NO", o podrá seleccionarse dos o tres opciones a la vez, por ejemplo "SI" y "A VECES"?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 09/10/2016 13:53:15
Hola Ignacio, pues en principio se pueden pero NO DEBEN marcar mas opciones... se que debo usar radiobuttons para que no ocurra pero aun no he cambiado el código.

En cuanto a mi duda, he avanzado a entender que cada alumno que muestra debe tener los name de los checkbox iguales entre si, pero distintos al de otro alumno.
Pero aun ando perdido, no se como montarlo.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Ignacio (15 intervenciones) el 09/10/2016 14:04:01
Entonces deberías de colocar radiobuttons como dices y dejar como opción predeterminada "NO", con eso solucionarías tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 09/10/2016 14:06:29
Casi casi...

no puedo dejar ninguna opción seleccionada, la pregunta que le hago al profesorado es si el alumno/a trabaja de forma satisfactoria... no puedo dejar el No por defecto. Seguro que a alguno se le pasa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Ignacio (15 intervenciones) el 09/10/2016 14:20:48
Entonces puedes añadir una cuarta opción por defecto que sea "AÚN NO VALORADO" o algo así. Si se le pasa a un profesor seleccionar una de las otras tres opciones, no debería ser tu problema y ya con esta opción cumples con tu trabajo, avisando que al profesor se le ha pasado seleccionar una de las opciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar varias filas a la vez

Publicado por Daniel (43 intervenciones) el 09/10/2016 17:59:03
Listo!! solo hay que darle una variable al name para que cada alumno tenga un grupo de radiobuttons con name diferente a otro alumno.

Gracias a todos, cada vez que intervengo me ayudas
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar