[php] Checkbox : Différencier non cochée et absente

Checkbox : Différencier non cochée et absente [php] - PHP - Programmation

Marsh Posté le 18-12-2008 à 15:14:35    

Bonjour, en php5, je me trouve confronté à un soucis.
Une page avec plusieurs formulaires (dont un avec une checkbox)
J'aimerai pouvoir faire la différence entre "on a validé le formulaire dans lequel il y avait la textbox, mais elle n'était pas cochée" et "on a validé un autre formulaire" (et on s'en fiche de la texbox).
 
Le soucis c'est que si la case n'est pas cochée la variable n'existe même pas dans le $_POST on dirait :/


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 18-12-2008 à 15:14:35   

Reply

Marsh Posté le 18-12-2008 à 15:49:43    

Tu ne peux pas faire la différence entre case inexistante et case non cochée (ça vient du protocole HTTP (methodes GET et POST)).
Tu dois savoir avant si la case est censée être présente sur ta page, si oui et qu'aucune info n'est envoyée, ça veut dire qu'elle n'est pas cochée (il n'y a pas d'autre moyen simple).
 


---------------
By bob.
Reply

Marsh Posté le 18-12-2008 à 15:50:46    

Ou bien un champs hidden dans ton form qui est mis à jour en js et qui prend la valeur de ta case coche.
Par contre, ça nécessite js :spamafote:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 18-12-2008 à 17:13:40    

heuu c'est très simple :
 
tu ajoutes un champs hidden par formulaire.
Dans le forumaire1 tu mets name="form1", dans le deuxième, name="form2"
 
Pour détecter lequel a été soumis, tu fais juste un check :
 
if(isset($_POST['form1']))
//traiter form 1
elseif(isset($_POST['form2']))
//traiter form2
else
//mettre les éventuelles valeurs par defaut dans tes forms
 
 
 
et si ta case est dans form1,
tu fais juste un if(empty($_POST['maCaseACocher'])) (qui se trouve dans le name="" )
dans le if(isset($_POST['form1'])) {}
et si tu veux en plus qu'elle te retourne une valeur (ex "oui" ) tu mets  
<input type="checkbox" name="maCaseACocher" id="maCaseACocher" value="oui"  />
 
[²]ortho+grammaire+expliquer mieux O_o


Message édité par Profil supprimé le 18-12-2008 à 17:26:09
Reply

Marsh Posté le 18-12-2008 à 17:49:54    

J'avais aussi la solution du JS mais bon, c'est pas top :/
 
C'est une case qui permet de choisir d'afficher ou de masquer des infos sur une page, page sur laquelle on retrouve des lignes de tableau avec dans chaque ligne un form ..  
 
Bon, la solution la plus simple ne nécessitant pas de JS est donc de mettre 2 boutons radio "Afficher" et "masquer" :D


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 18-12-2008 à 23:33:02    

La plus simple c'est la checkbox, et c'est super facile:  
cochée => tu reçois l'info en GET ou POST à la soumission du formulaire
pas cochée => tu reçois rien
 
Te reste plus qu'à verifier si tu reçois ou non pour décider...

Reply

Marsh Posté le 19-12-2008 à 07:34:55    

vanadium a écrit :

La plus simple c'est la checkbox, et c'est super facile:  
cochée => tu reçois l'info en GET ou POST à la soumission du formulaire
pas cochée => tu reçois rien
 
Te reste plus qu'à verifier si tu reçois ou non pour décider...


Merci de lire le sujet   :sarcastic:  
 
C'est ce qu'il avait fait, et de ne rien recevoir lorsque la case n'est pas cochée lui pose problème. C'est le sujet initial du post.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 19-12-2008 à 16:34:02    

J'ai très bien lu le sujet et je ne vois pas en quoi ça représente une difficulté, isset() ça existe en php, je vois pas comment on peut coder sans...

Reply

Marsh Posté le 19-12-2008 à 16:50:23    

Dans le cas d'une checkbox non-cochée, avec isset ou quoi que ce soit, on en fait pas la différence entre "checkbox pas cochée" et "checkbox non présente initialement dans son formulaire". Et c'est ça le sujet initial du topic : faire la différence entre les deux.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 19-12-2008 à 16:53:30    

vanadium a écrit :

J'ai très bien lu le sujet ...


 
Oui ok d'accord ... mais en fait non, toujours pas ... :sarcastic:  
 
Le isset() renverra false si la checkbox n'est pas cochée OU ( dans son cas ) si la checkbox n'existe pas dans le formulaire !
C'est cette différenciation qu'il veut faire ...  
 
La solution de Corten me semblerait une bonne idée.
 
edit: grilled ! sorry !

Message cité 1 fois
Message édité par Mr Mala le 19-12-2008 à 16:53:52
Reply

Marsh Posté le 19-12-2008 à 16:53:30   

Reply

Marsh Posté le 19-12-2008 à 16:54:49    

Mr Mala a écrit :


 
Oui ok d'accord ... mais en fait non, toujours pas ... :sarcastic:  
 
Le isset() renverra false si la checkbox n'est pas cochée OU ( dans son cas ) si la checkbox n'existe pas dans le formulaire !
C'est cette différenciation qu'il veut faire ...  
 
La solution de Corten me semblerait une bonne idée.
 
edit: grilled ! sorry !


Merci, je me sens moins seul ! ;)


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 19-12-2008 à 17:15:24    

tu les affiches au chargement de la page je pense
 
rien ne t'empêche de serialisé dans une champ input de type hidden les nom des champs présents et de les récupérés après l'envoie du formulaire par un explode


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 03-03-2010 à 14:12:39    

Le poste date un peu, mais comme j'ai trouvé une solution (sans javascript), je la transmet !
 
J'ai eu exactement le même problème : je voulais savoir si une checkbox avait été cochée ou non dans un formulaire et obtenir en retour 0 ou 1 ! Le fait qu'une checkbox non cochée ne renvoie rien me gênait car je ne pouvais prévoir si la checkbox était affichée ou non (génération automatique) dans le formulaire de saisie.
 
Voici l'astuce pour contourner le problème:
<input type="hidden" name="myCheckbox" value="0" />
<input type="checkbox" name="myCheckbox" value="1">
 
Si la checkbox n'est pas cochée, l'input de type hidden est renvoyé. Si la checkbox est cochée, l'input de type checkbox est prioritaire (car placé en deuxième, l'ordre d'écriture est donc important !)
 
Le fait de préciser value="1" dans le checkbox force la valeur de la variable retournée à 1 si la checkbox a été cochée (sinon, par défaut, la valeur retournée est "on" )
 
J'espère que cette astuce en aidera plusieurs !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed