PHP - Enviar uno a uno los valores de un array por POST

 
Vista:
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 21/09/2017 20:28:48
Hola.

Necesito enviar los valores de un array por POST uno a uno; es decir, no el array entero sino cada uno de sus valores por separado de forma que en la pagina de recepción queden diferenciados.

Tengo hecho el siguiente script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function importar () {
 
$paquetes = count ($productos);
$productos = ($_SESSION ['CSVpart']);  //El array lo tenemos como variable de sesion.
 
foreach ($productos as $valor){
	$csv = $valor;      //$csv y $valor ahora no son un array. Si pusiésemos un echo seguidamente saldría la lista de los valores $csv.
 
	?>
 
	<form name="enviandoCsv" method="POST" action ="POST.php" >
	<input type ="hidden"  name="csv" value="<?php echo $csv ?>">
	<input type="submit" value="Confirmar envio"> <!--Para evitar que reproduzca un boton por cada $csv lo sacariamos del foreach-->
 
	</form>
	<?php
 
}	//Cierra foreach.
 
?>

Con este script reproduce el submit tantas veces como valores tenga el array y llega a la página de recepción un valor de $csv según el submit que pulsemos, y esto no es lo que se pretende; se trata de que con un solo submit se envíen los valores uno a uno a la pagina de recepción y se puedan ver diferenciados.

Si sacamos el input del foreach se recibe un solo valor del array.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 21/09/2017 20:56:28
Hola,si mal no entendi funciona asi...le cambie algunas cosas para poder probarlo yo, pero en fin el algoritmo es el mismo, de paso no te paso todo el codigo terminado para que pienses un poco y aprendas!!
Aca lo que se hace es que por cada iteracion del foreach crea un input con el valor de cada indice del array, y a cada imput se lo llama "csv . $i" y como $i en cada iteracion suma 1 entonces va a valer csv1, csv2, csv3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$productos =  [
            1=> 'asd',
            2=> 'asd2',
            3=> 'asd3',
    ];
        ?>
        <form name="enviandoCsv" method="POST" action = "" > <?php
            $i = 1;
           foreach($productos as $value){ ?>
            <input type ="text" name="<?='csv' . $i?>" value="<?= $value ?>" hidden>
               <?php
           $i++;
           } ?>
 
            <input type="submit" value="Confirmar envio">
        </form>
 
<?php
 
if (isset($_POST)){
    echo $_POST['csv1'] . '<br>';
    echo $_POST['csv2']. '<br>';
    echo $_POST['csv3']. '<br>';
}
Entonces en la pagina de destino (en este caso el action del form esta vacio osea actua en esta misma pagina) vas a poder tomar cada valor del array por separado
Entendiste? lo pudiste hacer?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 22/09/2017 12:16:03
En primer lugar muchas gracias por tu respuesta.

Soy bastante nuevo y hay cosas que no conocía; por ejemplo que un input pueda tener dos type:

<input type ="text" name="<?='csv' . $i?>" value="<?= $value ?>" hidden>

He probado el algoritmo y funciona, pero solo para cuando se envían 3 csv; es decir, en la página de recepción se ha colocado:

echo $_POST['csv1'] . '<br>'; aumentando el número de csv cada vez.

si en vez de tener 3 csv tuviésemos 3.000 solo funcionaría con los 3 primeros...

He probado el siguiente código en la pagina de recepción:

1
2
3
4
5
6
<?php
 
if (isset($_POST ['value'])){
    echo $_POST['value'] . '<br>';
 
}

puesto que entiendo que lo que se envía con el submit es el $value y el resultado es una página en blanco.

El caso es que este sistema lo implemente una vez y funcionaba perfectamente, pero no recuerdo el algoritmo que utilice y tampoco tengo copia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 22/09/2017 14:20:06
Con el algoritmo que te pasé muestra solo 3 csv porque el array $productos tiene solo 3 valores:
1
2
3
4
5
$productos =  [
    1=> 'asd',
    2=> 'asd2',
    3=> 'asd3',
];
El foreach se usa para recorrer arrays. Si queres tener los valores por separado, para mostrarlos vas a tener que mostrar cada csv con su numero por ejemplo if
1
2
3
echo $_POST['csv1'] . '<br>';
echo $_POST['csv2']. '<br>';
echo $_POST['csv3']. '<br>'; etc etc etc

creo que hay una manera de recorrer $_POST sin tener que indicarle manualmente csv1, csv2, csv3, etc etc.... Pero ahora me tengo que ir, a la tarde cuando vuelvo me fijo.... Cualquier cosa preguntá!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 22/09/2017 18:30:19
Claro...eso último es lo que no quiero (recorrer el array valor por valor, más bien no puedo) porque, entre otras cosas, a priori no se cuantos valores va a tener el array que, como dije proviene de una variable de sesión.

Ya digo que lo hice una vez pero no recuerdo como y no guardé copia...

Seguiré probando..

Si lo consigo hacer de nuevo pondré el algoritmo a disposición del foro, aunque llevo más de una semana con ello y no he logrado dar con la solución.

De todos modos muy agradecido por la primera parte del script (la parte del envío).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 22/09/2017 23:02:22
Mirá, de esta forma por cada valor lo vas a guardar en una variable :

1
2
3
4
5
6
7
8
9
if (isset($_POST)){
  $i = 1;
    foreach ($_POST as $value) {
      ${"var".$i} = $value;
       $i++;
    }
 echo $var1 . '<br>';
echo $var2 . '<br>';
}

y si lo que queres no es guardarlo en variables y simplemente mostrarlo es asi:

1
2
3
4
5
6
7
8
if (isset($_POST)){
 
    foreach ($_POST as $value) {
     echo  $value; // lo podes armar en una tabla tambien
 
    }
 
}

Te sirvio? Comentá!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 23/09/2017 14:43:49
Ok. Pero eso es una variante de lo anterior.

Igual da escribir echo $_POST['csv1'] . '<br>';

que tener que escribir echo $var1 . '<br>';

El objetivo es enviar un POST de forma automática con un string por cada uno de los valores del array a la página de recepción; es decir, si el array tiene 100 valores distintos se enviarían 100 POST.

Voy a explicar en más amplitud la idea del algoritmo que quiero construir:

Tenemos un array asociativo en una variable de sesión. Le llamamos A_sesion para individualizarlo aqui.

A_sesion tiene unos valores que desconocemos tanto en contenido como en cantidad. (para nosotros es indeterminado y además podría variar según se haya llenado en la variable de sesion)

En la página de recepción de los POST tendremos otro array (Le llamamos P_array para individualizarlo aqui) que llena sus valores a tenor de lo que le llegue por POST, cada vez que le llega un valor por POST desencadenará una función.

La idea es que cada vez que le llegue por POST un valor de A_sesion hacia P_array se desencadene la función; si le llegan 100 POST con 100 valores distintos desencadena la función 100 veces, si le llegan 1000 POST pues desencadena la función 1000 veces.


No se si queda claro lo que quiero conseguir...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 23/09/2017 16:29:05
aaaaaaaah amigo hubieses empezado por explicar bien lo que querias!!

lo que queres vos se hace asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$productos =  [
        1=> 'asd',
        2=> 'asd2',
        3=> 'asd3',
];
        ?>
        <form name="enviandoCsv" method="POST" action = "" > <?php
            $i = 1;
           foreach($productos as $value){ ?>
            <input type ="text" name="<?='csv' . $i?>" value="<?= $value ?>" hidden>
               <?php
           $i++;
           } ?>
 
            <input type="submit" value="Confirmar envio">
        </form>
 
if (isset($_POST)){
  $array = [];
    foreach ($_POST as $value) {  //aca hace lo que vos buscas, a cada valor del $_POST lo guarda en un array
      $array[] = $value;
    }
 
foreach ($array as $value)     //y aca lo recorre y lo muestra
  echo $value . '<br>';
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 23/09/2017 20:34:24
La idea no es que imprima nada, si no que envíe un POST a la página de destino por cada uno de los valores del array de la página de envío...

En el primer algoritmo que expuse lo hace, pero crea un submit para cada uno de los valores y tendríamos que estar pulsando los distintos submit para enviar cada valor y después retroceder (o recargar) a la pagina de envío para pulsar el submit siguiente...

Lo que se necesita es que, pulsando un solo submit se remita: un valor ---> un POST; otro valor --> otro POST... y así sucesivamente tantos valores como contenga el array; es decir, automatizar ese envío de valor -->POST

Obvio que en desarrollo imprimiríamos para confirmar que el algoritmo funciona, pero en producción no se imprimiría nada, solo se enviaría un POST a la pagina de destino por cada valor que tenga el array y cada uno de esos valores enviado por POST va a desencadenar la ejecución de la misma función una y otra vez, con la única diferencia de que el valor enviado en cada caso es distinto del anterior.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 24/09/2017 01:07:48
al codigo que te pasé yo sacale el hidden y fijate , esta creando un valor por cada csv! el metodo post junta todo en una variable array ($_POST) por lo que es imposible enviarlo en variables distintas!!, lo que yo te respondi lo hace! te recomiendo que analises bien los codigos que te pase, porque tambien responden a la ultima consigna que pusiste, no te va a servir de nada seguir aprendiendo codigos si no entendes el funcionamiento interior de cada cosa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 24/09/2017 10:17:10
Ciertamente tienes toda la razón.

Disculpa mi ignorancia...

No comprendía la parte del código :

<input type ="text" name="<?='csv' . $i?>" value="<?= $value ?>" hidden>

Como ya dije anteriormente, por ejemplo no sabia que pudiese existir el hidden del final expresado de esta forma, solo conocía input type="hidden" ó input type="text", pero no la aplicación de ambos al mismo tiempo..., tampoco conocía la técnica de establecer un contador para el foreach, vamos, la conocía pero pensaba que solo servia para el bucle for...

Ahora lo entiendo en su totalidad.; el name va cambiando en función de la $i que se esté "leyendo" en ese momento y el value cambian en función del value del foreach de forma que en cada iteración estamos ante un $i distinto con su respectivo value, propiciando que el input siempre sea distinto hasta el final del bucle foreach.

Como tenemos el submit fuera del bucle, un solo submit desencadenaría el envío de los formularios a la página que indiquemos en el action del fom.

Una última duda: ¿Porque se establece el inicio del contador a 1 y no a 0?.

He probado el código de las dos formas y el resultado en pantalla es el mismo; quiero decir, me imprime el mismo resultado iniciando el contador desde cero ( $i=0 ) que iniciando el contador desde 1 ( $i=1 )...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Enviar uno a uno los valores de un array por POST

Publicado por facundo (185 intervenciones) el 24/09/2017 19:16:42
Hola, bien que lo hayas entendido!
Para este caso no hay diferencia que $i se inicie en 0 o en 1, lo podes inicializar en cualquier otro numero tambien.

Tendria importancia si por ejemplo queres hacer un FOR que itere 5 veces, for($i=0, $i < 5, $i++) si lo inicializas en 1 estarias iterando solo 4 veces
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Enviar uno a uno los valores de un array por POST

Publicado por JOSE MANUEL (10 intervenciones) el 24/09/2017 19:39:25
Muchas gracias por tus respuestas.

Me ha servido de gran ayuda para entender y aprender cosas que no sabía.

De verdad que quedo muy agradecido.

Recibe atentos saludos. Maestro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar