2011-03-29 10 views
14

Publiqué algunos datos en otra página desde un formulario. Es un carrito de compras, y el formulario que se envía se genera en la página antes de que se especifique cuántos elementos hay en el carrito. Por ejemplo, si solo hay 1 ítem, entonces solo tenemos el nombre de campo 'item_name_1' que debe almacenar un valor como "Sticker" y 'item_price_1' que almacena el precio de ese ítem. Pero si alguien tiene 5 elementos, necesitaríamos 'item_name_2', 'item_name_3', etc. para obtener los valores de cada elemento hasta el quinto.Valor de Foreach desde POST desde el formulario

¿Cuál sería la mejor manera de recorrer esos elementos para obtener los valores?

Esto es lo que tengo, lo que obviamente no funciona.

extract($_POST); 

$x = 1; // Assuming there's always one item we're on this page, we set the variable to get into the loop 

while(${'item_name_' .$x} != '') { 

echo ${'item_name' .$x}; 

$x++; 

} 

Todavía soy relativamente nuevo en este tipo de uso, por lo que no soy del todo la mejor manera de manejarlo.

Gracias.

+3

Esto no está relacionado con la pregunta, pero nunca debe usar extraer en $ _POST como se destaca en el manual de PHP: http://php.net/manual/en/function.extract.php – Flipper

Respuesta

19

Use campos de matriz similar:

<input name="name_for_the_items[]"/> 

puede recorrer los campos:

foreach($_POST['name_for_the_items'] as $item) 
{ 
    //do something with $item 
} 
+0

Esto funciona para yo. Gracias. Con esa variable $ item, ¿cómo obtendría el valor de item_price dentro del mismo ciclo? Quiero poder imprimir el item_name, item_price y item_quantity para cada artículo. – Andelas

+3

@scatterbomb: use nombres como 'item [1] [name]', 'item [1] [price]', 'item [2] [name]', 'item [2] [price]'. 'var_dump ($ _ POST);' para ver el resultado. – Wrikken

+0

@ Dr.Molle: qué ocurre si tengo varios formularios pero quiero enviar valores de diferentes formularios, la publicación solo devuelve el último valor de formulario – logan

0

yo no hacerlo de esta manera

que haría uso de matrices en nombre los elementos de formulario

así que obtendría el diseño

$_POST['field'][0]['name'] = 'value'; 
$_POST['field'][0]['price'] = 'value'; 
$_POST['field'][1]['name'] = 'value'; 
$_POST['field'][1]['price'] = 'value'; 

entonces usted podría hacer una rodaja de matriz para obtener la cantidad que necesita

39

En primer lugar, por favor no utilice extracto(), puede ser un problema de seguridad, ya que es fácil de manipular la POST Parámetros

Además, usted no tiene que utilizar nombres de variables variables (que suena raro), en su lugar:

foreach($_POST as $key => $value) { 
    echo "POST parameter '$key' has '$value'"; 
} 

para asegurarse de que tiene sólo los parámetros que comienzan con 'item_name' se puede comprobar de esta manera:

+0

Gracias. Me estoy inclinando por el ejemplo del Dr. Molle, pero aprecio la información sobre extract(). Lo eliminé de mi código. – Andelas

+0

También me gusta la matriz POST. – Alp

+0

@Alp: ¿qué sucede si tengo múltiples formularios y deseo enviar valores de diferentes formularios? La publicación devuelve el último valor de formulario – logan

Cuestiones relacionadas