Foros del Web » Programando para Internet » PHP »

Paras array (arreglos) via POST

Estas en el tema de Paras array (arreglos) via POST en el foro de PHP en Foros del Web. Hola. Estoy encallado en cómo pasar una array (arreglo) desde un formulario con 'inputs' ocultos a otra pagina de php. En la primera pagina tengo ...
  #1 (permalink)  
Antiguo 24/01/2012, 10:33
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta Paras array (arreglos) via POST

Hola.

Estoy encallado en cómo pasar una array (arreglo) desde un formulario con 'inputs' ocultos a otra pagina de php.

En la primera pagina tengo lo siguiente:

Código PHP:
foreach ($categoria as $valor) {
                        echo 
'<input type="hidden" name="misvalores" value="'.$valor.'">';
                  } 
Para estar seguro que la variable '$valor' contiene la información requerida, ejecuto un echo $valor.'<br>'; en la primera página y se imprime lo siguiente:

Cita:
1500
1500
4000
4000
1000
3000
Lo cual me indica que la variable recoge la lista del arreglo sin ningun problema.

Sin embargo, en la siguiente página, donde tengo el código que recibe esa array, tengolo siguiente:

Código PHP:
$array = array($_POST['misvalores']);
    
    foreach (
$array as $valores) {
        echo 
$valores.'<br>';
    } 
... Y solo me imprime el último registro enviado (en mi caso el 3000).

Sabéis dónde la estoy liando?

Gracias por vuestra ayuda
__________________
Andrew :P
  #2 (permalink)  
Antiguo 24/01/2012, 10:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Paras array (arreglos) via POST

1. El name del input debe tener notación de array, ej. misvalores[]
2. Al recibir ya es un array, no debes encerrarlos en array(...)
3. Consulta el manual.
http://www.php.net/variables.external
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/01/2012, 10:41
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Paras array (arreglos) via POST

Hola, para crear un "input array" es necesario que el nombre contenga corchetes [ ], en tu caso deberías modificar en tu foreach el name del input , quedaría de la siguiente manera:


Código PHP:
Ver original
  1. echo '<input type="hidden" name="misvalores[]" value="'.$valor.'">';

posteariormente para recibirlo y obtenerlo :

Código PHP:
Ver original
  1. $array = $_POST['misvalores'];
  2.      
  3.     foreach ($array as $valores)
  4.  {
  5.         echo $valores.'<br>';
  6.     }



Saludos



Pd: me demore mucho en escribir
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #4 (permalink)  
Antiguo 24/01/2012, 10:59
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Paras array (arreglos) via POST

Gracias por vuestras respuestas... Sin embargo, siguiendo vuestras sugerencias se genera el siguiente error:

warning: Invalid argument supplied for foreach()

!????....
__________________
Andrew :P
  #5 (permalink)  
Antiguo 24/01/2012, 11:01
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Paras array (arreglos) via POST

Realiza un var_dump() despues de recibir tu array y verifica los datos que estan llegando:

Código PHP:
Ver original
  1. $array = $_POST['misvalores'];
  2. var_dump($array);

saludos
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #6 (permalink)  
Antiguo 24/01/2012, 11:05
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Paras array (arreglos) via POST

soLO ESTO: string(5) "Array"
__________________
Andrew :P
  #7 (permalink)  
Antiguo 24/01/2012, 11:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Paras array (arreglos) via POST

Cita:
Iniciado por andrewp Ver Mensaje
Gracias por vuestras respuestas... Sin embargo, siguiendo vuestras sugerencias se genera el siguiente error:

warning: Invalid argument supplied for foreach()

!????....
¿Y supongo que te sale el error antes de envíar el formulario o después?

Cita:
Iniciado por andrewp Ver Mensaje
soLO ESTO: string(5) "Array"
Ediventemente algo haces mal. ¿Puedes mostrar tu código completo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 24/01/2012, 11:20
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Paras array (arreglos) via POST

No, el error sale en la página que recibe el 'POST'. Tal y como lo comente en la primera parte, el var_dump que ejecuto sale bien, la lista de valores se imprime sin problemas. Al enviarla a la segunda página via POST, recibo solo el último valor. Y si ejecuto un var_dump, sale solo esto: string(5) "Array".

Lo único que tengo de más en la primera página es la extracción de la base de datos de los valores que se convierten en un array que ya expliqué al inicio. El resto ya lo puedesq ver aqui publicado:

Primera página:
Código PHP:
foreach ($categoria as $valor) {
                        echo 
'<input type="hidden" name="misvalores[B][][/B]" value="'.$valor.'">';
                  }  

// Despues cierro el formulario y estas cosas con el boton para 'submit' 
Y en la segunda página:
Código PHP:
$array $_POST['misvalores'];
    
    foreach (
$array as $valores) {
        echo 
$valores.'<br>';
    } 
// imprime el último 
__________________
Andrew :P
  #9 (permalink)  
Antiguo 24/01/2012, 11:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Paras array (arreglos) via POST

Sería interesante si nos muestras el HTML que se genera con los valores que dices, puede que ahí este el problema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 24/01/2012, 11:35
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Busqueda Respuesta: Paras array (arreglos) via POST

Te resumo lo que no es relevante porque además funciona:

