[Php/Ajax] interaction select avec onchange

Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - Modifié par patrice86 le 25/10/2011 à 12:11
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 26 nov. 2011 à 11:57
Bonjour,

J'ai un select qui m'affiche les noms de pls marques et je souhaiterai récupérer l'id de la marque sélectionner pour ensuite afficher les catégories lui correspondants en temps réel (AJAX).

Pour cela j'utilise un onchange.

Ma page categorie.php avec le select:
<?php      
 $dbconnect=pg_connect("host=localhost dbname=PTI user=postgres password=xxxxx");      
 echo'<select id="marque" onchange="mafonction()">';      
       
  $sql = 'SELECT num_mar,lib_mar FROM marque';        
  $req = pg_query($dbconnect,$sql);      
        
  echo '<option value="0">Sélectionner une marque</option>';      
   while ($data = pg_fetch_array($req))       
   {       
    echo "<option value='".$data['num_mar']."'>".$data['lib_mar']."                  </option>";      
   }        
          
    pg_free_result ($req);        
      pg_close ();       
    echo'</td></select>';      
 ?>


La fonction ajax toujours dans la page categorie.php
function ajaxFunction()      
{      

// le blabla de ajax pour vérifier le navigateur web utiliser....     

        var marque = $(":select[name=marque]").value();      // On récupère la valeur du sélect ayant pour id "marque"       

       $.post('php/marque.php',                // AJAX : On appelle un script php      
   {num_marque: marque},          // Passage de la variable en paramètre      
           function(data){       
    <gras>   $('#principal').html(data);               // On ajoute le résultat de se script dans la balise qui a pour id "conteneur".    
 });      
   }


Et enfin la page appelée par AJAX => marque.php
<?php      


   $dbconnect=pg_connect("host=localhost dbname=PTI user=postgres password=xxxx");      
  $req = "SELECT num_cat, lib_cat FROM categorie WHERE nummar_cat =". $_POST['num_marque'] .";";      
$resultat = pg_query($req);      

echo "<select name='modele'>";      
echo "<option value='0'>Choix du modèle</option>";       

while ($modèle = mysql_fetch_array($resultat)      
{      
    echo "<option value='". $modele['num_cat'] ."'>". $modele['lib_cat'] ."</option>";      
}        
echo "</select>";      
?>


Sauf que rien ne marche, je ne comprend vraiment pas pourquoi, j'ai parcouru le webe t plusieurs forum sans forcément trouvé d'aide à mon problème. Donc je me tourne vers vous.

Je suposes que l'erreur provient lors de l'appel du fichier php et du transfert de paramètre mais je ne trouves pas de solution.
J'espères que vous pourrez m'aider :)
MERCI

18 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 oct. 2011 à 11:35
remplaces:<ital>echo'<select name="marque" onchange="mafonction()">';/ital>

par <code>echo'<select name="marque" onchange="ajaxFunction()">';/code>
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
25 oct. 2011 à 11:37
Heu oui truc tout bête je me suis trompé lorsque j'ai créer le poste mais c'est bien ajaxfuntion() qui est mis mais ça ne fonctionne toujours pas.

je penses que je vais abandonner le onchange et envoyer le résultat du select avec js et l'afficher avec ajax (même si je galère encore...)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 25/10/2011 à 11:49
Ha ok
ajaxfunction ou ajaxFunction ? ce n'est pas pareil


mais je lis:
var marque = $(":select[name=marque]").value(); // On récupère la valeur du sélect ayant pour id "marque"

hors tu n'as pas d'id="marque" dans ta balise <select
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 25/10/2011 à 12:11
je récupère la valeur du select dont le nom est
<select id="marque">

Mais je vais abandonner l'idée du onchange, j'ai passé la journée de hier plus cette matinée sans réussir à trouver d'aide, je ne peux me permettre de perdre plus de temps malheureusement.. Je suis un peu coincé au niveau du planning que l'on m'impose.

Merci quand même à vous ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 oct. 2011 à 13:56
c'est peut être le name qu'il faut

<select id="marque" onchange=".....

<select name="marque" id="marque" onchange="....
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 oct. 2011 à 14:13
Bonjour,

var marque = $(":select[name=marque]").value(); // On récupère la valeur du sélect ayant pour id "marque"

Tu spécifies name=marque, alors que ton <select> contient seulement id=marque.
Deuxième problème, value n'est pas une fonction : donc pas de parenthèses.

Sinon, plus simple à mon avis, c'est de passer la valeur du select en paramètre du onchange :

<select id="marque" onchange="mafonction(this.value)">

