Variable non prise en compte dans une formulaire

Invité
Invité n'ayant pas de compte PHPfrance

31 Juil 2008, 15:06

Bonjour

j'ai une probleme sur une variable postée dans une formulaire
quand je modifie une liste déroulante autre que la derniere liste déroulante afficher en fonction des resultats retournés par ma requete , Quand je clique sur le bouton submit , ça ne prend pas en compte la valeur de la variable que je choisi à modifier

voici le code (j'ai un peu modifier le code c'est à dire il n'y a pas de soucis syntaxiquement, le code marche)

[php]<?
if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{ $req="update table1 set ";
$req.="op=".$option." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
}
}

}
?>
<html>
<head>
<title></title>

</head>

<body bgcolor="#FFFFFF" cellpadding="0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="PAGEhaut"></a>
<br>
<form method="post" action="candILLI.php" name="FORM" style="display:inline;margin:0">

<table width="600" border="0" cellspacing="0" cellpadding="2" class="xxARIALx09">
<tr>
<td align="right" valign="top" height="30"></td>

<td valign="top" height="30"></td>
</tr>

<?

$req="select id, nom, prenom, adresse from table where id=12 ";
if ($res=mysql_query($req))
{ if (mysql_num_rows($res)>0)
{ ?>
<tr ><td colspan="2"></td></tr>
<tr>
<td></td>
<td valign="top">
<table width="530" border="0" cellspacing="0" cellpadding="2" >
<?
while ($row=mysql_fetch_array($res))
{
$id=$row['id'];
$nom=$row["nom"];
$prenom=$row["prenom"];
$adresse=$row["adresse"];

?>
<tr >
<td>
<input type="checkbox" name="tableau[]" value="<? print $id; ?>" <? print $coche; ?>><? print $nom; ?><? print $prenom; ?><? print $adresse; ?></td>
<td valign="top">
ok
<select name="option" style="width:50">
<? for ($x=0;$x<2;$x++) { if ($x==$option) {$coche="selected";} else {$coche="";} ?>
<option value="<? print $x; ?>" <? print $coche; ?>>oui/non</option>
<? } ?>
</select>
</td>
</tr>
<? } ?>
<tr>
</td>
</tr>
</table>
</td>
</tr>
<? }
?>
<tr><td align="right" valign="top" colspan="2">
<input type="submit" name="btn" class="<? print $fltPAYS; ?>BOUTON" value="Valider"></td></tr>
<tr><td align="right" valign="top" colspan="2" height="20"></td></tr>
</table>
</form>
<br>
</body>
</html>

[/php]

Mon probleme se trouve au niveau du formulaire name=option
la requete retourne et affiche des résultats en base et quand je voudrais modifier un champ dans ce formulaire autre que la dernière donnée qui s'affiche, la variable postée n'est pas prise en compte.
C'est à dire que si j'ai non dans une liste que je veux modifier et que je veux modifier à oui la variable posté est à non

alors que si je modifie la derniere variable , il n'y pas de soucis

merci

Mammouth du PHP | 807 Messages

31 Juil 2008, 15:22

Si tu as des problèmes avec name="option", c'est probablement parce que tu n'as pas fait avec cet élément ce que tu as fait avec les autres, en faire un tableau de réponses. Regarde le nom que tu donnes à name="tableau[]"
Les crochets font en sorte que le contenu de tous les éléments "tableau" se trouveront dans des tableaux tableau[0], tableau[1], tableau[2], tableau[...]

Si tu en faisais autant avec le select option, tu aurais un tableau d'option: option[0], option[1], option[2], option[...] à traiter.


Remarque: pour passer au PHP5 ou 6, il faudra des balises <?php et non pas seulement <? aussi bien t'habituer tout de suite.

Tu écris que dans ton code il n'y a pas d'erreur, mais il manque un } à la fin.
Soyez artisans de paix

Invité
Invité n'ayant pas de compte PHPfrance

01 Août 2008, 10:42

bonjour

j'ai modifié comme suit le code mais ça ne marche pas
j'ai mis name="option[]"

[php]if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{
$j = 0;
while ($_POST["option"][$j])
{
$req="update table1 set ";
$req.="op=".$option[$j]." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
$j++
}
}
}



}[/php]

Mammouth du PHP | 807 Messages

01 Août 2008, 14:42

J'ai trouvé quelques petites erreurs dans ton code:

un point-virgule après $j++

et dans ta requête, il faut continuer à utiliser $_POST["option"][$j] tu vérifies la condition en l'utilisant correctement, mais ensuite tu oublies tout ça et n'utilises que $option. Il faut persister et utiliser $_POST["option"] jusqu'au bout.

Enfin, il te manque une accolade fermante }
Soyez artisans de paix

