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

Fermé
Nomadique Messages postés 6 Date d'inscription vendredi 5 décembre 2014 Statut Membre Dernière intervention 11 juillet 2017 - Modifié par jordane45 le 17/02/2015 à 23:37
jordane45 Messages postés 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 - 17 févr. 2015 à 23:46
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 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 4 735
Modifié par jordane45 le 17/02/2015 à 23:47
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