Foros del Web » Programando para Internet » PHP »

Recoger 100 variables en array e insertar en BDD

Estas en el tema de Recoger 100 variables en array e insertar en BDD en el foro de PHP en Foros del Web. Buenas. Nunca he trabajado con mas de 10 variables o cosa asi, asi que es la primera vez que me encuentro con este problema. Os ...
  #1 (permalink)  
Antiguo 23/04/2014, 09:26
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Recoger 100 variables en array e insertar en BDD

Buenas.
Nunca he trabajado con mas de 10 variables o cosa asi, asi que es la primera vez que me encuentro con este problema.
Os cuento:
Tengo un formulario donde los usuarios deben insertar una letra (a,b,c o d) en 100 casillas
1º A-B-C-D
2º A-B-C-D
...
100º A-B-C-D
Enviar action="guardar.php"

Por otro lado la BDD:
-ID
-Usuario
-Nº
-Letra

Mi gran problema es que no se como recoger 100 variables en guardar.php y ni mucho menos tengo idea de la sentencia para insertar ese array en la BDD.

He estado leyendo manuales acerca de la funcion array y trabajar con matrices (valga la redundancia) pero no lo pillo muy bien.

A ver si pudierais iluminarme el camino con algun ejemplo.
Gracias!!
  #2 (permalink)  
Antiguo 23/04/2014, 10:15
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Recoger 100 variables en array e insertar en BDD

hola tu problema se resuelve con un envió de la variable post , pero en array.
supongo que es un test lo que estas realizando. en tus input a enviar establece el nombre de la variable post pero con []

<input type="text" name="respuesta[]" />

y la puedes recorrer con un foreach

Código PHP:
Ver original
  1. $resp=$_POST['repuesta'];
  2. foreach($resp as $r){
  3.  // aquí creas tu consulta sql
  4. }


espero haber resuelto tu duda
http://www.webtaller.com/construccion/lenguajes/php/lecciones/array-formulario-php.php
http://www.php.net/manual/es/control-structures.foreach.php
  #3 (permalink)  
Antiguo 23/04/2014, 10:33
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Respuesta: Recoger 100 variables en array e insertar en BDD

Ah, vale. Lo estaba enfocando mal.
Un detalle tonto, el nombre del input igual para los 100? Respuesta[]?
  #4 (permalink)  
Antiguo 23/04/2014, 10:44
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Recoger 100 variables en array e insertar en BDD

si , al establecer el mismo nombre Respuesta[] a todos los input la variable POST solo recibe una variable pero tipo array
  #5 (permalink)  
Antiguo 23/04/2014, 10:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recoger 100 variables en array e insertar en BDD

Antes de ayudarte, dime, ¿Qué valor vas a guardar en los campos Usuario y Nº y de dónde los vas a obtener?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 23/04/2014, 11:41
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 10 años, 10 meses
Puntos: 32
Respuesta: Recoger 100 variables en array e insertar en BDD

no seria mejor simplemente guardar todos los datos en un solo campo separado por "," ? asi al momento de llamarlo solo harias un explode por esa "," y listo, tendrias el array...
llenar una tabla con 100 datos que seran muy repetitibos lo veo innecesario, deseguro esa columna N° solo almacenaria del 1 al 100 no?
  #7 (permalink)  
Antiguo 23/04/2014, 11:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recoger 100 variables en array e insertar en BDD

Cita:
Iniciado por andresgarciadev Ver Mensaje
solo harias un explode por esa "," y listo, tendrias el array...
Técnicamente, $_POST es un array, en tal caso, le aplicaría la función implode para crear un conjunto de datos unidos por comas, los encierra entre paréntesis, lo concatenamos a la sentencia SQL y ¡voilá!, ya tenemos lista la sentencia para realizar la inserción.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 23/04/2014, 14:48
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 10 años, 10 meses
Puntos: 32
Respuesta: Recoger 100 variables en array e insertar en BDD

no, dije explode por que me referia a la cadena ya guardada en BD como separarla
omiti lo del implode al post pero ahora que lo pienso mejor debi espicificarlo ya que migue dice ser nuevo en esto....
  #9 (permalink)  
Antiguo 23/04/2014, 15:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recoger 100 variables en array e insertar en BDD

Me parece que nuestro amigo migue_coco quiere guardar en la BD 100 datos ingresados en un formulario. Es por eso que, en ese caso, le convendría simplemente concatenar a los valores de $_POST que es un array que contiene a todos los datos ingresados, agrupar esta unión con paréntesis y añadirla a la sentencia SQL.

Como también es necesaria la seguridad, es conveniente desinfectar la información.

Código PHP:
Ver original
  1. $conexion = mysqli_connect("servidor", "usuario", "contraseña", "base de datos");
  2.  
  3. function desinfectar ($dato){
  4.     global $conexion;
  5.     return strip_tags(mysqli_real_escape_string($conexion, $dato));
  6. }
  7.  
  8. $_POST = array_map("desinfectar", $_POST);
  9. $datos = "('" . implode("', '", $_POST) . "')";

Por ejemplo, si los datos fueran A, C, J, M y Z, la variable $datos quedaría así:

Código HTML:
Ver original
  1. ('A', 'C', 'J', 'M', 'Z')

Y solamente haría falta concaternala a la sentencia SQL:

