Probèle sur une bouche while en php
Résolu
milo1986
Messages postés
126
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
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
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:
- Probèle sur une bouche while en php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Php alert - Forum PHP
- Bouche d'incendie sims freeplay ✓ - Forum Jeux vidéos smartphones
- Retour à la ligne php ✓ - Forum PHP
4 réponses
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
Après pour la récupération ajout de .($i-1) - commence à zéro - dans les $_POST
C'est l'esprit du moins, je n'ai pas testé.
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é.
Bon c'est cool alors
pour la checkbox faites ceci
pour la checkbox faites ceci
if (isset($_POST['epuis'.($i-1)])) { //control si la checbox est cochée $checkbox=2; } else { $checkbox=1; }