utiliser la méthode POST et load('ur','div') en même temps

utiliser la méthode POST et load('ur','div') en même temps - PHP - Programmation

Marsh Posté le 08-07-2013 à 13:30:32    

Bonjour,
j'essaie depuis des heures de récupérer le contenu d'un champs texte suite à l'action onclick d'un bouton pour faire un traitement SQL et renvoyer le résultat dans un div de la même page. mais en vain.
en fait, les codes que j'ai essayé permettent soit d'afficher le résultat sur une autre page, soit de rester sur la même page et ne rien afficher: je n'arrive pas à faire les deux fonctions en même temps.
le problème est que la récupération du champs texte nécessite la méthode POST et le fait de charger le contenu sur la même page nécessite une la fonction load(url,div). Et apparamment ls deux fonctiosn sont incompatibles.
 
s'il vous palit aidez moi.
merci

Reply

Marsh Posté le 08-07-2013 à 13:30:32   

Reply

Marsh Posté le 08-07-2013 à 13:32:56    

Bonjour,  
 
Plusieurs informations sont nécessaire pour t'aider :
1 - le code en question, ça peut être utile
2 - Essayes-tu d'utiliser l'AJAX?
 

Reply

Marsh Posté le 08-07-2013 à 13:51:41    

Je met à a disposition le code que j'utilise (en ajax)
pour commencer voila le code html de la page:

Code :
  1. <body>
  2.     <p id="jqChart" style="width: 750px; height: 350px; left: -15px; "> // 1er graphe
  3.     </p>
  4.     <p id="jqChart2" style="width: 750px; height: 300px; left: -15px;"> //2eme graphe
  5.     </p>
  6.   <form name = "myform">
  7.     <p align="center">
  8.        <input name="prefix" id="prefix" placeholder="enter AS number"/> champs texte + boutton submit sur la même ligne
  9.        <input type = "submit" name = "button1" id = "button1" value = "Number of prefixes" style="width: 25%; height: 33px;"/>
  10.     </p>
  11.   </form>
  12.    <p id="result"> paragraphe dans lequel je veux afficher le résultat
  13.    </p>
  14. </body>


 
voila le code ajax que j'utilise:

Code :
  1. $('#button1').click(function() {
  2.            //get sth value
  3.             var as = $('#as').val();
  4.            //make ajax call to 'abc.php' passing 'sth' parameter
  5.             $.post('/Routing/number_of_prefixes.php', { as:as }, function(data) {
  6.             //if $_POST['sth'] at PHP side is not null
  7.             if (data != null) {
  8.                 //show the data (in this case: $happy) in the div with id 'other' using '.html()' method
  9.                 $('#result').html(data);
  10.             }
  11.         });
  12.     });


 
et voila le fichier .php appelé lorsque le bouton est cliqué:

Code :
  1. <?php
  2. $db = mysql_connect('localhost', 'root', 'Orange2424');
  3. mysql_select_db('INX',$db)  or die('Erreur de sélection '.mysql_error());
  4.    $as = $_POST['prefix'];
  5.    $query2 = mysql_query("SELECT Number_of_Prefixes from Route_Per_AS where AS_num='".$as."'" ); 
  6.    while($donnees2 = mysql_fetch_array($query2)) {
  7.     $number2 = intval($donnees2["Number_of_Prefixes"]);
  8.     echo "AS $as advertises $number route(e)";
  9.     }
  10. ?>


 
j'espère que c'est dont tu as besoin, je te remercie pour ton aide

Reply

Marsh Posté le 08-07-2013 à 14:13:14    

Il y a un petit soucis dans ce que tu fais, car tu envoie un post et une requête AJAX en même temps.
 
Il y a deux solution, utiliser jQuery ou non, je vais te montrer la deuxième (moins belle) vu que je n'ai pas l'impression que tu utilise cette librairie:
 
page :  

