Foros del Web » Programando para Internet » PHP »

bucle para hacer un insert sin poner todos los campos

Estas en el tema de bucle para hacer un insert sin poner todos los campos en el foro de PHP en Foros del Web. Hola, estoy intenando guardar los datos tras rellenar una tabla, pero son muchos campos, concretamente 18 veces 6 campos...108 campos donde insertar los datos guardados... ...
  #1 (permalink)  
Antiguo 30/05/2008, 04:16
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
bucle para hacer un insert sin poner todos los campos

Hola, estoy intenando guardar los datos tras rellenar una tabla, pero son muchos campos, concretamente 18 veces 6 campos...108 campos donde insertar los datos guardados...

Consigo acceder a todos ellos a traves de un bucle for, pero no se como hacer la consulta para concatenarle al campo la variable de control....

Código PHP:
for($j $j<=18 count($_POST['fairway_']), $j++){

     echo 
"fairway: ".$_POST['fairway_'.$j]."</br>";
    
$sql mysql_query("INSERT INTO tarjetas (callesid.[$j]) VALUES ('$_POST[\'fairway_\'.$j]')",$conexion)or die("Error al guardar los datos\n");


Esto sería para uno de los campos, y como os digo, no se como concatenar $j, con callesid para que por cada iteracion vaya accediendo a un campo distinto...callesid1, callesid2, callesid3....hasta callesid18...
  #2 (permalink)  
Antiguo 30/05/2008, 04:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: bucle para hacer un insert sin poner todos los campos

La query es una cadena, se concatena como una cadena.

Código PHP:
$sql mysql_query("INSERT INTO tarjetas (callesid".$j."),,etc"); 
Ahora... primero, ¿para qué es el count($_POST['fairway_']),? , no tiene sentido.
segundo, ¿estas seguro de querer hacer eso?. Lo que haces es crear una nueva fila con un único campo con información. Tendrás la información en escalera:

Código:
       | Campo1 | Campo2 | ...
-------+-------------+--------------+-------
fila1  | dato1  |        |
fila2  |        |  dato2 | 
...
... al menos es "sospechoso".
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 30/05/2008, 04:40
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Si, no hace falta, es que he estado probando para acceder a todos los datos del $_POST, y he variado un bucle que venia en una web para utilizarlo yo...y está claro que lo he hice mal...jejejej...Sigue dandome problemas al acceder ahora a la variable $_POS['fairway_'$j]...te paso como lo pongo....

Código PHP:

for($j $j<=18 $j++){

    echo 
"fairway: ".$_POST['fairway_'.$j]."</br>"
    
$sql mysql_query("INSERT INTO tarjetas (callesid".$j.") VALUES ('$_POST[\'fairway_\'.$j]')",$conexion)or die("Error al guardar los datos\n"); 

    } 
La verdad es que tengo problemas a la hora de concatenar datos...me cuesta...jejeje

Sobre si estoy seguro si es lo que quiero hacer....es que lo vaya metiendo en la misma fila...ya que la tabla es así....
Código:
          callesid1......  callesid2.....  callesid3........ callesid18
fila1    dato1             dato2            dato3  ......... dato18

Última edición por manguiti; 30/05/2008 a las 04:45
  #4 (permalink)  
Antiguo 30/05/2008, 08:05
 
Fecha de Ingreso: marzo-2008
Ubicación: Guayana, Venezuela
Mensajes: 23
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: bucle para hacer un insert sin poner todos los campos

Que tal, yo tenia ese mismo problema para intentar guardar calificaciones, debia utilizar la variable control para ingresar la nota1 al estudiante1, en el formulario le daba los nombres de esta manera:

Código PHP:
<input name='" . "nota_" . $nro ."' type='text'>
<
input name='" . "estudiante_" . $nro ."' type='text'
y para recogerla hacia lo mismo:

Código PHP:
$nota=$_POST['nota_' $i];
$id=$_POST['estudiante_' $i]; 
y luego:

Código PHP:
INSERT INTO NOTAS(ID,NOTAVALUES('$id','$nota'
todo eso dentro de un bucle for hasta el numero de estudiantes.

En tu caso debes hacerlo de la misma manera, concatena las cadenas como te lo dijo jam1138 y vas a solucionarlo.

Mucha suerte.
  #5 (permalink)  
Antiguo 30/05/2008, 10:13
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Sí, más o menos sabía como cargar el formulario dinamicamente, y luego recoger los datos, el problema venía que al hacer la consulta....tengo que insertar 108 campos del tipo....callesid1, callesid2...hasta callesid18...y con esto en otras 6 variables más...y me fallaba a la hora de meter en la consulta el $_POST['fairway_'.$i]...pero guardandolo antes en una variable $fairway me ahorro el problema, aunque aun así, me gustaría que alguien pudiera decirme como meterlo en la consulta directamente, más que nada para saberlo....


Gracias!!

Última edición por manguiti; 30/05/2008 a las 10:19
  #6 (permalink)  
Antiguo 30/05/2008, 13:16
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: bucle para hacer un insert sin poner todos los campos

Cita:
Iniciado por manguiti Ver Mensaje
Sigue dandome problemas al acceder ahora a la variable $_POS['fairway_'$j]...te paso como lo pongo....
¿Pero es que te da un mensaje de error o qué?. ¿No imprime el valor que debería?.
... veo que es en la concatenación del query. Repito: es una cadena, se concatena como una cadena:
Código PHP:
$sql "INSERT INTO tarjetas (callesid".$j.") VALUES ('".$_POST['fairway_'.$j]."')"
En todo caso podrías hacer una asignación previa y te evitas de lios con la concatenación:
Código PHP:
$algo $_POST['algo'.$otro_algo];
// y utilizas $algo sin problemas 
Ahora, la concatenación es de primera lección de PHP... ojo. Por otra parte si usas ese tipo de variables con sufijos es porque seguramente no conoces los arreglos o no sabes cómo utilizarlos: www.php.net/book.array
Creo hacerlo con array se te haría más simple.

Por último, cada que haces un INSERT crea una nueva fila (eso es SQL, lenguaje aparte); como lo estás haciendo, crearás información escalonada como te lo mostré anteriormente.
La forma correcta es pasar todos los datos a insertar en un solo INSERT, como por ejemplo:
Código:
INSERT INTO tabla (campo1, campo2, campo3) VALUES ('valor1', 'valor2', 'valor3');
Entonces... lo haces mal. Lo que tendrías que hacer dentro del blucle es concatenar las partes que están entre paréntesis para utilizarlas fuera del blucle (una vez armadas) en una sola query... si usaras arreglos la función implode() te interesaría.

Tienes mucho, mucho trabajo. Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 02/06/2008, 11:02
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Bueno, despues de una horita repasando lo que me dijisteis, e investigando, consigo "creo", armar bien la consulta, pero me da error, a ver si veis algun fallo...

Con el bucle, creo una cadena que contenga todos los campos donde se van a guardar los valores, y otra con estos valores....

Código PHP:

for($j $j<=$j++){
    
    
$destinos .= ","."golpes".$j.","."puts".$j.","."callesid".$j.","."girid".$j.","."ssid".$j.","."ud".$j;
    
    
$valores .= ",'".$_POST['score_'.$j]."','".$_POST['putts_'.$j]."','".$_POST['fairway_'.$j]."','".$_POST['gir_'.$j]."','".$_POST['sandsave_'.$j]."','".$_POST['updown_'.$j]."'"

Ahora solo me queda armar la consulta, de esta manera, lo he hecho con los 2 primeros hoyos para que no se vea tanto codigo....

Código PHP:

$sql 
mysql_query("INSERT INTO tarjetas (teesid,recorrido,competicion".$destinos.") VALUES ('".$_GET['tee']."','".$_POST['nombre_partida']."','".$_POST['competicion']."'".$valores.")",$conexion) or die("Error al guardar los datos\n"); 
cuyo resultado imprimo antes, para ver cual es la cadena resultante:

Código:
INSERT INTO tarjetas (teesid,recorrido,competicion,golpes1,puts1,callesid1,girid1,ssid1,ud1,golpes2,puts2,callesid2,girid2,ssid2,ud2) VALUES ('3','sade','No','3','1','Si','Si','Si','Si','3','2','Si','Si','Si','Si')
pero me da el error, Error al guardar los datos, veis algun error??

Gracias!

Última edición por jam1138; 02/06/2008 a las 12:39 Razón: Probando etiquetas de código
  #8 (permalink)  
Antiguo 02/06/2008, 11:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bucle para hacer un insert sin poner todos los campos

recuerda que los tipos INT deben ser sin comillas.... ojo con esto, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 02/06/2008, 11:28
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Ok, gracias, ya lo quité, pero sigue dandome error, esta es la cadena de la consulta,


Código PHP:

$cadena 
"INSERT INTO tarjetas (teesid,recorrido,competicion".$destinos.") VALUES (".$_GET['tee'].",'".$_POST['nombre_partida']."','".$_POST['competicion']."'".$valores.")";
echo 
"consulta: ".$cadena
Código:
INSERT INTO tarjetas (teesid,recorrido,competicion,golpes1,puts1,callesid1,girid1,ssid1,ud1,golpes2,puts2,callesid2,girid2,ssid2,ud2) VALUES (3,'asdfesf','No',3,1,'Si','Si','Si','Si',4,2,'Si','Si','Si','Si')
  #10 (permalink)  
Antiguo 02/06/2008, 11:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bucle para hacer un insert sin poner todos los campos

que error te sale.... que dice???

puedes usar... mysql_error()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 02/06/2008, 11:39
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Código:
Unknown column 'girid2' in 'field list'
Vaya tela, me pasaron la tabla, y estaba mal escrita...deberia haberme fijado bien en todos los campos uno por uno...

Muchas gracias!!
  #12 (permalink)  
Antiguo 02/06/2008, 19:37
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: bucle para hacer un insert sin poner todos los campos

¿Entiendo que lo solucionaste?
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #13 (permalink)  
Antiguo 03/06/2008, 05:14
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: bucle para hacer un insert sin poner todos los campos

Si si, ya esta solucionado, gracias a todos.
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 08:14.