Código PHP:
Ver original
  1. $query = mysqli_query($conexion, "INSERT INTO tabla (campo) VALUES $datos");

Claro, esto solamente sería válido si fuera a ingresar todos los datos en un solo campo, lo cual me parece lo más conveniente, pero todo depende de lo que nuestro amigo migue_coco decida hacer.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 28/04/2014, 05:49
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Respuesta: Recoger 100 variables en array e insertar en BDD

Buenas.
Perdonad la ausencia, he estado fuera el fin de semana.

Gracias por vuestras respuestas.
Cada campo del formulario (100 en total) seria un registro en la BDD.
Es decir, cada usuario que rellene el formulario, generaria 100 entradas a la BDD
Ya que despues necesito poder recuperar cada dato por separado para crear una estadistica que es el fin del codigo.

Asi que no consigo verlo del todo.
Entiendo lo que me contais, pero no lo acabo de entender (probablemente me estoy liando yo solo).
Me da la sensacion de que tal y como me lo estais exponiendo, se guardarian los 100 datos en un solo campo de la BDD.
Como seria para que cada dato se guardara en una fila nueva?
Es decir:

Index.html:
Código HTML:
<form method="post" action="enviar.php" name="formulario">

  Pregunta nº1:
    <input type="radio" name="Respuesta[]" value="A"/>
    <input type="radio" name="Respuesta[]" value="B"/>
    <input type="radio" name="Respuesta[]" value="C"/>
    <input type="radio" name="Respuesta[]" value="D"/>

  Pregunta nº2:
    <input type="radio" name="Respuesta[]" value="A"/>
    <input type="radio" name="Respuesta[]" value="B"/>
    <input type="radio" name="Respuesta[]" value="C"/>
    <input type="radio" name="Respuesta[]" value="D"/>
...

  Pregunta nº100:
    <input type="radio" name="Respuesta[]" value="A"/>
    <input type="radio" name="Respuesta[]" value="B"/>
    <input type="radio" name="Respuesta[]" value="C"/>
    <input type="radio" name="Respuesta[]" value="D"/>

  <input type="submit".../>
</form> 

enviar.php
Código PHP:
//Datos de conexion y demas variables
//...
$usuario $_COOKIE['usuario'];
$resp=$_POST['Respuesta'];
    foreach(
$resp as $r){
    
$sql="INSERT INTO Respuestas (Respuesta, Usuario) VALUES ('$r', '$usuario')";
//Y continua el resto del codigo     
    

Y en la tabla yo tendria que verlo asi:

ID Pregunta Respuesta Usuario
_____________________________
1 1 A user
2 2 C user
...
100 3 D user


Pero tengo la sensacion de que lo que me decis no hace esto exactamente...
Estoy equivocado?
Porque claro, no veo que tenga en cuenta crear 100 registros nuevos, ni veo la forma de relacionar cada respuesta con el numero de pregunta.

Gracias por la ayuda y perdonad que este tan espeso.
  #11 (permalink)  
Antiguo 28/04/2014, 12:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recoger 100 variables en array e insertar en BDD

Para empezar, creo que cada bloque de radio buttons debe de tener un nombre distinto, porque así como está, solamente podrás elegir una respuesta para todas las preguntas. Solucionado esto, crea la cadena de valores que insertarás en la BD.

Código PHP:
Ver original
  1. $datos = ''; //Aquí se almacenará el grupo de datos a insertar
  2.  
  3. foreach ($_POST as $clave => $valor)
  4.     if (substr($clave, 0, 9) == 'Respuesta')
  5.         $datos .= strlen($datos) ? ", ('" . $_POST[$clave][0] . "')" : "('" . $_POST[$clave][0] . "')";
  6.  
  7. $query = mysql_query("INSERT INTO tabla (campo) VALUES $datos");

De este modo, se crea una sentencia con una forma similar a esta:

Código MySQL:
Ver original
  1. INSERT INTO tabla (campo) VALUES ('valor1'), ('valor2'), ('valor3')

Y así podrás ingresar los 100 valores en la tabla de la BD.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 29/04/2014, 10:02
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Recoger 100 variables en array e insertar en BDD

me parece que la solución no pasa por procesar los datos POST como si todos los datos conformaran una gran cadena string para luego separar cada dato por una coma, o eso he entendido.

todo comienza en el diseño de la BD:

-a preguntas y respuestas genéricas tablas genéricas. además de la tabla de users, haría falta una cuarta tabla donde poder relacionar las otras tres tablas, de manera que una pregunta tiene una respuesta de un usuario. evidentemente deben permitir NULL en respuesta si el programador quiere que el usuario tenga la opción de no responder.

después todo sigue en el POST.

las variables GET y POST son arrays, así como la variable SESSION.

cada campo debe tener un nombre, por lo tanto cada nombre irá conformando un array asociativo.

Una vez la variable POST es identificada como que existe con el nombre del botón input type submit solo hay que procesar el POST de manera que se limpia con mysqli o PDO para evitar SQL injection (se pueden implementar además otros medios de seguridad) y se procede a insertar los valores en la BD con un solo insert into a la tabla que une users, answers y questions pero con múltiples inserciones en varias filas (ctrl+f y buscar insert multiple rows).

es la manera más fácil y óptima que se me ocurre.
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: formulario, recoger, usuarios, variable, variables
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 17:47.