Código PHP:
//Abro el formulario
print '<form name="formulario" method="POST" action="archivo2.php">';

//Aquí consulto la base de datos:
$consulta "SELECT * FROM categorias ORDER by categorias ASC";
$resultado mysql_query ($consulta) or die ('Error seleccionando categorias: ' mysql_error());

    while ( 
$colcat mysql_fetch_array $resultadoMYSQL_NUM ) ) {

        
$categoria = array($colcat);

                foreach (
$categoria as $valor) {
                        echo 
'<input type="hidden" name="misvalores[]" value="'.$valor.'">';
                  } 
}
// .... el resto es otros inputs ocultos que contienen nombres (name) diferentes y estan pasando sin problemas... 

print '<input type="submit" id="submit" name="submit" value="enviar" />';
print 
'</form>'
No tengo mas en la pagina1.php.
__________________
Andrew :P
  #11 (permalink)  
Antiguo 24/01/2012, 11:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Paras array (arreglos) via POST

Repito, ¿puedes mostrarnos el HTML generado?

Es importante que lo muestres porque si recibes literalmente Array es que de alguna forma lo que imprimes en el value no es un valor scalar, sino un array.

O bien, muestranos el resultado de lo siguiente:
Código PHP:
$categoria = array($colcat);
var_dump($categoria); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 24/01/2012, 11:53
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Paras array (arreglos) via POST

pateketrueke, no tengo más código que el descrito. No hay nada mas extra que el resto de inputs que los imprimo a través del 'print'. El resto del archivo esta vacío. Siento si no entiendo tu pregunta.

Para el var_dump que me pides, en la primera página me imprime lo siguiente:

Cita:
$categoria = array($colcat);
var_dump($categoria);

imprime:
array(1) { [0]=> string(4) "1500" }
array(1) { [0]=> string(4) "1500" }
array(1) { [0]=> string(4) "4000" }
array(1) { [0]=> string(4) "4000" }
array(1) { [0]=> string(4) "1000" }
array(1) { [0]=> string(4) "3000" }
__________________
Andrew :P
  #13 (permalink)  
Antiguo 24/01/2012, 12:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Paras array (arreglos) via POST

Te explico: el HTML generado es lo que ves en el navegador, lo que se produce con tu script.

Es necesario poder ver como está construido ya que ahí está el problema, no te cuesta nada, solo debes dar click derecho en tu documento y ver código fuente.

Copias y pegas el HTML del formulario y lo muestras.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 24/01/2012, 14:01
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Paras array (arreglos) via POST

Tienes razón!.... No aparece el input en el HTML

Lo intenté pegar pero es bastante largo por el resto de inputs. Más o menos lo he arreglarlo!

Sin embargo, leyendo, leyendo, he visto que la mejor y más sana manera de pasar una array entre páginas vía POST, es serializarlo o añadirle una función que sume un +1 a cada nuevo elemento.

Así, lo que he hecho es que antes del while de la consulta he añadido la variable:

Código PHP:
$i=0
Y en el input de las array, he añadido lo siguiente (echo y no print):

Código PHP:
echo '<input type="hidden" name="item_'.$i++.'" value="'.$valor.'" \>'
De esta manera puedo leer en el html las variables sin problemas:

Código HTML:
...
<input type="hidden" name="item_1" value="1500" \>
<input type="hidden" name="item_2" value="1500" \>
<input type="hidden" name="item_3" value="4000" \>
<input type="hidden" name="item_4" value="4000 \>
<input type="hidden" name="item_5" value="1000" \>
<input type="hidden" name="item_6" value="3000" \>
...
... Al menos eso lo he podido arreglar. La "question" ahora es cómo puedo recuperar estos en la p ùagina siguiente?.... Quiero decir, el 'item_$i++', como lo hago en la segunda página?

Mil gracias por ayudarme a resolver este lío.
__________________
Andrew :P
  #15 (permalink)  
Antiguo 24/01/2012, 14:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Paras array (arreglos) via POST

Aparte que es redundante el código que haces, si solo tienes el elemento a imprimir solamente imprimelo directamente:
Código PHP:
Ver original
  1. // redundante:
  2. while ( $colcat = mysql_fetch_array ( $resultado, MYSQL_NUM ) ) {
  3.  
  4.         $categoria = array($colcat);
  5.  
  6.                 foreach ($categoria as $valor) {
  7.                         echo '<input type="hidden" name="misvalores[]" value="'.$valor.'">';
  8.                   }
  9. }
  10.  
  11. // bien
  12. while ( $colcat = mysql_fetch_array ( $resultado, MYSQL_NUM ) ) {
  13.         echo '<input type="hidden" name="misvalores[]" value="'.$colcat[0].'">';
  14. }
  #16 (permalink)  
Antiguo 25/01/2012, 06:13
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
De acuerdo Respuesta: Paras array (arreglos) via POST

Hola a todos/todas...

Muchas gracias por los 'tips' que me habéis dejado en vuestros comentarios. he combinado vuestras sugerencias en mi código y finalmente lo he sacado a delante.

Gracias!

POST RESUELTO
__________________
Andrew :P

Etiquetas: arreglos, formulario, post, registro, 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 18:19.