Probleme d'ecriture d'un foreach dans une bouche while

Nomadique Messages postés 6 Statut Membre -  
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,

je bute sur un problème dans un script PHP. la ligne "foreach" donne un erreur.
Je comprend que c'est le compteur [$i] qui cause le problème mais je ne trouve pas la solution )) 0;

Voici le code:
if (isset($_POST['modifier'])){
$nbr=count($_POST['id']);
$i=0;
$x=1;
while($x <= $nbr){

foreach($_POST['couleur'][$i] as $lescouleurs){
$liste_couleur[$i] .= "".$lescouleurs.","; }
 
$sql = "UPDATE produit SET section=\"".$_POST['section'][$i]."\",titre=\"".$_POST['titre'][$i]."\",texte=\"".$_POST['texte'][$i]."\", prix=\"".$_POST['prix'][$i]."\", dispo=\"".$_POST['dispo'][$i]."\", ordre=\"".$_POST['ordre'][$i]."\",couleur = \"".$liste_couleur[$i]."\" WHERE id_produit=\"".$_POST['id'][$i]."\"";
$resultat = mysql_query($sql) or die("Désolé la mise à jour ne fonctionne pas");
$i++;
$x++;
}}


et la source dans un <form>
// =======  LES COULEURS =========
if($ligne_produit['section'] == '6'){
$sql_couleur=mysql_query("SELECT * FROM couleur ORDER BY titre ASC");
while($ligne_couleur=mysql_fetch_array($sql_couleur)){
//CHECK
$thecouleur=explode(',',$ligne_produit['couleur']);
if(in_array($ligne_couleur['id_couleur'], $thecouleur)) { $check = "checked"; } else {$check = "";}
echo "<img width=15 src=../media/couleur/".$ligne_couleur['photo']."> ".$ligne_couleur['titre'].": <input valign=top type=checkbox name=couleur[] value=\"".$ligne_couleur['id_couleur']."\" ".$check."><br>";
}
}


EDIT : Ajout dans LANGAGE dans les balises de code
A voir également:

1 réponse

jordane45 Messages postés 40050 Statut Modérateur 4 758
 
Bonsoir,

Premier reflexe lorsqu'on a un souci... c'est de faire du debogage...
Ajoutes donc un PRINT de ta variable POST et regarde ce qu'elle contient.

Ensuite... il est fortement conseillé, avant toute utilisation de variable, de s'assurer qu'elle existe avec ISSET.

if (isset($_POST['modifier'])){

// Le temps des tests
echo "<br> POST : <br>";
print_r($_POST);


$nbr=count($_POST['id']);
$i=0;
$x=1;

//utilisation de isset pour tester une variable.
$arrCouleur = isset($_POST['couleur'])?$_POST['couleur']:NULL;

 while($x <= $nbr){
  if($arrCouleur ){
   foreach($arrCouleur[$i] as $lescouleurs){
    $liste_couleur[$i] .= "".$lescouleurs.","; 
   }
  }
  
   $sql = "UPDATE produit 
             SET section=\"".$_POST['section'][$i]."\"
       , titre=\"".$_POST['titre'][$i]."\"
    , texte=\"".$_POST['texte'][$i]."\"
    , prix=\"".$_POST['prix'][$i]."\"
    , dispo=\"".$_POST['dispo'][$i]."\"
    , ordre=\"".$_POST['ordre'][$i]."\"
    ,couleur = \"".$liste_couleur[$i]."\" 
  WHERE id_produit=\"".$_POST['id'][$i]."\"";
    $resultat = mysql_query($sql) or die("Désolé la mise à jour ne fonctionne pas");
    $i++;
    $x++;
 }
}



Et enfin... il semble que tu ais oublié les quotes autour de l'attribut name de ton INPUT
<input valign=top type=checkbox name=couleur[] value=\"".$ligne_couleur['id_couleur']."\" ".$check."> 


EDIT : ET des autres... tels que valign ... type.....
<input valign='top' type='checkbox' name='couleur[]' value='".$ligne_couleur['id_couleur']."' ".$check."> 


Cordialement,
Jordane
0