Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] INSERT INTO con varios array

Estas en el tema de INSERT INTO con varios array en el foro de PHP en Foros del Web. Buenas a todos, sucede que tengo un formulario dinámico, cada input puede contener el valor de 1, 10, 100... n registros, tengo entonces 4 arrays, ...
  #1 (permalink)  
Antiguo 13/05/2016, 12:22
Avatar de Alejandra_Sand  
Fecha de Ingreso: marzo-2016
Mensajes: 22
Antigüedad: 5 años, 10 meses
Puntos: 1
INSERT INTO con varios array

Buenas a todos, sucede que tengo un formulario dinámico, cada input puede contener el valor de 1, 10, 100... n registros, tengo entonces 4 arrays, mismos que se encuentran descritos abajo:


Código HTML:
<form method="post">
  <table>
    <tr>
       <td><input required name="idalumno[]" placeholder="ID Alumno"/></td>
       <td><input required name="nombre[]" placeholder="Nombre Alumno"/></td>
       <td><input required name="carrera[]" placeholder="Carrera"/></td>
       <td><input required name="grupo[]" placeholder="Grupo"/></td>
    </tr>
  </table>
</form> 
Cuando ingreso sólo 1 registro(fila), si se inserta y me envía el mensaje de confirmación, pero cuando es más de un registro (2 o más filas), la query no se efectua, si alguien pudiera ayudarme lo agradecería muchisimo.


Código PHP:
                if(isset($_POST['insertar']))

                {
                    
                    
$id "('" implode("'), ('"$_POST['idalumno']) . "')";
                    
$nom " ('" implode("'), ('"$_POST['nombre']) . "')";
                    
$carr "('" implode("'), ('"$_POST['carrera']) . "')";
                    
$gru "('" implode("'), ('"$_POST['grupo']) . "')";


                    
$sql "INSERT INTO alumnos (id_alumno, nombre, carrera, grupo) 
                    VALUES ($id, $nom, $carr, $gru)"
;
                    
$sqlRes=$conexion->query($sql) or mysql_error();

                    if (
$sqlRes==true)
                    {
                        echo 
'¡Tu Query sirve! :D';
                    }

                    else
                    {
                        echo 
'Tu Query no sirve, eres popo :(';
                    }
                    
                } 
  #2 (permalink)  
Antiguo 13/05/2016, 12:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 1 mes
Puntos: 2658
Respuesta: INSERT INTO con varios array

No puedes hacer un INSERT INTO con valores en array. Mysql no entiende arrays (no es PHP, son entornos diferentes), y además un INSERT es por CADA registro por separado, donde un set de VALUES entre paréntesis se inserta en un UNICO registro.

No confundas lo que hace PHP con lo que debe hacer MySQL. No es lo mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/05/2016, 12:40
Avatar de Alejandra_Sand  
Fecha de Ingreso: marzo-2016
Mensajes: 22
Antigüedad: 5 años, 10 meses
Puntos: 1
Respuesta: INSERT INTO con varios array

¡Hola gnzsoloyo! Muchas gracias por responder

Quizá el titulo esta mal escrito, pero al final convierto mis arreglos en strings que coloco en la query, así que no estoy enviando arrays sin procesar en mi INSERT INTO. Confió que debe haber una forma por que, cuando envío sólo un array con varios elementos (convertido en string) para insertarse un campo, ejemplo:

Código PHP:
                   $sql "INSERT INTO alumnos (id_alumno)  VALUES ($id)"
                    
