Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec un while et SQL

Anonyme
    24 janvier 2017 à 9:57:47

    Bonjour.

    J'ai un while dans lequel je demande d'afficher des informations de ma BDD tant qu'il trouve des résultats. Or, il ne m'affiche que le premier élément trouvé. J'avais pensé à remplacer le while par un foreach, mais il faut alors un tableau, ce qui n'est pas ce que recherche. Pourriez-vous m'aider s'il vous plait?

    Voici mon code:

    $requete = $p_base->query("select id, nomcourt, nomlong from apprentissage"); 
    while($donnees = $requete->fetch())

    En passant, ce n'est pas ma connexion à la BDD qui pose probème, puisque toutes les autres requêtes fonctionnent.

    Je vous remercie d'avance.

    -
    Edité par Anonyme 25 janvier 2017 à 11:50:35

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 janvier 2017 à 10:02:01

      Tu peux nous donner un peu plus de code ? Merci parce que là on voit pas ce que tu veux afficher ni comment ut fais pour l'afficher :)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        24 janvier 2017 à 10:45:02

        Bien sur. Je voudrais qu'un bouton apparaisse avec des données à chaque fois que la requête trouve un ID

        $requete = $p_base->query("select id, nomcourt, nomlong from apprentissage"); 
        	while($donnees = $requete->fetch())
        	{
        		//On entre dans la partie du détail de l'apprentissage
                        //On créé un bouton pour le détail de l'apprentissage
        		echo'<button type="button" onclick="toggle_divapprentissage(this,\'apprentissage\');">'.$donnees['nomcourt'].'/'.$donnees['nomlong'].' ▼</button>';
        }


        Voici mon fichier connexion à la BDD:

        define('DB_SERVER', "localhost"); #on défini le serveur
        define('DB_BASE', "ymtc"); #on défini le nom de la base 
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $p_base = new PDO('mysql:host=' . DB_SERVER . ';dbname=' . DB_BASE, DB_USER, DB_PASSWORD, $pdo_options); #on créé une connexion avec la base de données
        $p_base->exec("Set character set utf8"); #on convertit en utf8

         En ce qui concerne ma BDD, elle ressemble à ca:

        Apprentissage:

        • ID int
        • nomlong varchar
        • nomcourt varchar
        • dateP date
        • datefin date

        -
        Edité par Anonyme 24 janvier 2017 à 10:50:51

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          24 janvier 2017 à 10:53:34

          <?php
          $requete = $p_base->query("select id, nomcourt, nomlong from apprentissage");
              while($donnees = $requete->fetch())
          //Création du bouton
              {
          ?>
          <button type="button" onclick="toggle_divapprentissage(this,\'apprentissage\');"><?php echo $donnees['nomcourt']." / ".$donnees['nomlong']; ?></button>
          <br>   
          <?php     
          } //FIN WHILE
          ?>
          Pour que ce soit plus simple ouvre le php quand tu en as besoin et evites les echo de balise entiere ;)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            24 janvier 2017 à 11:37:54

            Le soucis du coup, c'est que mon bouton ne marche plus. Il doit permettre d'afficher ou de cacher un <div>.
            Je vous met l'intégralité du code pour que vous compreniez mieux:
            <?php
            #on fait la requête d'affichage
            				$requete = $p_base->query("select id, nomcourt, nomlong from apprentissage"); 
            				while($donnees = $requete->fetch())
            				{
            					//On entre dans la partie du détail de l'apprentissage
            					//echo $donnees['nomcourt'].'/'.$donnees['nomlong'];
            					//On créé un bouton pour le détail de l'apprentissage
            					echo'<button type="button" onclick="toggle_divapprentissage(this,\'apprentissage\');">'.$donnees['nomcourt'].'/'.$donnees['nomlong'].' ▼</button>';
            					echo'<div id="apprentissage" style="display:none;">';
            
            						#on créé un tableau pour le détail de l'apprentissage
            						echo '<form method="post"><table>';
            						#on fait la requête d'affichage
            						$requete = $p_base->prepare("select apprentissage.nomlong, apprentissage.nomcourt, apprentissage.dateP, apprentissage.datefin, taches.description, taches.datefint, taches.avancement, taches.code, source.url, code.libelle from apprentissage, 
            						taches, source, code where apprentissage.id=source.idapprentissage and apprentissage.id=taches.idapprentissage and apprentissage.id=code.idapprentissage and apprentissage.id=:id");
            						$requete->execute(array('id'=> $donnees['id']));
            						if($donnees = $requete->fetch()) {
            							
            							// Ligne "Nom de l'apprentissage"
            							// Ligne "ID de l'apprentissage"
            							// Ligne "Date Post-it de l'apprentissage"
            							echo '<tr>';
            							echo '<td><label for="dateP">DateP :</label></td>'; 
            							echo '<td><input type="text" name="dateP" id="dateP" value="' . $donnees['dateP'] . '"></td>'; 
            							echo "</tr>";
            							
            							// Ligne "Date de fin de l'apprentissage"
            							// Ligne "Source de l'apprentissage"
            							// Ligne "Code de l'apprentissage"
            							// On créé un menu déroulant pour les mails
            							echo '<tr align="center">';
            							echo '<td>Envoyer mail?</td>';
            							echo '<td><select name="envoyer_mail">';
            							echo '<option value="mail1">Début de tâche</option>';
            							echo '<option value="mail2">Dépassement de tâche</option>';
            							echo '<option value="mail3">Début et dépassement de tâche</option>';
            							echo '<option value="mail4">Jamais</option>';
            							echo '</select></td>';
            							echo '</tr>';
            							
            							echo '</table>';//On ferme le tableau du détail de l'apprentissage
            							
            							//On entre dans la partie des thèmes
            							echo '<button type="button" onclick="toggle_div(this,\'tache\');">Tâches ▼</button>';//On ajoute un bouton pour les thèmes
            							echo '<div id="tache" style="display:none;">';
            							
            								echo '<form method="post"><table>'."\n";//On ouvre un autre tableau
            								// Ligne "Nom de la tâche"
            								echo '<tr>';
            								echo '<td><label for="nom">Nom :</label></td>'; 
            								echo '<td><input type="text" name="nom" id="nom" value=" '. $donnees['description'] . '"></td>'; 
            								echo "</tr>";
            								
            								// Ligne "ID de la tâche"
            								// Ligne "Date de fin de la tâche"
            								// Ligne "Avancement de la tâche"
            							echo '</table>';//On ferme le tableau des thèmes
            							echo'</div>';//On quite la partie des thèmes
            							
            						}
            						else{//Si la requête ne marche pas ou autres
            							die("Opération Interdite!") ;
            						}
            					$requete->closeCursor();//On ferme la requête du détail de l'apprentissage
            ?>
            Et concernant le PHP, j'ai un cahier des charges à respecter, donc je dois tout mettre en php.

            -
            Edité par Anonyme 24 janvier 2017 à 11:39:25

            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2017 à 11:55:36

              Alors je pense qu'il est logique que ça ne fonctionne pas.

              En effet, tu affectes dynamiquement une action au bouton, mais jamais tu dois avoir un script JS quelque part qui définie ces actions. Est ce que chaque cas de figure est codé ?

              • Partager sur Facebook
              • Partager sur Twitter
              Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
              Anonyme
                24 janvier 2017 à 12:01:27

                Mon bouton appelle bien une fonction en JS qui est exécutée. Elle se trouve sur un autre fichier et est bien appelée sur mon fichier php puisque tous les boutons marchent. C'est pour ça que je comprends pas le problème

                Voici mon script JS:

                function toggle_divapprentissage(bouton, id) { // On déclare la fonction toggle_div qui prend en param le bouton et un id
                	var div = document.getElementById(id); // On récupère le div ciblé grâce à l'id
                	if(div.style.display=="none") { // Si le div est masqué...
                		div.style.display = "block"; // ... on l'affiche...
                		bouton.innerHTML = "Masquer les détails ▲"; // ... et on change le contenu du bouton.
                	} else { // S'il est visible...
                		div.style.display = "none"; // ... on le masque...
                		bouton.innerHTML = "Détails de l'apprentissage ▼"; // ... et on change le contenu du bouton.
                	}
                }



                -
                Edité par Anonyme 24 janvier 2017 à 12:02:36

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  24 janvier 2017 à 16:27:59

                  Vous avez trouvé ce qui cloche?

                  J'ai toujours pas réussi à débuger ce code.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2017 à 16:39:08

                    Il faudrait incrémenter les id de tes DIV : elles ont toutes la même.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 janvier 2017 à 17:20:07

                      bonjour,

                      ton probleme viens de tes boucle imbriquées et de ta variable $donnees et $requete

                      j'ai suppr ce qui ne m'interesssait pas

                      <?php
                      $requete = $p_base->query("select id, nomcourt, nomlong from apprentissage");
                      while($donnees = $requete->fetch()){
                       //...
                           #on fait la requête d'affichage
                           $requete = $p_base->prepare("select // blabla ta requete et au passsage revoie coment on fait des jointure parce que la c'est vraiment old school xd
                           );
                           $requete->execute(array('id'=> $donnees['id']));
                           if($donnees = $requete->fetch()) {

                      1ere requete plusieurs résultat

                      2eme requete préparé un seul résultat

                      quand tu repasse dans ta boucle $requete->fetch() n'a plus de ligne de résultat a lire vu qu'il essaie de lire le $requete de ta requete préparé. Donc tu n'a qu'un ligne qui s'affiche CQFD

                      Modifie le nom de $donnees et $requete aprés ton prepare et cela devrait marcher

                      Et au passage essaie de mettre des dont qui ont un sens par exemple

                      Le 1er $requete =>sel_all_appr (selection de tout les appretissage)

                      Le 1er $donnees =>arr_one_appr(tableau avec une ligne de sel_all_appr)

                      ca t'évite de te planté avec le contenu de tes variable parce que si tu met des $requete, $donnees partout on si perd vite



                      • Partager sur Facebook
                      • Partager sur Twitter
                      "Il est hélas devenu évident aujourd’hui que notre technologie a dépassé notre humanité"  A.E.
                      Anonyme
                        24 janvier 2017 à 20:24:03

                        Mais du coup ça me plante tout le code!

                        Pourrais-vous me montrer comment vous le modifiez sur mon code?

                        J'ai testé morceau par morceau pour chercher où commence l'erreur.

                        Elle se trouve dans la partie suivante, mais je la trouve pas.

                        sauriez-vous où elle est?

                        <?php
                        //On entre dans le niveau B
                        			echo '<button type="button" onclick="toggle_divb(this,\'niveaub\');">Je veux gérer mes apprentissages ▼</button>';
                        			echo '<div id="niveaub" style="display:none;">';
                        			
                        				//echo '<h3>Liste des apprentissages</h3>';
                        				#on fait la requête d'affichage
                        				$sel_all_appr = $p_base->query("select distinct id, nomcourt, nomlong from apprentissage"); 
                        				while($arr_one_appr = $sel_all_appr->fetch())
                        				{
                        					//On entre dans la partie du détail de l'apprentissage
                        					//echo $donnees['nomcourt'].'/'.$donnees['nomlong'];
                        					//On créé un bouton pour le détail de l'apprentissage
                        					echo'<button type="button" onclick="toggle_divapprentissage(this,\'apprentissage\');">'.$arr_one_appr['nomcourt'].'/'.$arr_one_appr['nomlong'].' ▼</button>';
                        					echo'<div id="apprentissage" style="display:none;">';
                        
                        						#on créé un tableau pour le détail de l'apprentissage
                        						echo '<form method="post"><table>';
                        						#on fait la requête d'affichage
                        						$requete = $p_base->prepare("select apprentissage.nomlong, apprentissage.nomcourt, apprentissage.dateP, apprentissage.datefin, taches.description, taches.datefint, taches.avancement, taches.code, source.url, code.libelle from apprentissage, 
                        						taches, source, code where apprentissage.id=source.idapprentissage and apprentissage.id=taches.idapprentissage and apprentissage.id=code.idapprentissage and apprentissage.id=:id");
                        						$requete->execute(array('id'=> $arr_one_appr['id']));
                        						if($donnees = $requete->fetch()) {
                        							
                        							// Ligne "Nom de l'apprentissage"
                        							echo '<tr>';
                        							echo '<td><label for="nomlong">Nom :</label></td>'; 
                        							echo '<td><input type="text" name="nomlong" id="nom" value="' . $donnees['nomlong'] . '"></td>'; 
                        							echo "</tr>";
                        						}
                        						else{//Si la requête ne marche pas ou autres
                        							die("Opération Interdite!") ;
                        						}
                        					$requete->closeCursor();//On ferme la requête du détail de l'apprentissage
                        					echo'</div>';//On quitte la partie du détail de l'apprentissage
                        				}
                        				$sel_all_appr->closeCursor();//On ferme la requête des apprentissages
                        			echo'</div>'.'<br/>';//On quitte le niveau B
                        			
                        			//On passe au niveau C
                        			echo '<button type="button" onclick="toggle_divc(this,\'niveauc\');">Je veux gérer ma connaissance de moi ▼</button>';
                        			echo '<div id="niveauc" style="display:none;">';
                        			echo 'Hello';
                        			echo '</div>'.'<br/>';
                        			
                        			//On passe au niveau D
                        			echo '<button type="button" onclick="toggle_divd(this,\'niveaud\');">Je veux gérer mes objectifs ▼</button>';
                        			echo '<div id="niveaud" style="display:none;">';
                        			echo 'World';
                        			echo '</div>'.'<br/>';
                        ?>

                        -
                        Edité par Anonyme 24 janvier 2017 à 20:33:20

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          25 janvier 2017 à 9:27:17

                          Quelqu'un aurait-il trouvé?

                          J'ai continué mes recherches hier soir, mais ai pas réussi à résoudre le soucis.

                          Lorsque je n'ai que ceci, tout marche parfaitement:

                          <?php
                          //On entre dans le niveau B
                                      echo '<button type="button" onclick="toggle_divb(this,\'niveaub\');">Je veux gérer mes apprentissages ▼</button>';
                                      echo '<div id="niveaub" style="display:none;">';
                                       
                                          //echo '<h3>Liste des apprentissages</h3>';
                                          #on fait la requête d'affichage
                                          $sel_all_appr = $p_base->query("select distinct id, nomcourt, nomlong from apprentissage");
                                          while($arr_one_appr = $sel_all_appr->fetch())
                                          {
                                              //On entre dans la partie du détail de l'apprentissage
                                              //echo $donnees['nomcourt'].'/'.$donnees['nomlong'];
                                              //On créé un bouton pour le détail de l'apprentissage
                                              echo'<button type="button" onclick="toggle_divapprentissage(this,\'apprentissage\');">'.$arr_one_appr['nomcourt'].'/'.$arr_one_appr['nomlong'].' ▼</button>';
                                              echo'<div id="apprentissage" style="display:none;">';
                                                        CODE PROBLEMATIQUE ICI
                          
                                              echo'</div>';//On quitte la partie du détail de l'apprentissage
                                          }
                                          $sel_all_appr->closeCursor();//On ferme la requête des apprentissages
                                      echo'</div>'.'<br/>';//On quitte le niveau B
                                       
                                      //On passe au niveau C
                                      echo '<button type="button" onclick="toggle_divc(this,\'niveauc\');">Je veux gérer ma connaissance de moi ▼</button>';
                                      echo '<div id="niveauc" style="display:none;">';
                                      echo 'Hello';
                                      echo '</div>'.'<br/>';
                                       
                                      //On passe au niveau D
                                      echo '<button type="button" onclick="toggle_divd(this,\'niveaud\');">Je veux gérer mes objectifs ▼</button>';
                                      echo '<div id="niveaud" style="display:none;">';
                                      echo 'World';
                                      echo '</div>'.'<br/>';
                          ?>


                          En revanche, dès que j'ajoute le code problématique, tout est cassé:

                          #on créé un tableau pour le détail de l'apprentissage
                          echo '<form method="post"><table>';
                              #on fait la requête d'affichage
                              $requete = $p_base->prepare("select apprentissage.nomlong, apprentissage.nomcourt, apprentissage.dateP, apprentissage.datefin, taches.description, taches.datefint, taches.avancement, taches.code, source.url, code.libelle from apprentissage, taches, source, code where apprentissage.id=source.idapprentissage and apprentissage.id=taches.idapprentissage and apprentissage.id=code.idapprentissage and apprentissage.id=:id");
                              $requete->execute(array('id'=> $arr_one_appr['id']));
                              if($donnees = $requete->fetch()) {
                                                       
                                   // Ligne "Nom de l'apprentissage"
                                   echo '<tr>';
                                   echo '<td><label for="nomlong">Nom :</label></td>';
                                   echo '<td><input type="text" name="nomlong" id="nom" value="' . $donnees['nomlong'] . '"></td>';
                                   echo "</tr>";
                              }
                            echo '</table>';else{//Si la requête ne marche pas ou autres die("Opération Interdite!") ; } $requete->closeCursor();//On ferme la requête du détail de l'apprentissage


                          Quelqu'un voit ce qui cloche?

                          J'ai continué à chercher, et j'ai un doute au niveau de cette ligne:

                          echo '<form method="post"><table>';

                          Est-ce qu'il faut mettre </table> et </form>, ou juste </table>?

                          -
                          Edité par Anonyme 25 janvier 2017 à 11:46:15

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème avec un while et SQL

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown