web-dev-qa-db-fra.com

Foreach valeur de POST de forme

Je publie des données sur une autre page à partir d'un formulaire. Il s’agit d’un panier, et le formulaire soumis est généré sur la page avant, en fonction du nombre d’articles contenus dans le panier. Par exemple, s'il n'y a qu'un seul article, nous n'avons que le nom de champ 'item_name_1' qui doit stocker une valeur comme "Sticker" et "item_price_1" qui stocke le prix de cet article. Mais si quelqu'un a 5 éléments, nous aurions besoin de 'item_name_2', 'item_name_3', etc. pour obtenir les valeurs de chaque élément jusqu'au cinquième.

Quel serait le meilleur moyen de parcourir ces éléments pour obtenir les valeurs?

Voici ce que j'ai, qui évidemment ne fonctionne pas. 

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++;

}

Je suis encore relativement novice dans ce type d'utilisation, je ne suis donc pas tout à fait la meilleure façon de le gérer. 

Merci.

16
Andelas

Utilisez des champs de type tableau:

<input name="name_for_the_items[]"/>

Vous pouvez parcourir les champs:

foreach($_POST['name_for_the_items'] as $item)
{
  //do something with $item
}
22
Dr.Molle

Tout d’abord, n’utilisez pas extract (), cela peut être un problème de sécurité car il est facile de manipuler les paramètres POST

De plus, vous n'avez pas à utiliser de noms de variables variables (cela peut sembler étrange), mais plutôt:

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

Pour vous assurer que vous ne disposez que de paramètres commençant par 'item_name', vous pouvez le vérifier comme suit:

$param_name = 'item_name';
if(substr($key, 0, strlen($param_name)) == $param_name) {
  // do something
}
45
Alp

Si vos clés de poste doivent être analysées et que les clés sont des séquences avec des données, vous pouvez essayer ceci:

Exemple de publication de données: Storeitem | 14 = data14

foreach($_POST as $key => $value){
    $key=Filterdata($key); $value=Filterdata($value);
    echo($key."=".$value."<br>");
}

vous pouvez ensuite utiliser strpos pour isoler la fin de la clé en séparant le numéro de la clé.

1
Wynn

je ne le ferais pas de cette façon

J'utiliserais des tableaux de noms dans les éléments de formulaire

donc je voudrais obtenir la mise en page

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

alors vous pourriez faire une tranche de tableau pour obtenir le montant dont vous avez besoin

0
Jase