Comment récupérer une valeur d'un select en PHP sans submit ?
Fermé
Aucune_solution
-
1 juin 2015 à 09:42
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 - 2 juin 2015 à 14:02
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 - 2 juin 2015 à 14:02
A voir également:
- Récupérer valeur sélectionnée liste déroulante php
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Google sheet liste déroulante - Accueil - Guide bureautique
6 réponses
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
Modifié par jordane45 le 1/06/2015 à 15:59
Modifié par jordane45 le 1/06/2015 à 15:59
Tu veux :
Tu sélectionnes un PAYS dans ta liste déroulante
A ce moment là .. l'indicatif (téléphone) du pays correspondant apparait dans ton champ input TEL...
Sachant que :
- La liste des indicatifs pays est présent dans une table de ta BDD ....
DONC :
- Tu détéctes le changement de pays dans ton select grâce à la méthode ONCHANGE
- Tu récupères, via AJAX, l'indicatif du PAYS concerné
il faut donc que tu fasses une page PHP spécialement dédiée pour récupérer l'indicatif du pays via une requête sql et l'utiliser avec l'appel AJAX.
- Tu mets dans ton INPUT TEL ... l'indicatif récupéré via la AJAX (en javascript)
Niveau Javascript (AJAX):
Et côté PHP
Voilou ...
Je te laisse compléter !
Tu sélectionnes un PAYS dans ta liste déroulante
A ce moment là .. l'indicatif (téléphone) du pays correspondant apparait dans ton champ input TEL...
Sachant que :
- La liste des indicatifs pays est présent dans une table de ta BDD ....
DONC :
- Tu détéctes le changement de pays dans ton select grâce à la méthode ONCHANGE
<select id="countrySelect" name="country" onchange="check();getIndicateurPays();">
- Tu récupères, via AJAX, l'indicatif du PAYS concerné
il faut donc que tu fasses une page PHP spécialement dédiée pour récupérer l'indicatif du pays via une requête sql et l'utiliser avec l'appel AJAX.
- Tu mets dans ton INPUT TEL ... l'indicatif récupéré via la AJAX (en javascript)
Niveau Javascript (AJAX):
function getIndicateurPays(){ var urlAjx = 'cheminverstonfichier/indicatifPays.ajx.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('Not connected.\nPlease verify your network connection.'); } else if (jqXHR.status == 404) { return ('The requested page not found. [404]'); } else if (jqXHR.status == 500) { return ('Internal Server Error [500].'); } else if (exception === 'parsererror') { return ('Requested JSON parse failed.'); } else if (exception === 'timeout') { return ('Time out error.'); } else if (exception === 'abort') { return ('Ajax request aborted.'); } else { return ('Uncaught Error.\n' + jqXHR.responseText); } }
Et côté PHP
// ici tu inclus ton fichier de connexion à ta BDD // ensuite : // récupération des variables POST $pays = isset($_POST['pays'])?$_POST['pays']:NULL; if($pays){ // ici ta requete: $sql = "SELECT * FROM tatable WHERE pays='$pays'"; // execution de ta requete : $result = ------ } // Puis renvoie des données vers l'ajax : echo json_encode($result);
Voilou ...
Je te laisse compléter !
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
1 juin 2015 à 09:46
1 juin 2015 à 09:46
Bonjour,
Pour cela il te faut utiliser du JAVASCRIPT avec de l'AJAX
L'idéal étant de passer par JQUERY (la syntaxe et l'utilisation de l'ajax étant simplifiée je trouve)
https://openclassrooms.com/fr/courses/1567926-un-site-web-dynamique-avec-jquery/1569648-le-fonctionnement-de-ajax
Pour cela il te faut utiliser du JAVASCRIPT avec de l'AJAX
L'idéal étant de passer par JQUERY (la syntaxe et l'utilisation de l'ajax étant simplifiée je trouve)
https://openclassrooms.com/fr/courses/1567926-un-site-web-dynamique-avec-jquery/1569648-le-fonctionnement-de-ajax
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
>
Aucune_solution
1 juin 2015 à 09:53
1 juin 2015 à 09:53
.... ben.... avec de l'AJAX .... comme je te l'ai indiqué précédemment...
Lis le tuto que je t'ai indiqué... il explique comment l'utiliser.
Lis le tuto que je t'ai indiqué... il explique comment l'utiliser.
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
>
Aucune_solution
1 juin 2015 à 10:33
1 juin 2015 à 10:33
???
TU n'as pas d'autres possibilités .....
TU n'as pas d'autres possibilités .....
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
2 juin 2015 à 11:10
2 juin 2015 à 11:10
j'ai mis le fichier Ajax à part, le fichier qui contient les input à part, avec comme url de l'ajax : fichier_des_inputs.php , est-ce bien ça ?
Je ne pense pas...
Le fichier ajax .. c'est à dire ? Le fichier qui contient le code PHP de la partie AJAX ou le code javascript ?
Si c'est le code PHP dont tu parles ... c'est lui qu'il faut mettre dans L'URL ..
L'idéal serait que tu nous postes le code de chacun de tes fichiers (en indiquant bien son nom histoire qu'on s'y retrouve).
Dans l'ordre :
Le code qui contient tes champs (ta liste déroulante, tes input (Tel ....)
Ce fichier peut contenir également le javascript de l'ajax ( à moins que tu l'aies placé dans un fichier à part)
Le code du fichier PHP appelé par l'AJAX.
PS: Lorsque tu fais du DEV Javascript (et/ou AJAX) il est FORTEMENT recomandé d'utiliser les outils de debogage de ton navigateur internet pour voir si il n'y a pas d'erreurs et voir un peu ce qui se passe. Pour cela, je te conseille vivement d'utiliser le plugin FIREBUG pour FireFox....
Et voici un tuto pour apprendre à s'en servir : https://eric-pommereau.developpez.com/tutoriels/outil-web/firebug/
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
1 juin 2015 à 15:18
1 juin 2015 à 15:18
Je veux connaître la valeur du pays avant d'envoyer le formulaire, j'en ai besoin pour spécifier l'indicatif du téléphone
Tu en as besoin OU ?
Pour faire quoi ?
Pourquoi AVANT le SUBMIT ?
Ta question n'est pas assez claire et précise ... il est quasi impossible qu'on puisse te répondre !
Nous ne savons rien de ton code .... ni de ce que tu veux faire exactement .....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai besoin de connaître la valeur du pays afin de remplir le champ numéro de téléphone avec l'indicatif corespondant, par exemple si je sélectionne France, je dois avoir automatiquement dans le champ téléphone (33) .....
Voici mon code :
Voici mon code :
<form action="traitement_formulaire.php" method="post" id="sky-form" class="sky-form"> <!-- Pays ------> <select id="countrySelect" name="country" onchange="check()"> <?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">Pays</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'" >' . $donnees["pays"].'</OPTION>'; } ?> <!--Tél générique--> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Téléphone générique"> </form>
Voici mes fichiers :
fichier 1 : test2_pays.php
fichier 2 : test_pays.php
fichier 1 : test2_pays.php
<select id="countrySelect" name="country" onchange="check();getIndicateurPays();"> ?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">Pays</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'">'.$donnees["pays"].'</OPTION>'; } ?> </select> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Téléphone générique">
fichier 2 : test_pays.php
<?php // ici tu inclus ton fichier de connexion à ta BDD include("connexion.php"); // ensuite : // récupération des variables POST $pays = isset($_POST['country']); if($pays){ // ici ta requete: $sql = "SELECT * FROM pays WHERE id_pays='$pays'"; // execution de ta requete : $bdd->exec($sql); } // Puis renvoie des données vers l'ajax : echo json_encode($result); ?> <script> function getIndicateurPays(){ var urlAjx = 'test2_pays.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('Not connected.\nPlease verify your network connection.'); } else if (jqXHR.status == 404) { return ('The requested page not found. [404]'); } else if (jqXHR.status == 500) { return ('Internal Server Error [500].'); } else if (exception === 'parsererror') { return ('Requested JSON parse failed.'); } else if (exception === 'timeout') { return ('Time out error.'); } else if (exception === 'abort') { return ('Ajax request aborted.'); } else { return ('Uncaught Error.\n' + jqXHR.responseText); } } </script>
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
2 juin 2015 à 12:18
2 juin 2015 à 12:18
oula ... non ... !
Tu as un document qui contient :
- Tes champs HTML (dont ta liste de pays ) + le javascript associé
- Un fichier PHP contenant uniquement le code nécessaire à ton AJAX
En gros :
Code du fichier AJAX PHP :
En plus tu as été capable de modifié du code ... alors qu'il suffisait de faire un simple copier/coller...
Pour récupérer une variable correctement il faut utiliser :
Alors que toi.. en récupérant ce que je te t'avais donné.. tu l'as modifié en :
==>>> Ce qui ne marchera pas !
Ensuite ...
Lorsque tu fais des requêtes de type SELECT ... n'oublies pas qu'il faut faire un FETCH du résultat pour pouvoir lire le contenu...Je te propose d'utiliser directement un fetchall()
Sans oublier qu'il est préférable d'utiliser des requête préparées plutôt qu'un EXEC.
et ainsi .. ton code devient :
Tu as un document qui contient :
- Tes champs HTML (dont ta liste de pays ) + le javascript associé
- Un fichier PHP contenant uniquement le code nécessaire à ton AJAX
En gros :
<select id="countrySelect" name="country" onchange="check();getIndicateurPays();"> ?php $reponse = $bdd->query('SELECT * FROM pays'); echo '<OPTION VALUE="">Pays</OPTION>'; while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<OPTION VALUE="'.$donnees["id_pays"].'">'.$donnees["pays"].'</OPTION>'; } ?> </select> <input type="tel" name="tel_struct" id="tel_struct" placeholder="Téléphone générique"> <script type="text/javascript"> function getIndicateurPays(){ var urlAjx = 'test2_pays.php'; var pays = $("#countrySelect").val(); var data = {pays:pays}; $.ajax({ url: urlAjx, dataType: "json", type: "POST", data: data, async: false, success: function(reponse){ $("#tel_struct").val(reponse); }, error: function(jqXHR, textStatus){ var error = formatErrorMessage(jqXHR, textStatus); alert('error :' + error); } }); } function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('Not connected.\nPlease verify your network connection.'); } else if (jqXHR.status == 404) { return ('The requested page not found. [404]'); } else if (jqXHR.status == 500) { return ('Internal Server Error [500].'); } else if (exception === 'parsererror') { return ('Requested JSON parse failed.'); } else if (exception === 'timeout') { return ('Time out error.'); } else if (exception === 'abort') { return ('Ajax request aborted.'); } else { return ('Uncaught Error.\n' + jqXHR.responseText); } } </script>
Code du fichier AJAX PHP :
<?php // ici tu inclus ton fichier de connexion à ta BDD include("connexion.php"); // ensuite : // récupération des variables POST $pays = isset($_POST['country']) ? $_POST['country'] : NULL; if($pays){ // ici ta requete: $sql = "SELECT * FROM pays WHERE id_pays='$pays'"; // execution de ta requete : $bdd->exec($sql); } // Puis renvoie des données vers l'ajax : echo json_encode($result); ?>
En plus tu as été capable de modifié du code ... alors qu'il suffisait de faire un simple copier/coller...
Pour récupérer une variable correctement il faut utiliser :
// récupération des variables POST $pays = isset($_POST['country']) ? $_POST['country'] : NULL;
Alors que toi.. en récupérant ce que je te t'avais donné.. tu l'as modifié en :
$pays = isset($_POST['country']);
==>>> Ce qui ne marchera pas !
Ensuite ...
Lorsque tu fais des requêtes de type SELECT ... n'oublies pas qu'il faut faire un FETCH du résultat pour pouvoir lire le contenu...Je te propose d'utiliser directement un fetchall()
Sans oublier qu'il est préférable d'utiliser des requête préparées plutôt qu'un EXEC.
et ainsi .. ton code devient :
if($pays){ // ici ta requete: $sql = "SELECT indicatif FROM pays WHERE id_pays=':pays'"; $params = array(':pays'=>$pays); // execution de ta requete : $sth = $bdd->prepare($sql); $sth->execute($params); $result = $sth->fetchAll(); } // Puis renvoie des données vers l'ajax : echo json_encode($result[0]['indicatif']);
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
2 juin 2015 à 12:19
2 juin 2015 à 12:19
NB : Tu penseras à modifier la requête, pour mettre ( à la place de "indicatif") le nom du champ de ta table... celui qui contient l'indicatif du pays
Idem dans le echo json_encode ...
Idem dans le echo json_encode ...
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
2 juin 2015 à 13:38
2 juin 2015 à 13:38
Ben ... j'ai considéré que la page appelée par l'AJAX était :test2_pays.php
et donc... dans le JS ça se trouve ici :
et donc... dans le JS ça se trouve ici :
var urlAjx = 'test2_pays.php';
1 juin 2015 à 16:18
1 juin 2015 à 17:02
Initialement, le pays prend une certaine valeur, et dans ce cas-là je n'ai pas l'indicatif, il faudrait que je sélectionne le pays avant.
Comment avoir l'indicatif dans ce cas ?
1 juin 2015 à 17:38
Ta liste déroulante ... elle te retourne bien la "valeur" du pays ( en l'occurence ici, son ID )
Donc, dans le where de ta requête .. tu t'en sers ...
Bien sûr .. le code que je te donne est pûrement à titre d'exemple .. ne connaissant pas la structure de ta BDD ....mais je peux en déduire que ça devrait ressembler à un truc du genre :
2 juin 2015 à 10:27
J'ai essayé votre code, ça a marché la première fois, je ne sais plus trop comment. Je réessayé maintenant mais rien ne se passe, j'ai mis le fichier Ajax à part, le fichier qui contient les input à part, avec comme url de l'ajax : fichier_des_inputs.php , est-ce bien ça ?