J'ai une première liste déroulante que je prénom "Couleur". Dedans j'ai 3 couleurs (bleu clair, bleu foncé et moutarde).
Quand je choisi une couleur, une 2ème liste déroulante s'affiche et je choisi d'autres couleur.
Exemple :
Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre.
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur1').hide(); // on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '137') { // si "autre"
$('#couleur1').show();
} else {
$('#couleur1').hide();
}
}
});
});
</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur2').hide(); // on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '154') { // si "autre"
$('#couleur2').show();
} else {
$('#couleur2').hide();
}
}
});
});
</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur3').hide(); // on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '155') { // si "autre"
$('#couleur3').show();
} else {
$('#couleur3').hide();
}
}
});
});
</script>
"Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre."
Ta requête fait de la lecture (SELECT), mais, tu parles d'insertion (INSERT INTO). Et "s'enregistre", que veux-tu dire ? Et où ? Dans la BDD, dans la liste déroulante, autre part ?
"Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre."
Ta requête fait de la lecture (SELECT), mais, tu parles d'insertion (INSERT INTO). Et "s'enregistre", que veux-tu dire ? Et où ? Dans la BDD, dans la liste déroulante, autre part ?
Quand tu dis que c'est toujours la 3ème couleur qui s'enregistre, où s'enregistre-t-elle ? Et est-ce cette couleur qui s'enregistre même si tu sélectionnes une autre couleur ?
Peut-être que ton while ligne 12 de ton premier code source est mal conçu.
Les nombres magiques sont des variables, ou plus souvent des constantes, mais qui ne sont pas stockées et inscrits directement, comme par magie, dans le code. Par exemple, à une ligne, tu testes si valeur vaut 155. Ça signifie quoi 155 ? En commentaire, tu vérifies si valeur vaut "autre", pourquoi ne pas créer une variable de type chaîne de caractères ? Ou mieux, si la valeur possible est OUI ou NON, une variable booléenne ?
Quand tu dis que c'est toujours la 3ème couleur qui s'enregistre, où s'enregistre-t-elle ? Et est-ce cette couleur qui s'enregistre même si tu sélectionnes une autre couleur ?
Peut-être que ton while ligne 12 de ton premier code source est mal conçu.
Les nombres magiques sont des variables, ou plus souvent des constantes, mais qui ne sont pas stockées et inscrits directement, comme par magie, dans le code. Par exemple, à une ligne, tu testes si valeur vaut 155. Ça signifie quoi 155 ? En commentaire, tu vérifies si valeur vaut "autre", pourquoi ne pas créer une variable de type chaîne de caractères ? Ou mieux, si la valeur possible est OUI ou NON, une variable booléenne ?
Bonjour,
Elle s'enregistre dans la BDD.
Oui même si je change de couleur c'est toujours la 3ème qui s'enregistre.
C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.
Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.
C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.
Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.
(teste par un var_dump)
- Edité par julp il y a environ 22 heures
Hello,
Quel est le nom de ce genre de chose "name="texte01[]""? Pour que je fasse des recherches.
Tu veux que je fasse un var_dump sur quelle variable?
Pour ma part, je t'interrogeais pour qu'on ait des pistes. Je n'ai pas la technique en PHP. Quand tu as dit que ça s'enregistrait dans la BDD, je me suis posé la question ensuite : si on sélectionne X fois la même couleur alors elle va s'enregistrer X fois dans la BDD, non ? Ce qui est totalement contre-productif.
C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.
Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.
C'est normal, tu ne peux pas insérer un tableau comme ça. De toute façon, tu ne devrais pas stocker plusieurs valeurs dans une même colonne pour commencer.
Il ne devrait pas être nécessaire de préciser ces clés 1, 2, 3.
C'est normal, tu ne peux pas insérer un tableau comme ça. De toute façon, tu ne devrais pas stocker plusieurs valeurs dans une même colonne pour commencer.
Il ne devrait pas être nécessaire de préciser ces clés 1, 2, 3.
- Edité par julp il y a moins de 30s
Je ne veux pas enregistrer plusieurs valeur dans une même colonne. Au contraire, je n'en veux qu'une.
Je vais réexpliquer mon code.
J'ai une première liste déroulante que je prénom "Couleur". Dedans j'ai 3 couleurs
- bleu clair
- bleu foncé
- moutarde.
Si je sélectionne "bleu clair", une 2ème liste déroulante s'affiche grace à javascript et la j'ai
- bl1
- bl2
Si je décide plutôt le bleu foncé, alors c'est une autre liste déroulante qui s'affiche avec
- bf1
- bf2
etc.
Dans ma colonne "texte01" j'ai sois bc1, bc2, bf1 ou bf2 qui s'enregistre
Erf, désolé, je n'avais pas compris ton problème, toute l'approche n'est pas bonne, il te faudrait surtout du Javascript parce que tu ne dois pas avoir les 3 select actifs pour les couleurs "finales" dans le DOM en même temps sinon, forcément, ou tu vas avoir la dernière à apparaître ou les trois (suivant leurs name).
Ok, j'avais oublié ton code JS n'étant pas remonté jusqu'au premier post mais show/hide ne va pas convenir/être suffisant car cacher quelque chose fait qu'il est toujours présent dans le DOM donc le select en est toujours envoyé (d'où l'écrasement observé au départ). Le plus simple, dans ce cas, c'est avant tout de passer le select en disabled car les champs disabled ne sont pas envoyés.
Si j'ai bonne mémoire en plus de $('...').hide(); il faudrait faire un $('... select').prop('disabled', true); (false lors du show - peut être restreindre le sélecteur).
Une autre option (sans jeu de mot), mais je ne pense pas que ce serait plus simple dans le cas présent, pourrait être de n'avoir qu'un select au lieu des 3 pour le vider de ces options et n'y (re)mettre que celles qui sont applicables.
Erf, désolé, je n'avais pas compris ton problème, toute l'approche n'est pas bonne, il te faudrait surtout du Javascript parce que tu ne dois pas avoir les 3 select actifs pour les couleurs "finales" dans le DOM en même temps sinon, forcément, ou tu vas avoir la dernière à apparaître ou les trois (suivant leurs name).
Ok, j'avais oublié ton code JS n'étant pas remonté jusqu'au premier post mais show/hide ne va pas convenir/être suffisant car cacher quelque chose fait qu'il est toujours présent dans le DOM donc le select en est toujours envoyé (d'où l'écrasement observé au départ). Le plus simple, dans ce cas, c'est avant tout de passer le select en disabled car les champs disabled ne sont pas envoyés.
Si j'ai bonne mémoire en plus de $('...').hide(); il faudrait faire un $('... select').prop('disabled', false); (true lors du show - peut être restreindre le sélecteur).
Une autre option (sans jeu de mot), mais je ne pense pas que ce serait plus simple dans le cas présent, pourrait être de n'avoir qu'un select au lieu des 3 pour le vider de ces options et n'y (re)mettre que celles qui sont applicables.
- Edité par julp il y a environ 13 heures
J'ai fait ceci :
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur1').hide(); // on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '137') { // si "autre"
$('#couleur1').show();
$('#couleur1 select').prop('disabled', true);
} else {
$('#couleur1').hide();
$('#couleur1 select').prop('disabled', false);
}
}
});
});
</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur2').hide(); // on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '154') { // si "autre"
$('#couleur2').show();
$('#couleur2 select').prop('disabled', true);
} else {
$('#couleur2').hide();
$('#couleur2 select').prop('disabled', false);
}
}
});
});
</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
$('#couleur3').hide();// on ne cache pas le champ par défaut
$('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée
if(valeur != '') { // si non vide
if(valeur == '155') { // si "autre"
$('#couleur3').show();
$('#couleur3 select').prop('disabled', true);
} else {
$('#couleur3').hide();
$('#couleur3 select').prop('disabled', false);
}
}
});
});
</script>
Par contre seulement le 1er select s'affiche pas les autres.
Oh, le boulet, j'ai inversé les true/false pour disabled.
> Par contre seulement le 1er select s'affiche pas les autres.
Pas sûr de comprendre : c'est-à-dire ? Si j'ai le temps, j'essaie de tester le truc.
Sur les // on ne cache pas le champ par défaut il faudrait aussi faire le disabled (la négation est de trop dans le commentaire, non ?)
Tes select ne peuvent pas avoir le même id non plus.
Tu n'as pas moyen de DRY ton code JS ? Tu as trois fois le même code, y compris le chargement de jQuery. Tu pourrais faire tous les show/hide & cie dans la même fonction. D'aileurs, les id hardcodés côté JS, ce n'est pas terrible.
Oh, le boulet, j'ai inversé les true/false pour disabled.
> Par contre seulement le 1er select s'affiche pas les autres.
Pas sûr de comprendre : c'est-à-dire ? Si j'ai le temps, j'essaie de tester le truc.
Sur les // on ne cache pas le champ par défaut il faudrait aussi faire le disabled (la négation est de trop dans le commentaire, non ?)
Tes select ne peuvent pas avoir le même id non plus.
Tu n'as pas moyen de DRY ton code JS ? Tu as trois fois le même code, y compris le chargement de jQuery. Tu pourrais faire tous les show/hide & cie dans la même fonction. D'aileurs, les id hardcodés côté JS, ce n'est pas terrible.
- Edité par julp il y a environ 1 heure
En java j'y connais vraiment rien.
C'est grâce à ce forum que l'on m'a aider à le créer
On m'avait aidé pour 1 "select" et comme là j'ai besoin de 3 donc j'ai multiplier avec ce code.
Surement qu'il faut le DRY mais j'y connais pas grand chose.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli