Récupérer valeurs d'un formulaire dynamique PHP

Bonjour tout le monde !

Je vous explique mon problème et vous remercie par avance pour votre aide :slight_smile: (après pas mal de recherches sur le net j’ai vu que la commande Foreach devrait résoude mon problème mais j’ai du mal à comprendre comment l’utiliser :wink:

Le but du formulaire est de lister tous les articles de la rubrique accessoires (avec la marque, prix, caracteristiques etc…) et modifier tout ce qu’il nous plait, et lorsqu’on clique sur submit, cela fait un update de tous les articles concernés dans la base sql :slight_smile:

Voilà le code de list.php :

<? $host="gnarkgnark.fr"; $db="burp"; $user="root"; $password="Oebr228"; $connect=mysql_connect($host, $user, $password); mysql_select_db($db, $connect); $select="Select * from contenu WHERE rubrique LIKE 'equipement_pilote' AND sous_rubrique LIKE 'accessoires'"; $query=mysql_query($select); $rows=mysql_num_rows($query); echo ''.$rows.''; echo ''; echo ''; echo '
Ref de l\'article
MARQUE
'; $i=0; WHILE ($data=mysql_fetch_array($query)) { echo '
'.$data['id'].'
'; $i++; } echo ''; echo ''; mysql_close(); ?>

Jusque là pas de problème ca m’affiche correctement les articles avec l’id, la marque et le prix, on modifie ce qu’il nous plait, et c’est après que j’ai du mal à comprendre comment récupérer mes valeurs :slight_smile:

Voilà le code de la 2e page :

<? $rows=$_REQUEST['rows']; foreach ($_POST as $cle) { echo ''.$cle.'
'; } echo 'Nombre de lignes : '.$rows.''; ?>

Ca m’affiche l’id et la marque en vrac, ce que je ne sais pas c’est comment naviguer dans ce tableau pour par exemple que ca ne m’affiche que le $_REQUEST[‘marque’] pour faire un update dans la base sql :slight_smile:

J’espère que j’aurais réussi à me faire comprendre j’ai du mal à m’expliquer lol

Merci pour votre aide :slight_smile:

Si j’ai bien comprit ce que tu veux, c’est à toi de vérifier si la variable commence bien par marque :



<?
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle => $valeur) {
if (substr($cle,0,6) == 'marque') 
     echo "{$cle} => {$valeur}<br>";
}
echo '<b>Nombre de lignes : '.$rows.'</b>';
?>


Edité le 29/10/2007 à 12:48

je viens de tester ton code et c’est exactement ca merci :slight_smile:

par contre quelques petites questions : if (substr($cle,0,6) == ‘marque’) ca veut dire quoi exactement ? :slight_smile:
est ce qu’il y’a une instruction courte qui permet de récupérer l’id, la marque, le prix etc… ou je suis obliger de faire un foreach pour chacune de ces valeurs ?

Faire un update SQL avec un foreach ne risque pas d’être lent et lourd ? (en imaginant qu’il y’a 100 produits d’un coup à mettre à jour il va faire 100 updates d’un coup :slight_smile:

Si tu as une meilleure solution ou des conseils je suis preneur :slight_smile:

Pour les updates, de toutes manières si tu as 100 produits à mettre à jour, tu devras faire 100 updates, non ?

Le “substr($cle,0,6)” retourne les 6 premiers caractères de la chaine.

Pour récuperer le prix et compagnie, tu peux faire comme ça :


<? $rows=$_REQUEST['rows']; foreach ($_POST as $cle => $valeur) 
{ 
if (substr($cle,0,6) == 'marque')   
{
echo "{$cle} => {$valeur}<br>"; 

$index = intval(substr($cle,6));   // Renvoie tous les caractères à partir du 6ème jusqu'à la fin. Intval s'assure qu'il s'agit d'un nombre

if ($index != 0) // pour être sur qu'on a bien lu le nombre)
{
echo 'Prix : ' . $_POST['prix' . $index] . '<br>';
}
}
} echo '<b>Nombre de lignes : '.$rows.'</b>'; 
?> 

Après, c’est juste pour te donner l’idée générale, à toi de l’adapter à tes besoins (notamment le contrôle d’erreur au niveau de $index) :wink:

Edit : correction d’une petite erreur dans le script (accolades manquantes)
Edité le 29/10/2007 à 14:14

parfait merci beaucoup pour tes explications, je vais bosser là dessus cet aprem :slight_smile:

Salut ! désolé à nouveau de te déranger, ta technique fonctionne très bien mais j’ai quand même un soucis :frowning:

Je t’explique :

sur la page list.php j’ai un formulaire qui liste tous les produits de la rubrique accessoires et affiche en conséquence affiche 3 champs pour chaque produit de la rubrique accessoires :

  • id (en hidden), Marque (input text) et Prix public (input text)

Donc je modifie les les marques et prix qui m’interessent et lorsque je clique sur le bouton submit je suis rediriger sur update.php et là commence le script suivant avec ton code :

<? $host="gnark.gnark.fr"; $db="catalogue"; $user="root"; $password="Oebr228"; $connect=mysql_connect($host, $user, $password); mysql_select_db($db, $connect); $rows=$_REQUEST['rows']; foreach ($_POST as $cle => $valeur) { if (substr($cle,0,6) == 'marque') echo "{$cle} donne {$valeur}
"; $marque=$valeur; if (substr($cle,0,6) == 'prixpb') echo "{$cle} donne {$valeur}
"; $prixpb=$valeur; if (substr($cle,0,2) == 'id') echo "{$cle} donne {$valeur}
"; $id=$valeur; $update="UPDATE contenu SET marque='$marque', prix_public='$prixpb' WHERE id='$id'"; mysql_query($update); } ?>

Comme tu dois t’en douter marque et prix public ont la même valeur que l’id et c’est justement ça mon problème :slight_smile:

J’aurais plutôt dit quelque chose du genre :


<?
$host="gnark.gnark.fr";
$db="catalogue";
$user="root";
$password="Oebr228";
$connect=mysql_connect($host, $user, $password);
mysql_select_db($db, $connect);
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle => $valeur)
{
if (substr($cle,0,6) == 'marque')
echo "<b>{$cle} donne {$valeur}<br></b>";
$marque=$valeur;

$index = intval(substr($cle,6));

$prixpb = $_POST['prixpb' . $index];

$id = $_POST['id' . $index];

$update="UPDATE contenu SET marque='$marque', prix_public='$prixpb' WHERE id='$id'";
mysql_query($update);
}
?>

Après, j’ai peut être pas comprit exactement ce que tu voulais :wink:

re :slight_smile:

en lançant ton script j’ai pas mal d’erreurs genre Undefined index: id0 :slight_smile: Et je vais essayer de t’expliquer mon soucis :slight_smile:

En fait dans ton script d’après ce que j’ai compris il cherche la valeur id, prixpb à partir de “marque” ? Parce que en fait id, prixpb et marque sont 3 input text différents :slight_smile:

Je vais bien réussir à me faire comprendre lol

En tout cas merci de ton aide :stuck_out_tongue: