Probèle sur une bouche while en php

Résolu/Fermé
milo1986 Messages postés 126 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 30 août 2011 - Modifié par milo1986 le 30/06/2011 à 14:27
 Utilisateur anonyme - 30 juin 2011 à 15:26
Bonjour,

Voilà, j'ai sur une de mes pages un formulaire dont le contenu est récupéré dans une base de données, il affiche une liste de produits pour que celle ci puisse être éditée afin de modifier les libellés des produits par exemple.

je joins tout d'abord le code de mon formulaire construit par une boucle :

$sql_selection="SELECT * FROM ba_produit WHERE numcat='$cat'";
$req_selection = mysql_query($sql_selection) or die ('Erreur SQL ! <br>'.$sql_selection.'<br>'.mysql_error ());
echo '<form action="record_prod.php" method="post">';
echo '<table WIDTH=600 CELLSPACING=10><tr><td><strong>Désignation</strong></td><td><strong>Colisage</strong></td><td><strong>Epuisé</strong></td></tr>';
$nbr=0;
while ($data_selection = mysql_fetch_assoc($req_selection))
{ if ($data_selection['etaprod']==2)
{
$checkbox='<input type="checkbox" name="epuis" checked value="coche"/>';
}
else
{
$checkbox='<input type="checkbox" name="epuis" value="coche"/>';
}
echo '<tr><td><input type=hidden value="'.$data_selection['numprod'].'" name="numprod"/> <input type=text name="lib" value="'.$data_selection['desprod'].'" size=50/></td><td><input type=text name="col" value="'.$data_selection['colprod'].'"/></td><td>'.$checkbox.'</td></tr>';
$nbr=$nbr+1;
}
echo '</table>';
echo '<input type=text value="'.$nbr.'" name="nb" />';
echo '<input type=text value="'.$cat.'" name="cat" />';
echo '<input type=submit value="Enregistrer" :>';
echo '</form>';


J'envoi donc ce formulaire sur la page record_prod.php qui est constituée ainsi :


$nb = $_POST['nb']; //nombre de record renvoyé en fin de formulaire hors de la boucle
$i = 1;
$cat=$_POST['cat']; //catégorie de produit envoyé depuis la page précédente

while ($i <= $nb){ //tanque i est inférieur ou égale au nombre de record

$num = $_POST['numprod'];
$lib = $_POST['lib'];
$coli = $_POST['col'];

if (isset($_POST['epuis'])) { //control si la checbox est cochée
$checkbox=2;
}
else {
$checkbox=1;
}
$i++; //incrémentation de i
echo $num.' '.$lib.' '.$coli.' '.$cat.' valeur checkbox = '.$checkbox.'<br>';
}

Volontairement je n'ai pas encore mis ma requête sql car je préfère tout d'abord effectuer un affichage pour vérifier que tout fonctionne.... Mais voilà ça ne fonctionne pas : seulement la dernière valeur de mon formulaire est reprise autant de fois que j'ai d'enregistrement dans le formulaire de la page précédente.... j'ai donc essayé de modifier mon code en insérant par exemple $num = $_POST['numprod'.$i]; mais ça ne change rien au contraire $num ne s'affiche carrément plus... je sais que c'est d'un niveau basique mais la fatigue aidant je n'arrive plus à trouver comment faire.

Merci d'avance à la personne charitable qui acceptera de m'aider


A voir également:

4 réponses

Utilisateur anonyme
30 juin 2011 à 14:34
Bonjour,

Dans votre formulaire, les champs doivent avoir un indice, l'idée du $i est donc bonne, mais dans le formulaire comme dans la récupération ensuite, donc ajout de '.$nbr.' à chaque name des champs

$nbr=0;
while ($data_selection = mysql_fetch_assoc($req_selection))
{ if ($data_selection['etaprod']==2)
{
$checkbox='<input type="checkbox" name="epuis'.$nbr.'"checked value="coche"/>';
}
else
{
$checkbox='<input type="checkbox" name="epuis'.$nbr.'" value="coche"/>';
}
echo '<tr><td><input type=hidden value="'.$data_selection['numprod'].'" name="numprod'.$nbr.'"/> <input type=text name="lib'.$nbr.'" value="'.$data_selection['desprod'].'" size=50/></td><td><input type=text name="col'.$nbr.'" value="'.$data_selection['colprod'].'"/></td><td>'.$checkbox.'</td></tr>';
$nbr=$nbr+1;
} 


Après pour la récupération ajout de .($i-1) - commence à zéro - dans les $_POST
while ($i <= $nb){ //tanque i est inférieur ou égale au nombre de record

$num = $_POST['numprod'.($i-1)];
$lib = $_POST['lib'.($i-1)];
$coli = $_POST['col'.($i-1)]; 


C'est l'esprit du moins, je n'ai pas testé.
1
Utilisateur anonyme
30 juin 2011 à 15:22
Bon c'est cool alors

pour la checkbox faites ceci
if (isset($_POST['epuis'.($i-1)])) { //control si la checbox est cochée
$checkbox=2;
}
else {
$checkbox=1;
} 
1
milo1986 Messages postés 126 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 30 août 2011 22
30 juin 2011 à 15:17
Ha oui effectivement ça fonctionne et même plutôt bien merci ;) par contre j'ai un autre problème qui s'est révélé : la verif si la checkbox est cochée ou non ne s'effectue pas : cela me renvoi toujours la valeur 1....
0
milo1986 Messages postés 126 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 30 août 2011 22
30 juin 2011 à 15:25
Merci pour tout ça fonctionne bien
0
Utilisateur anonyme
30 juin 2011 à 15:26
Super, bonne continuation !
0