Foros del Web » Programando para Internet » PHP »

insertar datos de array en mysql

Estas en el tema de insertar datos de array en mysql en el foro de PHP en Foros del Web. Hola a todos, soy nuevo en el foro y en esto de la programación php. Les cuento, mi problema es que tengo un código con ...
  #1 (permalink)  
Antiguo 29/07/2011, 13:37
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
insertar datos de array en mysql

Hola a todos, soy nuevo en el foro y en esto de la programación php.
Les cuento, mi problema es que tengo un código con campos dinámicos en javascript, es esta:

<html>
<head>
<title>Crear Campo de texto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">

icremento =0;
function crear(obj) {
icremento++;

field = document.getElementById('field');
contenedor = document.createElement('div');
contenedor.id = 'div'+icremento;
field.appendChild(contenedor);

boton = document.createElement('input');
boton.type = 'text';
boton.name = 'h'+'[]';
contenedor.appendChild(boton);

boton = document.createElement('input');
boton.type = 'text';
boton.name = 'p'+'[]';
contenedor.appendChild(boton);

boton = document.createElement('input');
boton.type = 'text';
boton.name = 'q'+'[]';
contenedor.appendChild(boton);

boton = document.createElement('input');
boton.type = 'button';
boton.value = 'Borrar';
boton.name = 'div'+icremento;
boton.onclick = function () {borrar(this.name)}
contenedor.appendChild(boton);
}
function borrar(obj) {
field = document.getElementById('field');
field.removeChild(document.getElementById(obj));
}
</script>
</head>
<body>
<form name="form1" method="POST" action="prueba.php">

<fieldset id="field">
<input type="button" value="Crear caja de texto" onClick="crear(this)">
<input name="save" type="submit" value="Guardar" onClick="enviar(this)">
</fieldset>
</form>
</body>
</html>


tengo otra página que recoge los datos enviados por el array que se genera
y los inserta en la base de datos que es esta:

