Garder la sélection avec une requete ajax
Résolu/Fermé
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
-
10 nov. 2012 à 17:36
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 - 11 nov. 2012 à 10:44
mipolette Messages postés 99 Date d'inscription lundi 20 août 2012 Statut Membre Dernière intervention 22 mai 2014 - 11 nov. 2012 à 10:44
A voir également:
- Garder la sélection avec une requete ajax
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Excel garder une ligne fixe - Guide
- L'indice n'appartient pas à la sélection vba ✓ - Forum VB / VBA
- 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
- Les sites web peuvent garder la trace de votre navigation en déposant des - Forum Réseaux sociaux
8 réponses
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 19:11
10 nov. 2012 à 19:11
tu perds la sélection au niveau du premier select ?
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 19:13
10 nov. 2012 à 19:13
non pour le premier, ça fonctionne bien...
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 19:17
10 nov. 2012 à 19:17
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..
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 19:22
10 nov. 2012 à 19:22
il faut plutôt la fonction javascript pour ton problème
qu'est ce qu'il peut y avoir comme erreur ?
qu'est ce qu'il peut y avoir comme erreur ?
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 19:32
10 nov. 2012 à 19:32
en fait ma page est un formulaire d'ajout de produits, et donc parmis les erreurs, tu peux avoir :
-abscence d'écriture dans les champs
-des mauvais caractères dans les champs
-photos trop volumineuse
des vérifs comme ça quoi...
-abscence d'écriture dans les champs
-des mauvais caractères dans les champs
-photos trop volumineuse
des vérifs comme ça quoi...
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 19:35
10 nov. 2012 à 19:35
quel rapport avec le select ?
sans code c'est difficile de comprendre...
sans code c'est difficile de comprendre...
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 19:52
10 nov. 2012 à 19:52
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?
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 19:56
10 nov. 2012 à 19:56
il me faut le javascript aussi
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 19:59
10 nov. 2012 à 19:59
<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>
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 20:11
10 nov. 2012 à 20:11
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();
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
10 nov. 2012 à 20:23
10 nov. 2012 à 20:23
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..
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
10 nov. 2012 à 21:32
10 nov. 2012 à 21:32
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
mipolette
Messages postés
99
Date d'inscription
lundi 20 août 2012
Statut
Membre
Dernière intervention
22 mai 2014
99
11 nov. 2012 à 10:44
11 nov. 2012 à 10:44
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