côté script, l'en-tête de ta fonction devient function ajaxFunction(marque)
et tu peux enlever la ligne var marque=...

Xavier
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
2 nov. 2011 à 16:48
J'ai finalement repris l'idée du onchange et j'ai enfin réussi à le faire fonctionner
Pfiou ce fût long tout de même...

Mais maintenant un nouveau problème se pose à moi.
Comment je peux faire pour récupérer la valeur de ma 2éme liste déroulante afin de l'envoyer avec toutes les autres valeurs de mon form à ma page d'insertion.php pour effectuer un insert into...

En gros, comment récupérer la valeur sélectionner de cette liste déroulante qui est lié à une liste déroulante ?

Merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
2 nov. 2011 à 18:17
cette deuxième liste elle a bien un name="...." alors tu recupères avec $_POST['ce_name']
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
2 nov. 2011 à 18:43
Cette 2éme liste est définit:
<select name='categorie' id='categorie'>

Mais impossible de récupérer sa valeur
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
2 nov. 2011 à 19:05
echo '<pre>';
print_r($_POST];
echo '</pre>';


pour voir ce que tu reçoit
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
19 nov. 2011 à 16:03
Je réponds bien tard, mais j'ai eu des soucis qui m'ont empécher de revoir mon code.

Je n'ai toujours pas réussi à récupérer la valeur de la seconde liste déroulante.
Une idée ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
20 nov. 2011 à 18:36
si tu rajoutes ça tu as quoi comme affichage ?

echo '<pre>';
print_r($_POST];
echo '</pre>';
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 nov. 2011 à 13:22
suite:

tu ecris plus haut:
Cette 2éme liste est définit:
<select name='categorie' id='categorie'>

Mais impossible de récupérer sa valeur


hors dans ton script php marque.php appelé par ajax pour créer cette 2 ième liste tu as:
echo "<select name='modele'>";      
echo "<option value='0'>Choix du modèle</option>";   
.........



donc pour récupérer le choix fait dans deuxième liste c'est $_POST['modele']

et pas categorie comme tu dis dans ton post du 2 novembre
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
21 nov. 2011 à 20:47
Mais j'aimerai récupérer la valeur choisis dans la liste dans le JS
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 21/11/2011 à 21:20
Mais j'aimerai récupérer la valeur choisis dans la liste dans le JS

ha d'accord, alors

modifies marque.php pour avoir:

echo "<select name='modele' id='modele'>";       
echo "<option value='0'>Choix du modèle</option>";    
......... 


et dans ton Js pour récuperer

var modele_choisi=document.getElementById('modele').value;

Mais pourquoi en JS ?
plus haut le 2 novembre tu disait:
Comment je peux faire pour récupérer la valeur de ma 2éme liste déroulante afin de l'envoyer avec toutes les autres valeurs de mon form à ma page d'insertion.php pour effectuer un insert into...
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
24 nov. 2011 à 08:21
j'ai essayé cette méthode mais impossible de récupérer la valeur.
Avec le débugage de Chrome, je vois bien que la liste se créer avec id="modele" mais le JS ne veut pas le récupérer.

Car je récupère tout en JS pour l'envoyer ensuite en Ajax.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 nov. 2011 à 10:29
Car je récupère tout en JS pour l'envoyer ensuite en Ajax.
Si tu nous dis pas tout

pour récupérer en JS pour l'envoyer en Ajax:

var modele_choisi=document.getElementById('modele').value;
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 nov. 2011 à 13:59
ou dans ton cas:

function ajaxFunction()      
{      

// le blabla de ajax pour vérifier le navigateur web utiliser....     

        var modele = $(":select[name=modele]").value();      // On récupère la valeur du sélect ayant pour id "modele"       

       $.post('php/marque.php',                // AJAX : On appelle un script php      
   {num_modele: modele},          // Passage de la variable en paramètre      
           function(data){       
    <gras>   $('#principal').html(data);               // On ajoute le résultat de se script dans la balise qui a pour id "conteneur".    
 });      
   }
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
24 nov. 2011 à 14:55
Et à la place de POST, on peut pas le faire en GET ?
Tout mon JS renvoie en GET.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 nov. 2011 à 21:10
J'y comprend plus rien à ton truc, je te modifie le code Ajax de la première liste pour l'adapter à la deuxième et maintenant tu parles de GEt ,
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
26 nov. 2011 à 11:57
J'ai enfin réussi Alain.
J'ai fait la méthode que tu disais en ajoutant l'id sur le select dans la page php
ça fonctionne parfaitement bien.

Désolé de t'avoir pris la tête avec ça ^^ Ce projet commence sérieusement à me gonfler.

MERCI !!! :)
0