Foros del Web » Programando para Internet » PHP »

Variable de sesión con array de valores de formulario

Estas en el tema de Variable de sesión con array de valores de formulario en el foro de PHP en Foros del Web. Hola a todos, Tengo una página PHP que recoge datos desde un formulario y los guarda en una variable de sesión (por POST) de otra ...
  #1 (permalink)  
Antiguo 09/01/2017, 09:21
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 9 años, 4 meses
Puntos: 2
Pregunta Variable de sesión con array de valores de formulario

Hola a todos,
Tengo una página PHP que recoge datos desde un formulario y los guarda en una variable de sesión (por POST) de otra página cuando pulso el botón "enviar" el mismo. Todo me funciona, pero ahora necesito unas modificaciones que me traen loco.

El formulario tiene 60 campos tipo "radiobutton" con una escala de 1 a 10 (además de una opción "N/A" de no aplica). Tengo que obligarles a que rellenen todos los campos, por lo que he asignado el valor 0 a la opción "N/A", pero claro, a la hora de meterlo en la BD no me interesan los campos con ese valor.

Ahora mismo envío por post a una página y guardo los datos POST en una variable de sesión tal que así:

Código PHP:
Ver original
  1. <?php
  2. session_start(); //iniciamos el manejo de sesiones
  3. $_SESSION['post_pagina_1'] = $_POST;
  4. ?>

El resultado sería este haciendo un print_r:
Código HTML:
Ver original
  1. Array ( [nombre] => pepito[apellido] => piscinas[1] => 1 [2] => 1 [3] => 1 [4] => 0 [5] => 0 [6] => 1, etc... )

Necesito antes de enviar los datos a la BD depurar todos los campos que tengan valor =0, que son los que el usuario ha seleccionado como "No Aplica". ¿Es posible?

Lo que me gustaría es obtener un resultado con sólo los campos que no tengan valor cero tal que así:
Código HTML:
Ver original
  1. Array ( [nombre] => pepito[apellido] => piscinas[1] => 1 [2] => 1 [3] => 1 [6] => 1, etc... )

He buscado info pero sólo encuentro eliminar elementos por posición, por referencia, etc.

Gracias!
  #2 (permalink)  
Antiguo 09/01/2017, 09:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 197
Antigüedad: 7 años, 5 meses
Puntos: 15
Respuesta: Variable de sesión con array de valores de formulario

no le veo lo complicado, simplemente en el ciclo en donde los recorres para guardar en base de datos, compara si el valor es diferente de cero.
  #3 (permalink)  
Antiguo 09/01/2017, 10:17
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: Variable de sesión con array de valores de formulario

Buena idea, a ver cómo lo puedo hacer. Genero el SQL así:

Código PHP:
Ver original
  1. // paso los valores de post a una variable
  2. $array = $_POST;
  3.  
  4. // creamos la primera parte del sql
  5.   $sql = "INSERT INTO datos_cuestionario (idcuestionario,pregunta,respuesta) VALUES ";
  6.  
  7.   // iterando y comprobando que haya valores
  8.   $it = new ArrayIterator( $array );
  9.   $cit = new CachingIterator( $it );
  10.  
  11.   // loop en el array
  12.   foreach ( $cit as $value )
  13.   {
  14.         // añadimos a la query
  15.         $sql .= "('{$_SESSION['idCuestionario']}','".$cit->key()."','" .$cit->current()."')";
  16.         // si hay otro elemento en el array metemos coma
  17.         if( $cit->hasNext() )
  18.         {
  19.             $sql .= ",";
  20.         }
  21.     }

Es sólo la parte de las respuestas, aunque hay más, creo que no es relevante. ¿Dónde podría hacer la comprobación?

Gracias!

Última edición por majete; 09/01/2017 a las 10:19 Razón: faltaba código
  #4 (permalink)  
Antiguo 09/01/2017, 13:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 197
Antigüedad: 7 años, 5 meses
Puntos: 15
Respuesta: Variable de sesión con array de valores de formulario

en el ciclo, ya te lo dije
  #5 (permalink)  
Antiguo 10/01/2017, 11:24
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: Variable de sesión con array de valores de formulario