Código PHP:
<?php require_once('../Connections/conexion.php'); ?>
<?php
foreach($_POST['h'] as $key=>$value
{
    echo 
mysql_select_db($database_conexion$conexion);
    echo 
mysql_query("INSERT INTO planifi_insum (id_insumo) VALUES('$value')",$conexion)or die(mysql_error());
    
}

foreach(
$_POST['p'] as $key=>$value
{
    echo 
mysql_select_db($database_conexion$conexion);
    echo 
mysql_query("INSERT INTO planifi_insum (nombre_insumos) VALUES('$value')",$conexion)or die(mysql_error());
}
foreach(
$_POST['q'] as $key=>$value
{
    echo 
mysql_select_db($database_conexion$conexion);
    echo 
mysql_query("INSERT INTO planifi_insum (cantidad) VALUES('$value')",$conexion)or die(mysql_error());
}
?>
Al enviar los datos estos se ingresan de esta forma:


38 3
37 2 0
36 1 0

Me gustaría que me ayudaran para que los datos se ingresen así:

38 1 2 3
39 2 3 4

Agradecería toda la ayuda que me pudieran brindar.
  #2 (permalink)  
Antiguo 29/07/2011, 16:39
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: insertar datos de array en mysql

Cita:
Al enviar los datos estos se ingresan de esta forma:


38 3
37 2 0
36 1 0

Me gustaría que me ayudaran para que los datos se ingresen así:

38 1 2 3
39 2 3 4
No entendí muy bien esto que escribiste, pero me imagino que lo que quieres es que en cada registro se guarde la información de manera ordenada en cada campo correspondiente, de la misma manera como es ingresada en los campos de texto dinámicos. Pues pensando esto he probado el código y según he visto el problema es que en cada iteración del cada bucle foreach(), esto es en cada consulta, se inserta solo un dato en un campo, cuando lo necesario es insertar los tres datos (id_insumo, nombre_insumos, cantidad) en una sola consulta. Yo pude resolver esto con el siguiente código.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $h= array();
  4. $p= array();
  5. $q= array();
  6.  
  7. foreach($_POST['h'] as $key=>$value)
  8.     $h[]= $value;
  9.  
  10. foreach($_POST['p'] as $key=>$value)
  11.     $p[]= $value;
  12.  
  13. foreach($_POST['q'] as $key=>$value)
  14.     $q[]= $value;
  15.  
  16. $conexion= mysql_connect("localhost", "root", "");
  17. mysql_select_db("test", $conexion);
  18.  
  19. for($i=0; $i<count($h); $i++)
  20. {
  21.    mysql_query("INSERT INTO planifi_insum (id_insumo, nombre_insumos, cantidad) VALUES($h[$i], '$p[$i]', $q[$i])",$conexion)or die(mysql_error());
  22. }
  23.  
  24. ?>

Tambien te sugiero que la selección de la base de datos la realizes fuera de cualquier bucle ya que el resultdo es el mismo y te ahorras lineas de código y quizá algo de tiempo de ejecución. Espero que te sirva de algo esta solución.
  #3 (permalink)  
Antiguo 29/07/2011, 18:28
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: insertar datos de array en mysql

muchas gracias amigo, me ha funcionado perfecto, quizás no me expresé bien explicando el problema, pero has captado justo lo que necesitaba, mi proyecto y yo te lo agradecemos infinitamente, saludos!
  #4 (permalink)  
Antiguo 30/07/2011, 09:23
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: insertar datos de array en mysql

hola tengo otra consulta, el otro codigo me funciona bien agregando los datos a mysql, pero cambie el codigo del javascript a este para generar los campos dinamicos a este

/* Partimos por definir una variable llamada posicionCampo. Esta variable servirá como índices para marcar cuantos campos se han agregado dinámicamente. La inicializamos en 1, ya que la primera llamada ocurrirá cuando no hayan campos agregados */

var posicionCampo=1;

/* Declaramos la función agregarUsuario( ) */

function agregarUsuario(){

/* Declaramos una variable llamada nuevaFila y a ella le asignamos la recuperación del elemento HTML designado por el id tablaUsuarios. En este caso, la tabla en la que manejamos los campos dinámicamente y llamamos a la función insertRow para agregar una fila */

nuevaFila = document.getElementById("tablaUsuarios").insertRow (-1);

/* Asignamos a la propiedad id de nuevaFila el valor de posicionCampo, que inicializamos en 1 */

nuevaFila.id=posicionCampo;

/* Luego en otra variable llamada nuevaCelda, agregaremos una celda a la tabla, mediante la función insertCell */

nuevaCelda=nuevaFila.insertCell(-1);

/* Con la celda creada, insertamos dinámicamente un campo de texto, el cual almacenaremos en un array llamado nombre, con una posición equivalente a la variable posicionCampo. Una vez terminado, repetimos la acción para el sitio Web y correo, asignando al array respectivo */

nuevaCelda.innerHTML="<input type='text' class='idtaller' size='7′ name='h ["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='insumo' size='30′ name=' p["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='cantidad' size='3′ name='q ["+posicionCampo+"]' >";

/* Finalmente añadimos una última celda para las acciones y ahí agregamos un botón llamado Eliminar, el cual al ser presionado (definiendo la propiedad onClick), llamará a una función eliminarUsuario, pasando como parámetro la fila correspondiente */

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='button' class='eliminar' value='Eliminar' onclick='eliminarUsuario(this)'>";

/* Incrementamos el valor de posicionCampo para que empiece a contar de la fila siguiente */

posicionCampo++;

}

/* Definimos la función eliminarUsuario, la cual se encargará de quitar la fila completa del formulario. No es necesario hacer modificaciones sobre este código */

function eliminarUsuario(obj){

var oTr = obj;

while(oTr.nodeName.toLowerCase()!='tr'){

oTr=oTr.parentNode;

}

var root = oTr.parentNode;

root.removeChild(oTr);

};

al tratar de recorrerlo con el php que me diste, me sale que undefined index en los foreach. me podrian ayudar por favor :(
  #5 (permalink)  
Antiguo 30/07/2011, 10:13
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: insertar datos de array en mysql

creo que el problema es que con ese codigo javascript no me esta tomando el submit los campos dinamicos, y es como que enviara el formulario vacio :S, alguna ayudita con el problema plz :(
  #6 (permalink)  
Antiguo 30/07/2011, 13:03
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: insertar datos de array en mysql

el foreach tiene algo innesesario la variable $key:

foreach($_POST['p'] as $key=>$value)
$p[$key]= $value;

si no lo vas a gregar al foreach no tienes por que ponerlo

foreach($_POST['p'] as $value)
$p[]= $value;



y si ese insert into con tantos foreach creo que existe una forma mas facil y es usar insert into IN (".implode(',',$_POST['envio']).") y asi no habres tantos querys menos pesado para mysql
  #7 (permalink)  
Antiguo 30/07/2011, 16:26
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: insertar datos de array en mysql

no si eso ya lo hice, corregí el código y anda bien, ahora tengo otro problema y es este:

tengo mi código javascript que me genera campos dinamicos, es este:



var posicionCampo=1;

/* Declaramos la función agregarUsuario( ) */

function agregarUsuario(){

nuevaFila = document.getElementById("tablaUsuarios").insertRow (-1);

nuevaFila.id=posicionCampo;

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='idtaller' size='7′ name='h ["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='insumo' size='30′ name=' p["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='cantidad' size='3′ name='q ["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='button' class='eliminar' value='Eliminar' onclick='eliminarUsuario(this)'>";

/* Incrementamos el valor de posicionCampo para que empiece a contar de la fila siguiente */

posicionCampo++;

}


function eliminarUsuario(obj){

var oTr = obj;

while(oTr.nodeName.toLowerCase()!='tr'){

oTr=oTr.parentNode;

}

var root = oTr.parentNode;

root.removeChild(oTr);

};

este me genera tres campos de textos con el array nombre[+"posicioncampo+] y los inserta en el siguiente formulario:

Código HTML:
<fieldset align="center" class="cuadro">
<legend align="center"class="leyenda">Ingreso de insumos a la planificación</legend>
<p>&nbsp;</p>
<form method="post" action="progra.php">
<br>
<table width="580" class="tr" id="tablaUsuarios">
  
  <tr>
<td width="90" align="center">ID del taller</td>
<td width="265" align="center">Insumo</td>
<td width="98"align="center">Cantidad</td>
<td width="107" align="center">
<input type="button" size="8" onClick="agregarUsuario()"value="Agregar insumo"  >
</td>
</tr>
</table>
<p><input type="submit" value="Ingresar"></p>
</form> 
el problema es que el formulario no envía ningún dato, al hacerle una comprobación con un print_r($_POST) me arroja array()
  #8 (permalink)  
Antiguo 31/07/2011, 11:46
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: insertar datos de array en mysql

me temo que tienes que ir al foro javascript es posible que no este funcionando el envio name=''

por otro lado prueba echo $_POST['name'][0]; <- aver si te da si no ese name no esta llegando simplemente.
  #9 (permalink)  
Antiguo 31/07/2011, 13:05
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: insertar datos de array en mysql

Hola pabloccontreras, he visto el código que pusiste:

Cita:
var posicionCampo=1;

/* Declaramos la función agregarUsuario( ) */

function agregarUsuario(){

nuevaFila = document.getElementById("tablaUsuarios").insertRow (-1);

nuevaFila.id=posicionCampo;

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='idtaller' size='7′ name='h ["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='insumo' size='30′ name=' p["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='text' class='cantidad' size='3′ name='q ["+posicionCampo+"]' >";

nuevaCelda=nuevaFila.insertCell(-1);

nuevaCelda.innerHTML="<input type='button' class='eliminar' value='Eliminar' onclick='eliminarUsuario(this)'>";

/* Incrementamos el valor de posicionCampo para que empiece a contar de la fila siguiente */

posicionCampo++;

}


function eliminarUsuario(obj){

var oTr = obj;

while(oTr.nodeName.toLowerCase()!='tr'){

oTr=oTr.parentNode;

}

var root = oTr.parentNode;

root.removeChild(oTr);

};
El problema radica en los espacios en blanco que has dejado al declarar los valores del atributo name de los campos de texto, recuerda que estos espacios tambien cuentan; corrigiendo esto el código PHP funciona correctamente.
Cita:
nuevaCelda.innerHTML="<input type='text' class='idtaller' size='7′ name='h ["+posicionCampo+"]' >"
nuevaCelda.innerHTML="<input type='text' class='insumo' size='30′ name=' p["+posicionCampo+"]' >";
nuevaCelda.innerHTML="<input type='text' class='cantidad' size='3′ name='q ["+posicionCampo+"]' >";

Etiquetas: html, mysql, sql
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 09:12.