Page 1 sur 1

Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 18:42
par cLESE02
Bonjour;

J'ai fait une boucle foreach pour récupérer un id et pouvoir faire un insert dans ma table à chaque résultat, ça marche sauf que l'id que je récupère reste celui du premier résultat qui passe dans la boucle et je ne vois pas pourquoi.

Le $login je le récupère plus haut dans la page, il n'y a que $id_secteur que je récupère dans le foreach.

Le code:
//récup la valeurs des checkbox cochées
 
$checksecteur = implode(' - ', $_POST['options']);
 
  
 
//explode $checksecteur pour récupérer les secteurs
 
$splitsecteur = explode("-", $checksecteur);
 
//boucle pour chaque résultat de $splitsecteur
 
foreach ($splitsecteur as $rows)
 
     {
 
       $req1=$connexion->query("select * from secteuractivite where libelle_secteur='$rows'"); 
 
       while($ligne=$req1->fetch()) //pour chaque ligne de splitsecteur récupère les infos du secteur
 
       {
 
           $id_secteur=$ligne['id_secteur']; // donne l'id du secteur
 
       }
 
       //insert l'id du secteur, le libelle du secteur ainsi que l'id de l'établissement
 
       $req=$connexion->query("INSERT INTO secteur_etab(id_secteur,id_etab,libelle_secteur) VALUES('$id_secteur','$login','$rows')");
 
     }
extrait de la BDD:

http://img4.hostingpics.net/pics/910738Capture.png

On voit que l'insert fonctionne mais que l'id du secteur reste celui du premier résultat, donc voilà si quelqu'un à une idée de mon erreur ou s'il y a plus simple pour récupérer les valeurs de plusieurs checkbox je suis prenneur :)

Merci :)

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 19:46
par xTG
Tout à fait normal si tu ne mets pas ta requête dans la boucle. ;)

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 19:52
par cLESE02
Comme ça?
foreach ($splitsecteur as $rows) 
     {
       $req1=$connexion->query("select * from secteuractivite where libelle_secteur='$rows';");  
       while($ligne=$req1->fetch()) //pour chaque ligne de splitsecteur récupère les infos du secteur 
       {
           $id_secteur=$ligne['id_secteur']; // donne l'id du secteur
           //insert l'id du secteur, le libelle du secteur ainsi que l'id de l'établissement
           $req=$connexion->exec("INSERT INTO secteur_etab(id_secteur,id_etab,libelle_secteur) VALUES('$id_secteur','$login','$rows');");
       }
      }
Quand je la mets dans la boucle ça m'enregistre que le premier et pas les autres pour le coup

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 20:11
par xTG
foreach ($splitsecteur as $rows)
     {
       $req1=$connexion->query("select * from secteuractivite where libelle_secteur='$rows';");  
       while($ligne=$req1->fetch()) //pour chaque ligne de splitsecteur récupère les infos du secteur
       {
           $id_secteur=$ligne['id_secteur']; // donne l'id du secteur
           echo $id_secteur . '<br />';
           //insert l'id du secteur, le libelle du secteur ainsi que l'id de l'établissement
           $req=$connexion->exec("INSERT INTO secteur_etab(id_secteur,id_etab,libelle_secteur) VALUES('$id_secteur','$login','$rows');");
       }
      }
Commences par cela pour être sûr du retour de ta requête.

Ensuite pour optimiser un peu tout ça tu peux ne retourner dans la première requête que les colonnes qui t'intéresses au lieu de toutes les colonnes (*).
Puis pour ces deux requêtes utiliser une requête préparée, c'est le cas typique de leur utilisation.

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 20:14
par cLESE02
J'ai mit un écho comme tu as dit et la requête retourne l'id de la première checkbox que j'ai cochée

Oui je vais optimiser après mais dans un premier temps j'essaye de faire en sorte que ça marche^^ :)

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 20:53
par xTG
J'ai mit un écho comme tu as dit et la requête retourne l'id de la première checkbox que j'ai cochée
Le code fait donc strictement ce que tu lui demandes de faire.
Si tu veux que ta requête renvoie plus d'enregistrement... Bah il faut travailler la clause WHERE pour qu'elle retourne ce que tu souhaites. ;)

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 21:04
par cLESE02
En faite la requête fait exactement ce que je veux, mais c'est la boucle j'ai pas du faire ça correctement, car pour chaque résultat il devrait y avoir un enregistrement c'est pour ça que j'ai mis foreach mais je sais pas ce que je devrais mettre.. :/

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 21:06
par xTG
Je crois comprendre donc que c'est $splitsecteur qui ne contient pas ce que tu t'attendais à ce qu'il contienne ?
Elle vient d'où cette variable ? Et que souhaitais-tu dedans ?

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 03 juin 2014, 21:10
par cLESE02
En faite le $splitsecteur est un tableau qui contient plusieurs chaine de caractère, et je comptais faire un enregistrement par ligne du tableau grâce au foreach

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 04 juin 2014, 08:41
par xTG
Un var_dump de cette variable te renvoie-t-elle ce que tu attends ?

Re: Problème boucle foreach et enregistrement dans BDD

Posté : 05 juin 2014, 22:38
par cLESE02
Oui c'est bon j'ai réussi à résoudre ce problème et tout fonctionne bien maintenant!

Merci :)