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. oui tu va raison,tu va vois que t'es un pro,
    je te remercie encore.
    Pour problème résolu j'ai vidé mes cookies et donc je peut pu cocher, désoler.
    bonne journée
    1. Contributeur
      Donc je n'avais pas tort, pas d'erreur dans ton code ! :D

      Content que tu aies trouvé ton problème !

      Bon courage pour la suite!

      A bientôt

      PS : Pense à cocher "problème résolu" ;)
      1. Voila j'ai fini par trouver la solution.
        Mon code est juste si jamais sa intéresse quelqu'un,en fait j'avais beau définir dans ma base de données que id n'était pas primary key, elle le resté toujours.
        Merci de votre aide.
        1. bonjour mon probleme n'est toujours pas résolu si quelqu'un a une idée?
          1. c'est sa elle met juste le premier mot dans la table, a ni rien comprendre.
            Je te remercie de m'avoir aidé.
            Meci t'un pro en php!
            Encore merci d'avoir passé du temps a m'aider.
            Et l'important c'est d'avoir essayé des que je trouve je post!
            bonne soirée
            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. <?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
                  Je suis loin d'être un pro du PHP mais on peut toujours essayer ^^

                  Vas-y envoies moi ton code.
                  1. es que je pe te mettre la totalité de mon code pour voir si tu vois une erreur?
                    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. Contributeur
                        C'est quoi qui marche très bien?

                        Ton insert ou juste le $nbmot?
                        1. Oui j'ai fais un echo et cela marche trés bien
                          je te remercie de m'avoir répondu
                          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. 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
                                Le problème doit venir de la concordance entre ton PHP et ta base de données.
                                1. je vien de retester la boucle chez moi elle ne fonctionne pas même sans 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
                                    • 2