Invité
Invité n'ayant pas de compte PHPfrance

04 Août 2008, 14:20

Bonjour

j'ai cherché cherché je pense que je suis presque ....

voici le code :

[php]<?
if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{
foreach($_POST['option'] as $var => $var1)
{
$req="update table1 set ";
$req.="op=".$option." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
}
}

}
?>
<html>
<head>
<title></title>

</head>

<body bgcolor="#FFFFFF" cellpadding="0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="PAGEhaut"></a>
<br>
<form method="post" action="candILLI.php" name="FORM" style="display:inline;margin:0">

<table width="600" border="0" cellspacing="0" cellpadding="2" class="xxARIALx09">
<tr>
<td align="right" valign="top" height="30"></td>

<td valign="top" height="30"></td>
</tr>

<?

$req="select id, nom, prenom, adresse from table where id=12 ";
if ($res=mysql_query($req))
{ if (mysql_num_rows($res)>0)
{ ?>
<tr ><td colspan="2"></td></tr>
<tr>
<td></td>
<td valign="top">
<table width="530" border="0" cellspacing="0" cellpadding="2" >
<?
while ($row=mysql_fetch_array($res))
{
$id=$row['id'];
$nom=$row["nom"];
$prenom=$row["prenom"];
$adresse=$row["adresse"];

?>
<tr >
<td>
<input type="checkbox" name="tableau[]" value="<? print $id; ?>" <? print $coche; ?>><? print $nom; ?><? print $prenom; ?><? print $adresse; ?></td>
<td valign="top">
ok
<select name="option[]" style="width:50">
<? for ($x=0;$x<2;$x++) { if ($x==$option) {$coche="selected";} else {$coche="";} ?>
<option value="<? print $x; ?>" <? print $coche; ?>>oui/non</option>
<? } ?>
</select>
</td>
</tr>
<? } ?>
<tr>
</td>
</tr>
</table>
</td>
</tr>
<? }
?>
<tr><td align="right" valign="top" colspan="2">
<input type="submit" name="btn" class="<? print $fltPAYS; ?>BOUTON" value="Valider"></td></tr>
<tr><td align="right" valign="top" colspan="2" height="20"></td></tr>
</table>
</form>
<br>
</body>
</html>[/php]
mon soucis c'est que en fonction du nombre de resultats retourné par ma requete s'affichera le nombre de liste déroulante
ex :
voiture ==> liste déroulante [oui/non]
table ==> liste déroulante [oui/non]
maison==> liste déroulante [oui/non]

Si je veux modifier par exemple voiture à oui et que le autres je ne les touches pas par exemple les 2 autres sont à non
la requete s'execute 3 fois et voiture sera toujouras à non
evidement parceque ma requete se trouve dans une boucle

Comment pourrai eviter que ma requete sera executé 3 fois

merci

Mammouth du PHP | 807 Messages

04 Août 2008, 14:48

J'avoue que je suis un peu mêlé, là. Il y a plusieurs variables qui s'appelle "option" ou elle n'est pas nommée correctement à certains endroits?

Ici [php] <?PHP for ($x=0;$x<2;$x++) { if ($x==$option) {$coche="selected";} else {$coche="";} ?>
[/php]

$x devrait être comparé à $option ou à $_POST["option"] ?

Tu parles aussi d'éviter que ça ne passe trois fois, trois fois sur toutes les listes ou sur une seule.


Aussi, il faudrait que tu corrige la première partie du code, celle avant <body>, il y a là encore des erreurs pour lesquelles je t'ai laissé des pistes antérieurement. Il manque } et ; et (voir ci-haut)[/php]
Soyez artisans de paix

Invité
Invité n'ayant pas de compte PHPfrance

04 Août 2008, 15:03

Merci pour votre rapide post
$x devrait être comparé à $option

Qand je modifie une liste le requete q'execute 3 fois sur cette liste avec les valeurs récuperés dans foreach des 3 listes alors que je ne veux executer ma requete que sur la liste que je modifie.

Je ne sais pas si c'est bien claire


le code

[php]<?
if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{
foreach($_POST['option'] as $var => $var1)
{
$req="update table1 set ";
$req.="op=".$option." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
}
}
}
}
?>
<html>
<head>
<title></title>

</head>

<body bgcolor="#FFFFFF" cellpadding="0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="PAGEhaut"></a>
<br>
<form method="post" action="candILLI.php" name="FORM" style="display:inline;margin:0">

<table width="600" border="0" cellspacing="0" cellpadding="2" class="xxARIALx09">
<tr>
<td align="right" valign="top" height="30"></td>

<td valign="top" height="30"></td>
</tr>

<?

