Tester l'existence des données dans sql javascript

Bonjour,
j'ai un formulaire qui contient 4 champs : année , mois , V1 et V2 (valeurs), et pour les valeurs je le rentre selon l'année , je veux faire un test javascript quand je clique sur l'année s'il y a des données pour cette année il va m'afficher le formulaire remplit si il y a pas des données il va m'afficher le formulaire vide , quelqu'un peut m'aider , merci d'avance.

60 réponses

Résumé de la discussion

Le problème porte sur un formulaire à quatre champs (année, mois, V1 et V2) où un test JavaScript doit charger les données existantes pour une année et afficher le formulaire pré-rempli, sinon vide. Plusieurs réponses préconisent d’utiliser jQuery et AJAX: déclencher un appel PHP via GET lorsque l’année change, recevoir des données au format JSON et pré-remplir les champs du formulaire selon mois disponibles. En pratique, il est suggéré d’itérer sur les éléments retournés et d’assigner les valeurs aux champs identifiés par mois afin que V1 et V2 reflètent les données existantes. Par ailleurs, certaines contributions recommandent d’afficher la requête SQL côté serveur lors du débogage (echo $sql) pour vérifier que l’année utilisée correspond bien à l’entrée attendue.

Bobot (l’IA à votre service)
  1. est ce que vous avez reçu mon mail
    1. oui j'en ai envoyé un autre en réponse.
      attention il faut copier le fichier dbconnect.php à la racine du dossier, j'ai oublié de le mettre
  2. fais moi une réponse avec un copier coller de chacun des 3 fichiers s'il te plait

    Enjoy!
    1. je voudrais votre adresse mail comme ça je vous envoie tous
    2. ebertin@bieng.fr
    3. je viens de monter une base de données sur mon ordi avec la même structure, requête en mysqli etc.. ça fonctionne chez moi :(
  3. ça change rien pour moi l'année toujours in définie et si je clique sur une année qu'a déjà de valeurs il me laisse toujours dans la même page sans rien changer :(:( :( ça va me rendre folle :(:(
    1. j'ai supprimé les echo et les print_r , j'ai remplacé la ligne :
      //$sql1 = 'SELECT * FROM parmetres WHERE annee = 1994'; par
      $sql1 = "SELECT * FROM parmetres WHERE annee = '".$_GET['annee']."'";
      alors il a rien fait comme teste il m'a affiché le même erreur annee indifinie :(
      et pour le teste je veux si une année sélectionné a des valeurs dans la BD il m'affiche le formulaire remplit c'à adire le teste avec la partie ajax il vont récupérer les valeur si il y a pas de valeurs il va m'afficher le formulaire vide , pour le console et network il affiche l'année sélectionnée ça marche ça
      1. c'est pas normal que ça ne fonctionne pas, j'aimerai bien que tu m'envoies ton code par mail que je puisse le voir bien proprement
      2. donnez moi votre adresse mail comme ça je le vous envoie
    2. et pour finir, dans le fichier parametre.php il faut supprimer tous les "echo" et les print_r à part echo json_encode($myArray);
      1. j'ai supprimé les echo et les print_r , j'ai remplacé la ligne :
        //$sql1 = 'SELECT * FROM parmetres WHERE annee = 1994'; par
        $sql1 = "SELECT * FROM parmetres WHERE annee = '".$_GET['annee']."'";
        alors il a rien fait comme teste il m'a affiché le même erreur annee indifinie :(
      2. par contre est ce que dans les codes qu'on va le faire si l'utilisateur il va choisir une année dans laquelle il existe des valeurs dans la BD on va avoir le formulaire comme le mien juste il doit être rempli avec ses valeurs selon l'année??
      3. met ça :

        $sql1 = 'SELECT * FROM parametre WHERE annee = '.$_GET['annee'];

        pour la deuxième question oui, si l'utilisateur choisit une année pour laquelle il y a des valeurs ça va juste remplir les inputs avec les valeurs de la base de données
    3. une dernière modification: dans ton fichier principal (index.php ?) tu vas devoir changer les id sur deux lignes:
      echo '<input type="text" name="Precipitation['.$n.']"  id="Precipitation'.$n.'"  />';  
      
      echo '<input type="text" name="Evap_eau['.$n.']" id= "Evap_eau'.$n.'" value="" />'; 
      

      1. en gros il faut supprimer les [ ] sur les id, tu peux les laisser sur le name si tu veux.
        ligne 87 et 90 normalement
      2. oui j'ai tout modifié mais ça change rien si j'ai clique sur l'année il fait pas le test , et il me renvoi pas un formulaire remplit :(
      3. j'ai ajouté une autre réponse en dessous. normalement si tu prends l'année 1994 ça devrait fonctionner
      4. après dis moi ce que tu vois dans la console debug de chrome dans l'onglet "console" et dans l'onglet "network" sur le fichier parametre.php
    4. il va falloir faire quelques modifications:
      pour le fichier test.js tu as juste à le remplacer intégralement par ça:

      
      $(function() {
      
      	$("#annee").change(function() {
      		console.log($('#annee').val());
      		$.getJSON('transactions/parametre.php', {
      			annee: $("#annee").val()
      		}, function(data)
      		{
      		   if(data)
      		   {
      				for(var i in data)
      				{
      					console.log("mois : "+data[i]['mois']+" - precipitation :"+data[i]['Precipitation']);
      					$("#Precipitation"+data[i]['mois']).val(data[i]['Precipitation']);
      					$("#Evap_eau"+data[i]['mois']).val(data[i]['Evap_eau']);
      				
      				}
      			
      		   }
      		   else
      			  return false;
      		});
      	});
      });
      
      
      

      1. il y a une erreur attention ! il faut mettre mois avec un M soit Mois partout sinon ça ne fonctionnera pas!
        $("#Precipitation"+data[i]['Mois']).val(data[i]['Precipitation']);
        $("#Evap_eau"+data[i]['Mois']).val(data[i]['Evap_eau']);
        
    5. ahhhhh cool! attends je vérifie quelque chose rapidement je te dis ce que tu vas devoir modifier

      1. d'accord je vous attends :)
    6. c'est bon ça marche pour l'année 1994 enfin voilà
      Array ( ) SELECT * FROM parmetres WHERE annee = 1994[{"annee":"1994","Mois":"1","Precipitation":"1","Evap_eau":"1"},{"annee":"1994","Mois":"2","Precipitation":"1","Evap_eau":"7"},{"annee":"1994","Mois":"3","Precipitation":"2","Evap_eau":"3"},{"annee":"1994","Mois":"4","Precipitation":"4","Evap_eau":"4"},{"annee":"1994","Mois":"5","Precipitation":"5","Evap_eau":"5"},{"annee":"1994","Mois":"6","Precipitation":"6","Evap_eau":"6"},{"annee":"1994","Mois":"7","Precipitation":"7","Evap_eau":"7"},{"annee":"1994","Mois":"8","Precipitation":"8","Evap_eau":"8"},{"annee":"1994","Mois":"9","Precipitation":"9","Evap_eau":"9"},{"annee":"1994","Mois":"10","Precipitation":"10","Evap_eau":"10"},{"annee":"1994","Mois":"11","Precipitation":"11","Evap_eau":"11"},{"annee":"1994","Mois":"12","Precipitation":"12","Evap_eau":"12"}],
      là on peut continuer
      1. c'est parfait
        on va pouvoir bientôt finir je pense je te fais un message pour ce qu'il te reste à modifier un dernier effort
      2. j'ai pas compris il faut que je modifie quoi ? par contre est ce que dans les codes qu'on va le faire si l'utilisateur il va choisir une année dans laquelle il existe des valeurs dans la BD on va avoir le formulaire comme le mien juste il doit être rempli avec ses valeurs selon l'année ?
    7. j'arrive pas à comprendre pour chez moi ça marche pas pour il ne prend pas les valeurs insérées en considération :(:(
      1. par contre j'ai essayé d'exécuter la requête dans sql il m'a affiché :
        MySQL a retourné un résultat vide (aucune ligne) et il prend pas en fait les valeurs qui sont dans la bases il prend juste la première ligne et si je le fasse il va afficher rien même dans la page web .
        1. de quel type est le champ annee? int? float? varchar?
        2. l'annee de type Year , en fait j'ai presque 3 ou bien 4 année qui ont des valeurs dans BD mais la requête ne le prends pas en considération c'est pour ça il m'affiche le mois 0 , même si j'efface la 1ére ligne de BD il va afficher tout en 0 . :(
        3. et si tu fais SELECT * FROM paramatre WHERE annee = 1993

          sans les guillemets
        4. même problème :(:(:(:(
        5. je viens de faire un test chez moi en créant une base de données, directement dans phpmyadmin quand je fais
          SELECT * FROM parametre WHERE annee = 1993
          ça fonctionne

          SELECT * FROM 'parametre' WHERE annee = "1993"

          ça fonctionne aussi
      2. c'est bizarre là ça fonctionne O_o'
        par contre une précision pourquoi il y a un mois à 0? c'est pas de 1 à 12 les mois?
        peux tu me copier coller l'ensemble de ton fichier parametre.php ici que je vois bien tout?
        merci
        1. il m'a affiché ça sans erreur :
          Array ( ) SELECT * FROM parmetres WHERE annee = "1993"[{"annee":"1993","Mois":"0","Precipitation":"0","Evap_eau":"0"},{"annee":"1993","Mois":"6","Precipitation":"2","Evap_eau":"2"}]
          1. me revoila.
            Bon si on fait un select * from parametre WHERE annee = "1993" directement dans phpmyadmin ça donne quoi?

            ajoute aussi un echo $sql; juste après la déclaration de la variable comme ça:

            $sql = 'SELECT * FROM parametre WHERE annee = "'.$_GET['annee'].'"';
            echo "la requête est: - "
            echo $sql;
            


            il devrait y avoir dans le network de chrome la requête qui s'affiche
            1. d'accord je vous attends et au même temps je suis entrain de chercher d'ou vient l'erreur à tout de suite :)
              1. ça change rien et aussi pour toutes les années il m'affiche les même valeurs même si l'année en question elle a pas des valeurs dans la base sql :
                {"values":[{"annee":"0","Mois":"0","Precipitation":"1","Evap_eau":"0"},{"annee":"0","Mois":"6","Precipitation":"6","Evap_eau":"6"},{"annee":"0","Mois":"13","Precipitation":"2","Evap_eau":"13"}]}
                j'arrive pas à comprendre pourquoi :(
                1. avec le nouveau code php que je t'ai donné tu ne devrais pas avoir ça comme retour ("values":[ ne devrait plus être là).
                  ajoute un print_r($myArray) juste avant le echo json_encode($myArray); et dit moi ce que ça donne
                2. tiens et tu peux remplacer la ligne $sql = ...... ; par ça :
                  $sql = 'SELECT * FROM parametre WHERE annee = "'.$_GET['annee'].'"';
                  
                3. rassure toi on touche au but, une fois que ça fonctionnera on sera bien, chez moi tout fonctionne déjà. il manque plus que la requête se fasse bien à la bdd.
                  Je vais fumer une cigarette je reviens dans 10/15 minutes. essaie de trouver une solution ^^
                4. il m'a afficher ça
                  Array ( [0] => Array ( [annee] => 0 [Mois] => 0 [Precipitation] => 1 [Evap_eau] => 0 ) [1] => Array ( [annee] => 0 [Mois] => 6 [Precipitation] => 6 [Evap_eau] => 6 ) [2] => Array ( [annee] => 0 [Mois] => 13 [Precipitation] => 2 [Evap_eau] => 13 ) ) [{"annee":"0","Mois":"0","Precipitation":"1","Evap_eau":"0"},{"annee":"0","Mois":"6","Precipitation":"6","Evap_eau":"6"},{"annee":"0","Mois":"13","Precipitation":"2","Evap_eau":"13"}]
                  pour toute les années , par contre dans le network il affiche parametre.php=> année selectionée
              2. c'est étonnant, parcequ'il fait quand même la requête. il faudrait savoir à quelle variable "annee" il fait référence.

                sinon en attendant tu peux aussi modifier le fichier test.js comme ça:

                
                $(function() {
                
                	$("#annee").change(function() {
                		console.log($('#annee').val());
                		$.getJSON('transactions/parametre.php', {
                			annee: $("#annee").val()
                		}, function(data)
                		{
                		   if(data)
                		   {
                		   console.log(data);
                				for(var i in data)
                				{
                					
                					$("#Precipitation"+data[i]['mois']).val(data[i]['Precipitation']);
                					$("#Evap_eau"+data[i]['mois']).val(data[i]['Evap_eau']);
                				
                				
                				}
                			
                		   }
                		   else
                			  return false;
                		});
                	});
                });
                

                1. d'accord , après on fait quoi , le problème pour moi pourquoi il considère l'annee comme indifinie ??
                  1. ok ça marche quand même un peu ça avance ça retourne à peut près ce que j'espérais
                    1. c'est bizarre là il dit qu'il connait pas l'annee. bon on va quand même changer quelques trucs

                      ton fichier parametre.php doit ressembler à ça:
                      $myArray = array();
                      $sql = "SELECT * FROM parametre WHERE annee = '".$_GET['annee']."'";
                      
                      if ($result = $db->query($sql)) {
                      
                          while($row = $result->fetch_array(MYSQL_ASSOC)) {
                                  $myArray[] = $row;
                          }
                          echo json_encode($myArray);
                      }
                      
                      $result->close();
                      $db->close(); 
                      ?>
                      
                    2. j'ai fait copier coller et il m'affiche que l'annee est indifinie ???
                    3. ajoute en haut du fichier php:

                      <?php
                        print_r($_GET);
                      ?>
                      


                      et regarde dans l'onglet network du debug de chrome sur le fichier parametre.php si tu as bien un truc du genre : annee => 1993 (enfin l'année sur laquelle tu auras cliqué).
                  • 1
                  • 2
                  • 3