uau!! me ha sido super útil tu respuesta!! superdetallada con muchísima información de valor!! fantástica!! extraordinaria!! sublime!! muuuuuuuuuuuchas graciaaaaass...
  #6 (permalink)  
Antiguo 10/01/2017, 11:35
Avatar de rbczgz  
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.088
Antigüedad: 13 años, 4 meses
Puntos: 127
Respuesta: Variable de sesión con array de valores de formulario

Hola majete,

La ironía tampoco te va a ayudar, lo que te dice sustentio, es que las comparaciones las debes hacer aquí:

Código PHP:
Ver original
  1. // paso los valores de post a una variable
  2. $array = $_POST;
  3.  
  4. // creamos la primera parte del sql
  5.   $sql = "INSERT INTO datos_cuestionario (idcuestionario,pregunta,respuesta) VALUES ";
  6.  
  7.   // iterando y comprobando que haya valores
  8.   $it = new ArrayIterator( $array );
  9.   $cit = new CachingIterator( $it );
  10.  
  11.   // loop en el array
  12.   foreach ( $cit as $value )
  13.   {
  14.         // ######################################################
  15.         // Aquí harías las comparaciones, pero como tampoco muestras qué es lo que necesitas comparar, tendrás que armar tú mismo el código, que por otra parte, es lo mejor.
  16.         // ######################################################
  17.         // añadimos a la query
  18.         $sql .= "('{$_SESSION['idCuestionario']}','".$cit->key()."','" .$cit->current()."')";
  19.         // si hay otro elemento en el array metemos coma
  20.         if( $cit->hasNext() )
  21.         {
  22.             $sql .= ",";
  23.         }
  24.     }

Espero que te sirva, tampoco muestras todo el código necesario para aclararte más, pero de todas formas, como te planteo arriba, es mejor que aquí recibas la idea y seas tú el que la desarrolle, luego, cuándo lo resuelves, lo compartes con el resto de usuarios por si alguien tiene tu mismo problema, que lo pueda resolver con tu ayuda.
  #7 (permalink)  
Antiguo 11/01/2017, 02:57
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: Variable de sesión con array de valores de formulario

Gracias Rubén,
Era un poco coña el mensaje... más que nada porque si pido ayuda en el foro es porque ya lo he intentado y no doy con ello, y la verdad mensajes de "cámbialo donde debes", "modifica en el lugar correcto", etc. no ayudan mucho.

La info la tengo en un array "$array" como comentaba en el primer mensaje. El contenido sería este (clave->valor):
Código PHP:
Ver original
  1. $array = ([1] => 1 [2] => 1 [3] => 1 [4] => 0 [5] => 0 [6] => 1, etc...)

La comprobación la tengo que hacer sobre el valor, no sobre la clave. Todos los que sean 0 que no los guarde en el sql. Algo así:

Código PHP:
Ver original
  1. if( $cit->current()!=0 )
  2.         {
  3.             //añado a la query
  4.         }

Ahora que me has indicado dónde debo hacer la comprobación voy a probar con este comando.

GRACIAS!!
JC
  #8 (permalink)  
Antiguo 11/01/2017, 05:34
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: Variable de sesión con array de valores de formulario

Vale, el bucle me funciona y hace la validación bien... ahora tengo que arreglar el tema de la coma, que en los casos en los que hay un valor cero y no es el último valor del array.

Código PHP:
Ver original
  1. // loop en el array
  2.   foreach ( $cit as $value )
  3.   {
  4.         if( $cit->current()!=0 )
  5.         {
  6.             //añado a la query
  7.             $sql .= "('{$_SESSION['idCuestionario']}','".$cit->key()."','" .$cit->current()."')";
  8.  
  9.             // si hay otro elemento en el array metemos coma
  10.             if( $cit->hasNext() )
  11.             {
  12.                 $sql .= ",";
  13.             }
  14.         }      
  15.  
  16.     }

Peta en el caso en que por ejemplo, se encuentra con los valores 3, 2, 0, 0. Funciona bien en el 3, en el 2, pero en el 0, como detecta que hay otro valor le mete la coma, pero como ese valor es cero y luego no lo añade al SQL se fastidia.



La zona horaria es GMT -6. Ahora son las 11:06.