Code :
  1. <body>
  2.         <p id="jqChart" style="width: 750px; height: 350px; left: -15px; "> // 1er graphe
  3.         </p>
  4.         <p id="jqChart2" style="width: 750px; height: 300px; left: -15px;"> //2eme graphe
  5.         </p>
  6.       <div name = "myform">
  7.         <p align="center">
  8.            <input name="prefix" id="prefix" placeholder="enter AS number"/> //champs texte + boutton submit sur la même ligne
  9.            <input type = "button" name = "button1" id = "button1" value = "Number of prefixes" style="width: 25%; height: 33px;"/>
  10. //ou
  11. <button  id = "button1" name = "button1" style="width: 25%; height: 33px;">Number of prefixes</button>
  12.         </p>
  13.       </div>
  14.        <p id="result"> paragraphe dans lequel je veux afficher le résultat
  15.        </p>
  16.     </body>


 
Ensuite  
 
ton code javascript:
 

Code :
  1. $('#button1').click(function() {
  2.                //get sth value
  3.                 var as = $('#as').val();
  4.                //make ajax call to 'abc.php' passing 'sth' parameter
  5.                 $.post('/Routing/number_of_prefixes.php', { as:as }, function(data) {
  6.                 //if $_POST['sth'] at PHP side is not null
  7.                 if (data != null) {
  8.                     //show the data (in this case: $happy) in the div with id 'other' using '.html()' method
  9.                     $('#result').html(data);
  10.                 }
  11.             });
  12.         });


 
Problème de ce code, c'est que tu initialises ton event peut-être avant que le bouton soit créé donc en gros tu fais dans le vide, tu peux donc remplacer par : $('#button1').die('click').live('click', function() {
 
ou off/on (die/live)
 
ensuite autre chose, tu vas chercher la valeur (var as = $('#as').val();) dans un élément ou l'id est "as" tu dois changer cette ligne par :
var as = $('#prefix').val();
 
donc ça donne :
 

Code :
  1. $('#button1').die('click').live('click', function() {
  2.    //$('#button1').off('click').on('click', function() {
  3.                //get sth value
  4.                 var as = $('#prefix').val();
  5.                //make ajax call to 'abc.php' passing 'sth' parameter
  6.                 $.post('/Routing/number_of_prefixes.php', { as:as }, function(data) {
  7.                 //if $_POST['sth'] at PHP side is not null
  8.                 if (data != null) {
  9.                     //show the data (in this case: $happy) in the div with id 'other' using '.html()' method
  10.                     $('#result').html(data);
  11.                 }
  12.             });
  13.         });


 
Dis moi ce que ça donne

Reply

Marsh Posté le 08-07-2013 à 14:54:02    

Merci ça marche mais il faudra en plus faire quelque changement car j'ai utilisé un id ="as" qui n'existe pas , je l'ai remplacé avec id="prefix".
mais pour le reste çava bien.
 
j'ai maintenant un autre petit souci,  
j'ai modifié le script php pour qu'il fasse des tests sur ce qui  est saisi par l'utilisateur dans le champs texte et renvoyer une boite d'alerte en fonction de l'erreur.
le problème est que les boits d'alertes n'aparaissent jamais au premier essai.
par exemple la valeur 0 est incorrecte et doit renvoyer une alerte "Invalid ASN".
quand je saisi la valeur 0 et que je clique sur le bouton la boite d'alerte n'apparait pas, il faut que je refasse la saisi une deuxième fois pour que ça fonctionne.
d'où vient le problème ??
 
voici le code

Code :
  1. <?php
  2. $db = mysql_connect('localhost', 'root', 'Orange2424');
  3. mysql_select_db('INX',$db)  or die('Erreur de sélection '.mysql_error());
  4.    $as = $_POST['prefix']; 
  5.     if (($as >= 65512) && ($as <= 65535))
  6.     {
  7.        // as privé
  8.        ?>
  9.          <script language="Javascript">
  10.          alert('Please enter a public ASN')
  11.          document.location.href='IHM.php#'
  12.          </script>
  13.        <?php
  14.     }
  15.      
  16.     else if (($as < 1) || ($as > 65535))
  17.     {
  18.       // asn invalide
  19.       ?>
  20.          <script language="Javascript">
  21.          alert('Invalid ASN')
  22.          document.location.href='IHM.php#'
  23.          </script>
  24.       <?php
  25.     }
  26.    
  27.      else
  28.     {
  29.       $query2 = mysql_query("SELECT Number_of_Prefixes from Route_Per_AS where AS_num='".$as."'" ); 
  30.       while($donnees2 = mysql_fetch_array($query2)) {
  31.       $number2 = intval($donnees2["Number_of_Prefixes"]);
  32.       echo "AS $as advertises $number2 route(s)";
  33.     }}
  34. ?>

Reply

Marsh Posté le 08-07-2013 à 15:07:22    

C'est normal, ton script :

Code :
  1. <script language="Javascript">
  2.          alert('Invalid ASN')
  3.          document.location.href='IHM.php#'
  4.          </script>


 
est exécuté niveau serveur et non niveau navigateur client (surtout que tu essayes d'exécuter du javascript sur ton serveur)
 
moi je te propose de faire comme ça :
 
niveau php-serveur :  
 

Code :
  1. <?php
  2.     $db = mysql_connect('localhost', 'root', 'Orange2424');
  3.     mysql_select_db('INX',$db)  or die('Erreur de sélection '.mysql_error());
  4.        $as = $_POST['prefix'];
  5.         if (($as >= 65512) && ($as <= 65535))
  6.         {
  7.            // as privé
  8.           echo 'erreur_1';
  9.         }
  10.        
  11.         else if (($as < 1) || ($as > 65535))
  12.         {
  13.           // asn invalide
  14.           echo 'erreur_2';
  15.         }
  16.      
  17.          else
  18.         {
  19.           $query2 = mysql_query("SELECT Number_of_Prefixes from Route_Per_AS where AS_num='".$as."'" );
  20.           while($donnees2 = mysql_fetch_array($query2)) {
  21.           $number2 = intval($donnees2["Number_of_Prefixes"]);
  22.           echo "AS $as advertises $number2 route(s)";
  23.         }}
  24.     ?>


 
coté javascript :
 

Code :
  1. $('#button1').die('click').live('click', function() {
  2.        //$('#button1').off('click').on('click', function() {
  3.                    //get sth value
  4.                     var as = $('#prefix').val();
  5.                    //make ajax call to 'abc.php' passing 'sth' parameter
  6.                     $.post('/Routing/number_of_prefixes.php', { as:as }, function(data) {
  7.                     //if $_POST['sth'] at PHP side is not null
  8.                     if (data != null) {
  9.                         if(data == 'erreur_1'){
  10. alert('Please enter a public ASN');
  11.          document.location.href='IHM.php#';
  12.                         }else if(data == 'erreur_2'){
  13. alert('Invalid ASN');
  14.          document.location.href='IHM.php#';
  15.                         }else{
  16.                               $('#result').html(data);
  17.                         }
  18.                     }
  19.                 });
  20.             });

Reply

Marsh Posté le 08-07-2013 à 15:33:34    

merci mais ça ne fonctionne pas. Non seulement le problème n'a pas été résolu mais en plus les messages des boites d'alertes s'affichent dans le div "result" au lieu d'apparaitre dans un pop up, autre chose: le cas ou la requête SQL retourne rien n'est plus pris en considération
voici mon code actuel:

Code :
  1. $('#button1').click(function() {
  2.             var prefix = $('#prefix').val();
  3.             $.post('/Routing/number_of_prefixes.php', { prefix:prefix }, function(data) {
  4.             if (data != null) {
  5.                 if (data == 'prive') {
  6.                 alert("Please enter a public autonomous system number" );}
  7.                 else if (data == 'invalide') {
  8.                 alert("Invalid autonomous system" );}
  9.                 else {
  10.                 $('#result').html(data);}
  11.                }
  12.             else {
  13.                 alert("No information currently available" );}
  14.            
  15.         });
  16.     });


 
et voila le code PHP:

Code :
  1. <?php
  2. $db = mysql_connect('localhost', 'root', 'Orange2424');
  3. mysql_select_db('INX',$db)  or die('Erreur de sélection '.mysql_error());
  4.    $as = $_POST['prefix']; 
  5.     if (($as >= 65512) && ($as <= 65535))
  6.     {
  7.        echo "prive";
  8.     }
  9.      
  10.     else if (($as < 1) || ($as > 65535))
  11.     {
  12.        echo "invalide";
  13.     }
  14.    
  15.      else
  16.     {
  17.       $query2 = mysql_query("SELECT Number_of_Prefixes from Route_Per_AS where AS_num='".$as."'" ); 
  18.       while($donnees2 = mysql_fetch_array($query2)) {
  19.       $number2 = intval($donnees2["Number_of_Prefixes"]);
  20.        }
  21.    
  22.       if ($number2 != null)
  23.         {
  24.            echo "AS $as advertises $number2 route(s)";
  25.         }
  26.     }
  27. ?>

Reply

Marsh Posté le 08-07-2013 à 15:47:36    

regare avec un console.log ce que te retourne data en valeur

Reply

Marsh Posté le 08-07-2013 à 15:57:04    

rien n'est affiché

Reply

Marsh Posté le 08-07-2013 à 16:20:16    

En faisant ça :
 

Code :
  1. $('#button1').click(function() {
  2.                 var prefix = $('#prefix').val();
  3.                 $.post('/Routing/number_of_prefixes.php', { prefix:prefix }, function(data) {
  4. console.log(data);
  5.                 if (data != null) {
  6.                     if (data == 'prive') {
  7.                     alert("Please enter a public autonomous system number" );}
  8.                     else if (data == 'invalide') {
  9.                     alert("Invalid autonomous system" );}
  10.                     else {
  11.                     $('#result').html(data);}
  12.                    }
  13.                 else {
  14.                     alert("No information currently available" );}
  15.              
  16.             });
  17.         });


 
tu ne vois rien dans ta console d'erreur (par exemple firebug si tu utilise Firefox)

Reply

Marsh Posté le 08-07-2013 à 16:20:16   

Reply

Marsh Posté le 10-07-2013 à 13:16:07    

Bonjour,  
j'ai modifié le code et j'ai fini par avoir celui ci, il est appellé par action d'un formaulaire qui se trouve sur ma page.
le code fonctionne très bien pour tous les cas d'erreur et les boites d'alerte s'affiche sans problème.
S'il n'y a aucune erreur, je veux retourner le résultat sur la même page dans le div "résult" en utilisant la ligne ajax suivante:

Code :
  1. (#result).html(ma variable);


le problème est que cette ligne ne s'exécute pas depuis mon fichier php. pourtatnt lorsqu je suis sur la page html elle fonctionne très bien. Est ce qu'il faut être sur la même page pour que le duv "result" soit visible??
voici en tout cas le code php:

Code :
  1. <?php
  2. $db = mysql_connect('localhost', 'root', 'Orange2424');
  3. mysql_select_db('INX',$db)  or die('Erreur de sélection '.mysql_error());
  4.     $as = $_POST['prefix']; 
  5.     if (($as >= 65512) && ($as <= 65535))
  6.     {
  7.       echo "<script language='Javascript'>
  8.           alert('Please select a public ASN.');
  9.           history.back();
  10.           </script>";
  11.     }
  12.      
  13.     else if (($as < 1) || ($as > 65535))
  14.     {
  15.        echo " <script language='Javascript'>
  16.           alert('Invalid ASN.');
  17.           history.back();
  18.           </script>";
  19.     }
  20.    
  21.      else
  22.     {
  23.       $query2 = mysql_query("SELECT Number_of_Prefixes from Route_Per_AS where AS_num='".$as."'" ); 
  24.       while($donnees2 = mysql_fetch_array($query2)) {
  25.       $number2 = intval($donnees2["Number_of_Prefixes"]);
  26.        }
  27.       if ($number2 != null)
  28.         {
  29.            echo "<script language='Javascript'>
  30.                  $('#result').html('AS $as advertises $number2 route(s)'); ce cas de figure me renvoie une page blanche
  31.                  </script>";
  32.         }
  33.       else
  34.         {
  35.           echo " <script language='Javascript'>
  36.                  alert('No information currently available for this AS.');
  37.                  history.back();
  38.                  </script>";
  39.         }
  40.     }
  41. ?>


 
merci

Reply

Marsh Posté le 11-07-2013 à 13:48:46    

Est-ce que je pourrais avoir tout le code? (Histoire que je le fasse tourner sur ma machine pour voir (tu peux me l'envoyer en mp également))
 
Sinon, c'est très moche de faire comme ça et tu risque d'avoir pas mal de problème en fonction des navigateurs, notamment IE.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed