checkbox et $_POST

Le
Freegate
Bonjour,

Lorsque dans un formulaire il y a des champs de type checkbox non
cochés, les POST['checkbox'] ne sont pas initialisés, et les champs
correspondants dans la base mysql ne peuvent se mettre à jour avec la
valeur "0". Par contre quand la case est cochée le POST renvoie bien la
valeur "1".
Bien sur on peut tester l'initialisation du POST avec un if. Mais comme
j'ai beaucoup de formulaires avec beaucoup de champs, j'ai automatisé
la génération des formulaires ainsi que leur update avec un script PHP
qui utilise l'indice et la valeur des $_POST.
j'ai donc eu l'idée d'utiliser les champs de type hidden qui auront
leur $POST forcement initialisés quelque soit leur valeur. Mon astuce
consiste à modifier le "value" d'un champ hidden de 0 à 1 lorsque je
coche la case en question. Mais manifestement après test, le champ
hidden (qui doit porter le même nom que la checkbox pour l'inscription
dans la BD) n'est pas mis à jour. Vous trouverez ci-joint la page de
code en question :

<script language="javascript">

function value_box(mybox)
{
if
(mybox.checked==true){this.value=1;document.myform.active.value=1} else
{this.value=0;document.myform.active.value=0;}
}

</script>
<body>


<form action="test.php" method="post" name="myform">

<input name="active" onclick='value_box(this)' type='checkbox'
value="1" checked="checked" />
<input type="hidden" name="active" value="1" />
<input type='submit' name='submit' value='Enregistrer' />
</form>

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SAM
Le #10857731
Freegate a écrit :
Bonjour,

Lorsque dans un formulaire il y a des champs de type checkbox non
cochés, les POST['checkbox'] ne sont pas initialisés, et les champs
correspondants dans la base mysql ne peuvent se mettre à jour avec la
valeur "0". Par contre quand la case est cochée le POST renvoie bien la
valeur "1".
Bien sur on peut tester l'initialisation du POST avec un if. Mais comme
j'ai beaucoup de formulaires avec beaucoup de champs, j'ai automatisé la
génération des formulaires ainsi que leur update avec un script PHP qui
utilise l'indice et la valeur des $_POST.
j'ai donc eu l'idée d'utiliser les champs de type hidden qui auront leur
$POST forcement initialisés quelque soit leur valeur. Mon astuce
consiste à modifier le "value" d'un champ hidden de 0 à 1 lorsque je
coche la case en question. Mais manifestement après test, le champ
hidden (qui doit porter le même nom que la checkbox pour l'inscription
dans la BD) n'est pas mis à jour. Vous trouverez ci-joint la page de
code en question :




Comme on a 2 éléments de même nom, faut s'adresser au 2ième : active[1]

Voici pour tout élément de tous formulaires
(le form n'a pas besoin d'être nommé pour être trouvé) :

<script type="text/javascript">

function value_box(mybox)
{
mybox.value = mybox.form.elements[mybox.name][1].value = mybox.checked?
'1' : '0';
}
</script>


Démo :
Parfois on n'a qu'un 'active' parfois 2.
Ça va gazer pour MySql ?

--
sm
Freegate
Le #11175791
Le 29/06/2008, SAM a supposé :
Freegate a écrit :
Bonjour,

Lorsque dans un formulaire il y a des champs de type checkbox non cochés,
les POST['checkbox'] ne sont pas initialisés, et les champs correspondants
dans la base mysql ne peuvent se mettre à jour avec la valeur "0". Par
contre quand la case est cochée le POST renvoie bien la valeur "1".
Bien sur on peut tester l'initialisation du POST avec un if. Mais comme
j'ai beaucoup de formulaires avec beaucoup de champs, j'ai automatisé la
génération des formulaires ainsi que leur update avec un script PHP qui
utilise l'indice et la valeur des $_POST.
j'ai donc eu l'idée d'utiliser les champs de type hidden qui auront leur
$POST forcement initialisés quelque soit leur valeur. Mon astuce consiste à
modifier le "value" d'un champ hidden de 0 à 1 lorsque je coche la case
en question. Mais manifestement après test, le champ hidden (qui doit
porter le même nom que la checkbox pour l'inscription dans la BD) n'est pas
mis à jour. Vous trouverez ci-joint la page de code en question :




Comme on a 2 éléments de même nom, faut s'adresser au 2ième : active[1]

Voici pour tout élément de tous formulaires
(le form n'a pas besoin d'être nommé pour être trouvé) :

<script type="text/javascript">

function value_box(mybox)
{
mybox.value = mybox.form.elements[mybox.name][1].value = mybox.checked?
'1' : '0';
}
</script>


Démo :
Parfois on n'a qu'un 'active' parfois 2.
Ça va gazer pour MySql ?



ça marche super, même je ne comprends pas tout.
As tu un site qui pourrait m'aider à décrypter ta syntaxe ?

Merci
SAM
Le #11176341
Freegate a écrit :
Le 29/06/2008, SAM a supposé :
Freegate a écrit :
Bonjour,

j'ai donc eu l'idée d'utiliser les champs de type hidden qui auront
leur $POST forcement initialisés quelque soit leur valeur. Mon astuce
consiste à modifier le "value" d'un champ hidden de 0 à 1 lorsque
je coche la case en question. Mais manifestement après test, le champ
hidden (qui doit porter le même nom que la checkbox pour
l'inscription dans la BD) n'est pas mis à jour. Vous trouverez
ci-joint la page de code en question :




Comme on a 2 éléments de même nom, faut s'adresser au 2ième : active[1]

Voici pour tout élément de tous formulaires
(le form n'a pas besoin d'être nommé pour être trouvé) :

<script type="text/javascript">

function value_box(mybox)
{
mybox.value = mybox.form.elements[mybox.name][1].value = mybox.checked?
'1' : '0';
}
</script>


Démo :
Parfois on n'a qu'un 'active' parfois 2.
Ça va gazer pour MySql ?



ça marche super, même je ne comprends pas tout.



Comme ça on est 2 : je ne comprends pas ce que tu fais avec ton PHP ;-)

As tu un site qui pourrait m'aider à décrypter ta syntaxe ?



"ma" syntaxe ?


1) function value_box(mybox)

mybox est le truc machin qui a le onclick
dans le truc machin il se désigne lui-même par 'this'

<input name="truc_machin" onclick="value_box(this);">

2) mybox.value
le '.' est un signe d'appartenance et non pas d'addition comme en php
c'est donc le value de this et this ici est l'input truc_machin

3) mybox.form.elements[mybox.name][1].value

mybox.form = le form qui contient mybox
mybox.form.elements = les éléments de ce form
mybox.form.elements[mybox.name] = les éléments nommés comme mybox
mybox.form.elements[mybox.name][1] = le second "truc_machin"

4) mybox.checked?

mybox.checked = bon là on comprend, non ?
mybox.checked? = "truc_machin" (le 1er) est-il coché? true/false

5) '1' : '0'

si la condition précédente est vraie hop ! '1'
sinon '0'

M'enfin les 4 et 5, on a ça aussi en php

Ce qui nous donne :
la valeur de l'élément (cliqué) a la valeur de l'élément qui a le même
nom mais en position 2 qui lui même prend la valeur 1 ou 0 selon que
l'élément (qui a le onclick) est coché ou non

Résultat :
si la checkbox est cochée :
- elle prend la valeur 1
- le hidden de même nom que la checbox prend la valeur 1
snon :
- les deux prennent la valeur 0

Un cours de JS ?

et puis ... Google ?

--
sm
Publicité
Poster une réponse
Anonyme