Comment récupérer une valeur d'un select en PHP sans submit ? [Fermé]

Signaler
-
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
-
Bonjour,
J'aimerais récupérer la valeur d'un pays qui est une liste, afin de lui associer l'indicatif téléphonique dans mon champ téléphone. Et cela avant la validation de mon formulaire, je ne trouve aucune solution, comment faire SVP ?

Merci

6 réponses

Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873
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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873
En quoi cela ne te convient il pas ?

Ton indicatif de téléphone .. il est associé comment à un pays ?
Via des données en BASE DE DONNEES ou bien tu veux le gérer autrement ?
Si c'est directement dans un tableau JAVASCRIPT... tu n'auras alors pas besoin d'ajax .. mais que de javascript.

Je ne vois pas la logique, je ne vais pas transmettre les données par URL ni par le formulaire.
En fait, j'ai une table pays qui contient le nom du pays (FRANCE), le code ISO (FR) et l'indicatif associé (33) dans ma base de données.

C bon j'ai trouvé comment récupérer le pays à l'aide de javascript :
$(document).ready(function(){
	$('.sky-form').submit(function(){
		// récupérer la valeur du champ pays
		var pays = $('#countrySelect').val();
		
		alert(pays);
		
	});	
});

Maintenant, je dois utiliser la variable pays dans une requête SQL.
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873 > Aucune_solution

Maintenant, je dois utiliser la variable pays dans une requête SQL.

Si tu transmets tes données via un FORM ( un formulaire) ...c'est que derrière tu appelles une page PHP ....
et donc.. que tu lui passes, même sans ton code jquery, le pays ...
Je ne comprend pas bien ce que tu cherches à faire !

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, et tout ça avant de valider le formulaire.
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873
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
<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 !
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci


Merci bcp c'est très gentil!!

J'aurais une dernière question à propos de la valeur du pays.
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 ?
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873 > Aucune_solution
Je n'ai rien compris ...

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 :
$sql = "SELECT champIndicatif FROM tatable WHERE id_pays='$pays'";
>
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020

Merci!
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 ?
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873

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/

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci


Je voulais dire par le fichier ajax, le fichier qui contient le code ajax+ le code PHP
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873

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 .....




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 :
<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
<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>
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873
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 :
var urlAjx       = 'test2_pays.php';

Ok merci, mais vous considérez donc test2_pays.php comme le code du fichier PHP appelé par l'Ajax ?
Messages postés
29836
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 873 > Aucune_solution
... test2_pays.php contient le Code du fichier AJAX PHP (et uniquement ça) => voir ma réponse précédente

Chez moi ça ne prend aucun effet :(

Firebug m'a donné une erreur, sur le fonction check() qui se trouve dans
<select id="countrySelect" name="country" onchange="check();getIndicateurPays();">
Elle n'est pas définie, et je n'en ai pas besoin. Après l'avoir supprimée et après avoir sélectionné un autre pays, une fenêtre alert() s'affiche avec une erreur à l'intérieur
error :Requested JSON parse failed.