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.
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
}
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
}
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é.
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