Probleme boucle

Bonjour,

j'ai fais une requete insert into dans une boucle mais elle ne s'effectue qu'une fois es-normal?
voici mon code
$z=0;
while($z<$nbmot){

mysql_query('INSERT INTO mot VALUES("'.$mot[$z].'","'.$donnees['id'].'")'); // Requête
$z++;
}
merci d'avance
Configuration: Windows XP
Internet Explorer 6.0

25 réponses

Résumé de la discussion

Le fil porte sur une requête INSERT INTO exécutée dans une boucle PHP qui ne s’effectue apparemment qu’une seule fois, malgré une structure while censée répéter l’insertion pour chaque élément. Les réponses soulignent la nécessité de vérifier le nombre de passages et les variables liées ($nbmot, $mot[$z], $donnees['id']), de dépanner avec des échos ou mysql_error et d’arrêter les suppositions. Des explications évoquées incluent que le test du $nbmot ou de la taille du tableau peut être erroné, et que des vérifications concrètes permettent de confirmer si la boucle parcourt bien toutes les entrées.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,

    Tu n'as qu'une entrée qui s'ajoute?

    Je ne vois pas d'erreur dans ton code..

    $nbmot est égal à combien?

    EDIT : Test ta boucle avec un :

    echo $z dans la boucle ...
    1. nb depend d'une nombres de mot tapez dans un champ texte mais sa sa fonctionne treés bien est ui il n'y a qu'une entrée qui s'insert c'est ce que je ne comprend pas
      1. Contributeur
        Apparement pas de problème dans la requête puisqu'elle s'execute bien la première fois ...

        Et je ne vois pas de soucis dans la boucle ...

        Je suis désolé mais là je sèche ... Ca devrait marcher :s
        1. merci kan même esque sa peut etre du a met deux boucle imbriqué ?
          voici le code:
          $reponse2= mysql_query('select id from faq where question="'.$question.'"') or die(mysql_error());
          while ($donnees = mysql_fetch_array($reponse2) )
          {
          $z=0;
          while($z<$nbmot){
          echo $z;
          mysql_query('INSERT INTO mot VALUES("'.$mot[$z].'","'.$donnees['id'].'")'); // Requête
          $z=$z+1;
          echo $z;
          echo $mot[$z];
          }
          }
          1. Contributeur
            Oui le problème doit venir de là!

            Je viens de tester ta boucle d'insert et je n'ai pas de soucis!

            Je me penche sur l'autre ^^
            1. Contributeur
              Bon je viens de tester tes 2boucles imbriquées et elles fonctionnent!

              J'ai bien eu l'insert dans la table le bon nombre de fois.

              Je ne vois pas d'où peut venir ton problème ...

              EDIT : ta boucle de ta requête d'insert se fera autant de fois que tu as d'id dans ton SELECT, c'est ce que tu veux?
              1. je vien de retester la boucle chez moi elle ne fonctionne pas même sans l'autre
                1. Contributeur
                  Le problème doit venir de la concordance entre ton PHP et ta base de données.
                  1. la premiere boucle s'effectue tant de fois que ce qui a était rentré dans le champ existe
                    la deuxième dois s'effectuer autant de fois qu'il y a de mot dans le champ de saisie
                    1. Contributeur
                      Et bien pour moi les deux boucles fonctionnent très bien.

                      Tu as testé le $nbmot que tu récupères?

                      C'est la seule chose que j'ai qui diffère avec ton code (moi pour le test je l'ai définie manuellement à 5 )
                      1. Oui j'ai fais un echo et cela marche trés bien
                        je te remercie de m'avoir répondu
                        1. Contributeur
                          C'est quoi qui marche très bien?

                          Ton insert ou juste le $nbmot?
                          1. Contributeur
                            Grâce à tes echo, tu as vérifié que ta boucle se fait bien le bon nombre de fois?

                            Je ne comprends vraiment pas pourquoi ce code fonctionne pour moi et pas pour toi ...
                            1. es que je pe te mettre la totalité de mon code pour voir si tu vois une erreur?
                              1. Contributeur
                                Je suis loin d'être un pro du PHP mais on peut toujours essayer ^^

                                Vas-y envoies moi ton code.
                                1. <?php

                                  if ((isset($_POST['nom']))&&(isset($_POST['liste']))&&(isset($_POST['mail']))) // Si la variable existe
                                  {

                                  $question =isset($_POST['quest']) ? $_POST['quest'] : '';
                                  $question=addslashes($question);
                                  $nom =$_POST['nom'];
                                  $nom=addslashes($nom);
                                  $theme=$_POST['liste'];
                                  $mail=$_POST['mail'];
                                  $mail=addslashes($mail);
                                  $mot=split(" ",$question);
                                  $nbmot = count($mot);

                                  }
                                  else // La variable n'existe pas encore
                                  {
                                  $question = ""; // On crée des variables vide
                                  $nom = "";
                                  $mail="";
                                  }

                                  if (($question !="")&&($nom != "")&&($mail !="")) // Si quelque chose est saisie
                                  {
                                  // On execute les requetes
                                  mysql_connect("localhost", "identi", "mtpasse"); // Connexion à MySQL
                                  mysql_select_db("bdt"); // Sélection de la base intranet

                                  $reponse = mysql_query('INSERT INTO faq VALUES("","'.$nom.'","'.$mail.'","","'.$question.'"," ","'.$theme.'","'.$question.'","") ') or die(mysql_error()); // Requête SQL
                                  echo'<p class="Style15">Votre question vient d\'être ajoutée. </p>';

                                  $reponse2= mysql_query('select id from faq where question="'.$question.'"') or die(mysql_error());
                                  while ($donnees = mysql_fetch_array($reponse2) )
                                  {
                                  $z=0;
                                  while($z<$nbmot){
                                  echo 'le nomre de mot est '.$nbmot;
                                  mysql_query('INSERT INTO mot VALUES("'.$mot[$z].'","'.$donnees['id'].'")'); // Requête
                                  $z++;
                                  }
                                  }mysql_close(); // Déconnexion de MySQL
                                  }
                                  1. Contributeur
                                    C'est bien ce que je disais, je suis loin d'être un pro du PHP :s

                                    Je n'ai pas trouvé d'erreur dans ton code..

                                    Essaie dans une page de test, de faire ta requete insert plusieurs fois de suite.

                                    Mais la première fois, la requête s'execute comme tu veux?

                                    Elle met le 1er mot dans ta base?

                                    Je suis désolé mais là je ne vois pas :s
                                    • 1
                                    • 2