Garder la sélection avec une requete ajax
Résolu
mipolette
Messages postés
99
Date d'inscription
Statut
Membre
Dernière intervention
-
mipolette Messages postés 99 Date d'inscription Statut Membre Dernière intervention -
mipolette Messages postés 99 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
je clique sur des catégories dans mon premier select, et cela me génère la liste associée dans mon second select, au travers d'une requête ajax.
Mais lorsque dans mon formulaire, j'ai une erreur, je perds cette sélection...
Quelqu'un pourrait m'aider svp...
voici le code que va chercher ma requete ajax:
merci d'avance
je clique sur des catégories dans mon premier select, et cela me génère la liste associée dans mon second select, au travers d'une requête ajax.
Mais lorsque dans mon formulaire, j'ai une erreur, je perds cette sélection...
Quelqu'un pourrait m'aider svp...
voici le code que va chercher ma requete ajax:
try{ $bdd = new PDO("mysql:host=localhost;dbname=bddmalou","root", ""); } catch(Exception $e) { die("message:" . $e->getMessage()); } $reqAffCategorie = $bdd->query("SELECT * FROM categorie WHERE idtype = " . $_GET['id_type']); while($donnees = $reqAffCategorie->fetch()) { if($blnErreur) { echo '<option value ="' . $donnees["id"] . '"'; if($donnees['id'] == $_POST['cboCategorie']) { echo 'selected="selected"'; } echo '>' . utf8_encode($donnees['nom']) . '</option>'; } else { echo '<option value ="' . $donnees["id"] . '">' . utf8_encode($donnees['nom']) . '</option>'; } } $reqAffCategorie->closeCursor();
merci d'avance
A voir également:
- Garder la sélection avec une requete ajax
- Comment garder le 0 devant les chiffres sur excel - Guide
- Excel garder une ligne fixe - Guide
- Excel supprimer formule mais garder valeur ✓ - Forum Excel
- Outil sélection illustrator ne fonctionne pas ✓ - Forum Illustrator
- Samia, kevin et jason ont gardé la trace de leurs ventes quotidiennes du mois de juillet 2016. dans la feuille bilan, il manque les résultats de jason. insérez une colonne entre samia et kevin et reportez-y les résultats de jason. quel mot secret apparait en f2 ? - Forum LibreOffice / OpenOffice
8 réponses
en fait, par défaut, quand j'arrive sur la page, le premier select est directement connecté à la BD, et le deuxième select comprend dedans la liste de mon premier champ dans mon premier select.
Quand il y a une erreur dans mon formulaire, le premier select reste bon, mais le deuxième revient automatiquement au réglage par défaut..
Quand il y a une erreur dans mon formulaire, le premier select reste bon, mais le deuxième revient automatiquement au réglage par défaut..
voici le code ma page pour les deux selects:
et voici le code que va chercher ma requete ajax:
J' ai essayé pas mal de solution, mais je 'y arrive pas...T'y vois un peu plus clair?
<label for="cboType">Choisir le type</label> <select name="cboType" id="cboType"> <?php //Requête d'affichage pour les types $reqAffType = $bdd->query("SELECT * FROM type "); //Affichage des types while($donnees = $reqAffType->fetch()) { if($blnErreur) { //Affichage du type sélectionné en cas d'erreur du formulaire echo '<option value ="' . $donnees["id"] . '"'; if($donnees['id'] == $_POST['cboType']) { echo 'selected="selected"'; } echo '>' . utf8_encode($donnees['nom']) . '</option>'; } else { echo '<option value ="' . $donnees["id"] . '">' . utf8_encode($donnees['nom']) . '</option>'; } } $reqAffType->closeCursor(); ?> </select> <!--Select pour les categories--> <label for="cboCategorie">Choisir la catégories</label> <select name="cboCategorie" id="cboCategorie"> <?php //Récupération de l'id du type pour affichage des catégories $reqAffType = $bdd->query("SELECT * FROM type "); $donneesType = $reqAffType->fetch(); $reqAffType->closeCursor(); //Requête d'affichage des catégories suivant l'id du type $reqAffCategorie = $bdd->query("SELECT * FROM categorie WHERE idtype = " . $donneesType["id"]); //Affichage des catégories while($donnees = $reqAffCategorie->fetch()) { if($blnErreur) { //Affichage de la catégorie sélectionnée en cas d'erreur sur le formulaire echo '<option value ="' . $donnees["id"] . '"'; if($donnees['id'] == $_POST['cboCategorie']) { echo 'selected="selected"'; } echo '>' . utf8_encode($donnees['nom']) . '</option>'; } else { echo '<option value ="' . $donnees["id"] . '">' . utf8_encode($donnees['nom']) . '</option>'; } } $reqAffCategorie->closeCursor();
et voici le code que va chercher ma requete ajax:
try{ $bdd = new PDO("mysql:host=localhost;dbname=bddmalou","root", ""); } catch(Exception $e) { die("message:" . $e->getMessage()); } $reqAffCategorie = $bdd->query("SELECT * FROM categorie WHERE idtype = " . $_GET['id_type']); //Affichage des catégories while($donnees = $reqAffCategorie->fetch()) { if($blnErreur) { //Affichage de la catégorie sélectionnée en cas d'erreur sur le formulaire echo '<option value ="' . $donnees["id"] . '"'; if($donnees['id'] == $_POST['cboCategorie']) { echo 'selected="selected"'; } echo '>' . utf8_encode($donnees['nom']) . '</option>'; } else { echo '<option value ="' . $donnees["id"] . '">' . utf8_encode($donnees['nom']) . '</option>'; } } $reqAffCategorie->closeCursor();
J' ai essayé pas mal de solution, mais je 'y arrive pas...T'y vois un peu plus clair?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
<script>
$("document").ready(function(){
var cboType = $("#cboType");
var cboCategorie = $("#cboCategorie");
//Au changement du type slect:
$(cboType).change(function(){
var val = $(this).val();
$.ajax({
type:"GET",
url:"http://localhost/essaiSiteDuZero/BDDSiteZero/changeSelectCategorie.php",
data:"id_type="+val,
success:function(msg)
{
cboCategorie.html(msg);
}
});
});
});
</script>
$("document").ready(function(){
var cboType = $("#cboType");
var cboCategorie = $("#cboCategorie");
//Au changement du type slect:
$(cboType).change(function(){
var val = $(this).val();
$.ajax({
type:"GET",
url:"http://localhost/essaiSiteDuZero/BDDSiteZero/changeSelectCategorie.php",
data:"id_type="+val,
success:function(msg)
{
cboCategorie.html(msg);
}
});
});
});
</script>
teins j'ai un peu optimisé ton code sans changer l'algo et sécurisé un peu ta requête ajax
<label for="cboType">Choisir le type</label> <select name="cboType" id="cboType"> <?php //Requête d'affichage pour les types $reqAffType = $bdd->query('SELECT id,nom FROM type'); //Affichage des types $premierType = false; while($donnees = $reqAffType->fetch()) { if($premierType === false) $premierType = $donnees['id'] if($blnErreur) echo '<option value ="' . $donnees['id'] . '"'.(($donnees['id'] == $_POST['cboType'])? 'selected="selected"':'').'>'.utf8_encode($donnees['nom']).'</option>'; else echo '<option value ="' . $donnees['id'] . '">' . utf8_encode($donnees['nom']) . '</option>'; } $reqAffType->closeCursor(); ?> </select> <!--Select pour les categories--> <label for="cboCategorie">Choisir la catégories</label> <select name="cboCategorie" id="cboCategorie"> <?php //Requête d'affichage des catégories suivant l'id du type $req = $bdd->prepare('SELECT id,nom FROM categorie WHERE idtype = :idType'); $reqAffCategorie = $req->execute(array('idType' => $premierType)); //Affichage des catégories while($donnees = $reqAffCategorie->fetch()) { if($blnErreur) echo '<option value ="' . $donnees['id'] . '"'.(($donnees['id'] == $_POST['cboCategorie'])? 'selected="selected"':'').'>'.utf8_encode($donnees['nom']).'</option>'; else echo '<option value ="' . $donnees['id'] . '">' . utf8_encode($donnees['nom']) . '</option>'; } $reqAffCategorie->closeCursor(); try { $bdd = new PDO("mysql:host=localhost;dbname=bddmalou","root", ""); } catch(Exception $e) { die("message:" . $e->getMessage()); } $req = $bdd->prepare('SELECT id,nom FROM categorie WHERE idtype = :idType'); $reqAffCategorie = $req->execute(array('idType' => $_GET['id_type'])); //Affichage des catégories while($donnees = $reqAffCategorie->fetch()) { if($blnErreur) echo '<option value ="' . $donnees['id'] . '"'.(($donnees['id'] == $_POST['cboCategorie'])? 'selected="selected"' : '').'>'.utf8_encode($donnees['nom']).'</option>'; else echo '<option value ="' . $donnees['id'] . '">' . utf8_encode($donnees['nom']) . '</option>'; } $reqAffCategorie->closeCursor();
du coup je suis plus chez moi..
ça devrait améliorer quoi ce que tu as fais?
En tout cas merci pour tes réponses aussi rapides..
ça devrait améliorer quoi ce que tu as fais?
En tout cas merci pour tes réponses aussi rapides..
les requêtes préparé évitent les injections sql
il y avait une requête inutile puisque déjà faite plus haut
et a moins de d'avoir besoin de tout les champs d'une table il ne faut jamais faire SELECT * FROM
mais
SELECT champ1,champ2,champ3 FROM
ensuite quand tu ne veux récupérer ou modifier qu'une ligne ou un nombre de ligne connu il faut mettre des limits (ca manquait dans la requête préparé
$blnErreur correspond a quoi ?
je ne connais pas jQuery je ne l'utilise pas, je pense m'y mettre mais bon bref....
mais sinon rien ne me choque dans le code
Je ne suis pas sur de comprendre le problème, dis moi si c'est ça :
Quand tu transmet le formulaire (rafraichissement de la page) et qu'il y a une erreur.
le formulaire se réaffiche.
le premier select est gardé en cache par le navigateur donc celui qui était sélectionné s'affiche mais l'autre ne correspond plus puisqu'il n'est pas chargé...
du coup les 2 select ne correspondent plus
si c'est ça il y a 2 façon de faire
1 : charger le second select avec un xhr au chargement de la page (de la même facon que ton "change" pour les resynchroniser
2 : le faire en php avec une variable de session ou la variable post comme tu veux ou peux
il y avait une requête inutile puisque déjà faite plus haut
et a moins de d'avoir besoin de tout les champs d'une table il ne faut jamais faire SELECT * FROM
mais
SELECT champ1,champ2,champ3 FROM
ensuite quand tu ne veux récupérer ou modifier qu'une ligne ou un nombre de ligne connu il faut mettre des limits (ca manquait dans la requête préparé
$blnErreur correspond a quoi ?
je ne connais pas jQuery je ne l'utilise pas, je pense m'y mettre mais bon bref....
mais sinon rien ne me choque dans le code
Je ne suis pas sur de comprendre le problème, dis moi si c'est ça :
Quand tu transmet le formulaire (rafraichissement de la page) et qu'il y a une erreur.
le formulaire se réaffiche.
le premier select est gardé en cache par le navigateur donc celui qui était sélectionné s'affiche mais l'autre ne correspond plus puisqu'il n'est pas chargé...
du coup les 2 select ne correspondent plus
si c'est ça il y a 2 façon de faire
1 : charger le second select avec un xhr au chargement de la page (de la même facon que ton "change" pour les resynchroniser
2 : le faire en php avec une variable de session ou la variable post comme tu veux ou peux
Je te remercie pour tout tes conseils, j'ai compris pas mal de truc, notamment l'utilité des réquête préparées...:)
Du coup, j'ai tilisé la méthode POST pour récupérer la sélection, et ça fonctionne bien.
Mon $blnErreur, correspond à la variable qui détecte une erreur dans le formulaire.
Merci encore pour tes explications
Du coup, j'ai tilisé la méthode POST pour récupérer la sélection, et ça fonctionne bien.
Mon $blnErreur, correspond à la variable qui détecte une erreur dans le formulaire.
Merci encore pour tes explications