$req="select id, nom, prenom, adresse from table where id=12 ";
if ($res=mysql_query($req))
{ if (mysql_num_rows($res)>0)
{ ?>
<tr ><td colspan="2"></td></tr>
<tr>
<td></td>
<td valign="top">
<table width="530" border="0" cellspacing="0" cellpadding="2" >
<?
while ($row=mysql_fetch_array($res))
{
$id=$row['id'];
$nom=$row["nom"];
$prenom=$row["prenom"];
$adresse=$row["adresse"];

?>
<tr >
<td>
<input type="checkbox" name="tableau[]" value="<? print $id; ?>" <? print $coche; ?>><? print $nom; ?><? print $prenom; ?><? print $adresse; ?></td>
<td valign="top">
ok
<select name="option[]" style="width:50">
<? for ($x=0;$x<2;$x++) { if ($x==$option) {$coche="selected";} else {$coche="";} ?>
<option value="<? print $x; ?>" <? print $coche; ?>>oui/non</option>
<? } ?>
</select>
</td>
</tr>
<? } ?>
<tr>
</td>
</tr>
</table>
</td>
</tr>
<? }
?>
<tr><td align="right" valign="top" colspan="2">
<input type="submit" name="btn" class="<? print $fltPAYS; ?>BOUTON" value="Valider"></td></tr>
<tr><td align="right" valign="top" colspan="2" height="20"></td></tr>
</table>
</form>
<br>
</body>
</html>[/php]

Mammouth du PHP | 807 Messages

04 Août 2008, 17:17

Anonymous a écrit :
Qand je modifie une liste le requete q'execute 3 fois sur cette liste avec les valeurs récuperés dans foreach des 3 listes alors que je ne veux executer ma requete que sur la liste que je modifie.

Je ne sais pas si c'est bien claire


Non.

La page que tu nous présentes comporte un formulaire. C'est sur le formulaire que nous travaillons ici
La page que tu nous présentes réfère-t-elle à elle-même pour traiter les informations inscrites dans le forumlaire?
Si oui, je comprends que c'est la partie du haut qui traite.

Quant aux répétitions que tu essaies de me faire comprendre, voici ce que j'entends:
Tu modifies une liste, puis tu soumets ton formulaire.
Le haut de la page (première section de PHP) traite la demande
Vient ensuite le nouvel affichage qui passe par un foreach
À l'intérieur de ce foreach là chaque item passe trois fois.

Et la requete dont tu parles, que tu ne veux voir exécutée qu'une fois, quelle est-elle? Celle du traitement (avant le <head> ou celle de l'affichage dans le foreach ?

Donne-nous seulement la partie de code affectée par ta demande. Nous irons piger dans tes POST antérieurs pour trouver ce qui nous manque.
Soyez artisans de paix

Invité
Invité n'ayant pas de compte PHPfrance

04 Août 2008, 17:58

Oui La page refere à elle même

Le probleme c'est que cette requete est executer 3 fois si par exemple ma requete retourne 3 resultat c'est à dire 3 select form

a ==> select [oui/non]
b ==> select [oui/non]
c ==> select [oui/non]


[php]if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{
foreach($_POST['option'] as $var => $var1)
{
$req="update table1 set ";
$req.="op=".$option." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
}
}
}
}
[/php]

je fais print à la requete et voilà ce qui affiche

update table1 set op="oui" where id_=12
update table1 set op="non" where id_=14
update table1 set op="non" where id_=15

alors que ce que je voudrai faire c'est de mettre à oui l'id=12(j'ai pas toucher au 2 derniers select) mais la requete se repete 3 fois.
op est toujours egale à non pour l'id =12

merci

Mammouth du PHP | 807 Messages

04 Août 2008, 19:50

Si je comprends bien ton code, il semble que nous pourrions le simplifier de la manière suivante:

[php]if ($btn!="")
{
$max=count($tableau);
if ($max>0)
{ for ($i=0; $i<$max; $i++)
{
$req="update table1 set ";
$req.="op=".$_POST["option"][$i]." ";
$req.="where id=".$tableau[$i];
print $req;
if (!$res=mysql_query($req)) {print $req."<br>".mysql_error();}
}
}
} [/php]

On pourrait aussi demander à MySQL de n'apporter de changement que si changement il y a:
[php] $req="update table1 set ";
$req.="op='".$_POST["option"][$i]."' ";
$req.="where id=".$tableau[$i]:" AND op <> '".$_POST["option"][$i]."' ";
[/php]


Finalement, en jouant un peu dans ton code, ton problème de non changement de la valeur op n'est peut-être dû qu'une une bête faute de syntaxe: il faut encadrer les valeurs texte d'apostrophes ou de guillemets. Dans le cas présent, ce serait d'apopstrophes, comme je l'ai fait dans le second extrait.
Soyez artisans de paix