$sqlRes=$conexion->query($sql) or mysql_error(); 
Si me inserta los 10, o 20 o 30 valores; pero cuando hago esto con más de dos campos la query deja de ser efectiva. :(
  #4 (permalink)  
Antiguo 13/05/2016, 13:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 1 mes
Puntos: 2658
Respuesta: INSERT INTO con varios array

Bueno, vamos por partes:

Cita:
cuando envío sólo un array con varios elementos (convertido en string) para insertarse un campo
Eso implicaría que estás usando un campo multivaluado, lo que es algo total y absolutamente prohibido en las bases de datos relacionales, sólo podrías enviar un array como cadena de texto si la columna destino fuese de tipo VARCHAR, y además cualquier otro campo que hubiese en esa tabla no tuviese la constraint NOT NULL.

Me parece que no conoces suficiente de SQL y arquitectura de BBDD como para lograr lo que quieres hacer...
Sin ofender.

Si lo que quieres es lograr un INSERT múltiple, no lo estás haciendo bien.

Explica con claridad qué es lo que se supone debes lograr.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/05/2016, 13:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 1 mes
Puntos: 2658
Respuesta: INSERT INTO con varios array

Postea lo que te meustre tu código agregando la linea con un echo de esta forma:
Código PHP:
Ver original
  1. if(isset($_POST['insertar']))
  2.  
  3.                 {
  4.                      
  5.                     $id = "('" . implode("'), ('", $_POST['idalumno']) . "')";
  6.                     $nom = " ('" . implode("'), ('", $_POST['nombre']) . "')";
  7.                     $carr = "('" . implode("'), ('", $_POST['carrera']) . "')";
  8.                     $gru = "('" . implode("'), ('", $_POST['grupo']) . "')";
  9.  
  10.  
  11.                     $sql = "INSERT INTO alumnos (id_alumno, nombre, carrera, grupo)  
  12.                    VALUES ($id, $nom, $carr, $gru)";
  13.                     // VEamos qué quedó armado:
  14.                     echo $sql;
  15.  
  16.  
  17.                     $sqlRes=$conexion->query($sql) or mysql_error();
  18.  
  19.                     if ($sqlRes==true)
  20.                     {
  21.                         echo '¡Tu Query sirve! :D';
  22.                     }
  23.  
  24.                     else
  25.                     {
  26.                         echo 'Tu Query no sirve, eres popo :(';
  27.                     }
  28.                      
  29.                 }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/05/2016, 13:29
Avatar de Alejandra_Sand  
Fecha de Ingreso: marzo-2016
Mensajes: 22
Antigüedad: 5 años, 10 meses
Puntos: 1
Respuesta: INSERT INTO con varios array

Es un ejercicio de clase, perdona mi ignorancia soy estudiante de 5to semestre y sé que aún me faltan muchas cosas por aprender, pero me esfuerzo.

La médula del ejercicio es hacer en efecto un insert multiple a partir de un formulario dinamico, mi bd tiene una única tabla para hacer el ejemplo.

Mi formulario, si yo clico sobre el botón "más" me aparece una nueva fila para insertar registros:



Ahora si, mando a imprimir las variables $id, $nom, $carr y $gru; me las imprime así
(basandome en los valores capturados arriba):

  #7 (permalink)  
Antiguo 13/05/2016, 13:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 1 mes
Puntos: 2658
Respuesta: INSERT INTO con varios array

Bueno, por lo pronto, lo que te pedí era que nos pasaras lo que contiene la query, no las variables independientes, porque alli se mostraría lo que realmente está pasando.
En cualquier caso, la cosa es mas o menos simple: EN PHP tienes que recorrer cada uno de los diferentes indices de cada array, y por cada indice recorrido crear un set de valores a insertar en un registro.
Básicamente, tu query (siguiendo tu ejemplo) debería quedar construida de esta forma:

Código SQL:
Ver original
  1. INSERT INTO alumnos (id_alumno, nombre, carrera, grupo)
  2. VALUES (42, 'dfljñlgk', 'jrrsdgh', 'Ing. Civil', 'G124'),
  3. (23, 'littdhjhlñ', 'lkbfdrtyu', 'Ing. en Telecomunicaciones', 'T152');

¿Se va entendiendo?

Es un problema de resolución sencilla, se te complica porque tienes cuatro arrays diferentes, pero estos deben ser recorridos en secuencia para asignar en orden correcto los datos de cada indice del mismo nivel, a un set diferente del VALUES en SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 13/05/2016, 13:46
Avatar de Alejandra_Sand  
Fecha de Ingreso: marzo-2016
Mensajes: 22
Antigüedad: 5 años, 10 meses
Puntos: 1
Respuesta: INSERT INTO con varios array

Creo que entiendo, debo recorrer cada uno de los cuatro arreglos, separar y concatenarlos para que resulte la estructura de la query que pones de ejemplo... Bueno, teniendo esto creo que puedo hacer algo. Seguiré trabajando en esto y colocaré aquí lo que resulté.

Muchisimas gracias de nuevo por la ayuda!
  #9 (permalink)  
Antiguo 13/05/2016, 14:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 1 mes
Puntos: 2658
Respuesta: INSERT INTO con varios array

Nota: Te conviene usar un simple for(), y dentro de el hacer la concatenación. No uses un foreach() para esta solución o te puedes meter en un enredo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 13/05/2016, 21:12
Avatar de Alejandra_Sand  
Fecha de Ingreso: marzo-2016
Mensajes: 22
Antigüedad: 5 años, 10 meses
Puntos: 1
Respuesta: INSERT INTO con varios array

Al final no use el for y con el foreach efectivamente me hice bolas, así que encontré una forma de hacerlo con while(), lo dejo aquí por si a alguien le llega a ser de ayuda, gracias!

Así queda lo que ocurre al presionar el botón de insertar ^^

Código PHP:
                if(isset($_POST['insertar']))

                {


                
$items1 = ($_POST['idalumno']);
                
$items2 = ($_POST['nombre']);
                
$items3 = ($_POST['carrera']);
                
$items4 = ($_POST['grupo']);
                 
                
                while(
true) {
                    
// Fetch Values
                    
$item1 current($items1);
                    
$item2 current($items2);
                    
$item3 current($items3);
                    
$item4 current($items4);
                    
                    
// Print Values
                    
$id=(( $item1 !== false) ? $item1 ", &nbsp;");
                    
$nom=(( $item2 !== false) ? $item2 ", &nbsp;");
                    
$carr=(( $item3 !== false) ? $item3 ", &nbsp;");
                    
$gru=(( $item4 !== false) ? $item4 ", &nbsp;");


                    
$valores='('.$id.',"'.$nom.'","'.$carr.'","'.$gru.'"),';

                    echo 
$valores;
                    
$valoresQsubstr($valores0, -1);
                    echo 
$valoresQ;

                    
$sql "INSERT INTO alumnos (id_alumno, nombre, carrera, grupo) 
                    VALUES $valoresQ"
;
                    
$sqlRes=$conexion->query($sql) or mysql_error();

                    
                    
// Up! Next Value
                    
$item1 next$items1 );
                    
$item2 next$items2 );
                    
$item3 next$items3 );
                    
$item4 next$items4 );
                    
                    
// Check terminator
                    
if($item1 === false && $item2 === false && $item3 === false && $item4 === false) break;
    
                }
        
                } 
  #11 (permalink)  
Antiguo 14/05/2016, 14:15
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 8 años, 4 meses
Puntos: 145
Respuesta: INSERT INTO con varios array

Creo que esto es lo que necesitas: https://mimentevuela.wordpress.com/2...-inputs-html5/
__________________
¿Te sirvió la respuesta? Deja un +1

Etiquetas: arrays, formulario, inserción, múltiple
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 20:03.