IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

HTML Discussion :

Envoi par POST de la "value" d'un checkbox non selectionné


Sujet :

HTML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Points : 72
    Points
    72
    Par défaut Envoi par POST de la "value" d'un checkbox non selectionné
    Bonjour à tous,

    Après plusieurs recherche dans différents sites et a travers plusieurs FAQ, je n'ai pas réussi à trouver comment forcer l'envoi d'input de type checkbox lorsque ceux ci sont unchecked.

    Soit la page suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="mailto:mail@srv.com" method="post">
    <input type="checkbox" name="check1" value="true" checked>gloubi<br>
    <input type="checkbox" name="check2" value="true" >boulga<br>
    <input type="submit" name="sendCheck" value="Test it !">
    </form>
    Si j'appuie sur le bouton "Test it !", je vais envoyer un mail qui aura comme texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    check1=true&sendCheck=Test+it+%21
    Or ce que j'aimerais ce serait plutôt quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    check1=true&check2=false&sendCheck=Test+it+%21
    J'ai essayé d'adapter un peu la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <script type="text/javascript">
    function formPost(elements, length)
    {
            for(var index=0;i<length;index++)
            {
                    if(elements[index].type=='checkbox'&&elements[index].checked)
                    {
                            elements[index].value="false";
                            elements[index].checked=true;
                    }
            }
            return true;
    }
    </script>
    <form action="mailto:mail@srv.com" method="post" onsubmit="return formPost(elements, length);">
    <input type="checkbox" name="check1" value="true" checked>gloubi<br>
    <input type="checkbox" name="check2" value="true" >boulga<br>
    <input type="submit" name="sendCheck" value="Test it !">
    </form>
    Mais, forcément, ça modifie directement le statut des checkbox non sélectionnées (elles deviennent sélectionnées).
    Bien entendu si je ne mets pas la ligne elements[index].checked=true; je n'ai pas ce probleme, mais je me retrouve alors avec le même cas que précedemment (valeur non prise en compte dans l'envoi).

    J'aimerais donc savoir s'il est possible de paramétrer le post pour que je puisse avoir ce "&check2=false" qui me manque.

    Par avance, .
    Joël.

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Aucune valeur n'est envoyée en POST pour les checkboxes non cochées et tu ne peux pas forcer cet envoi.

    Tu peux créer un tableau de checkboxes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="checkbox" name="check[]" value="gloubi" />
    <input type="checkbox" name="check[]" value="boulga" />
    Et ensuite faire un foreach en langage serveur de ce tableau de checkboxes.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Points : 72
    Points
    72
    Par défaut Wouahou, c'te rapidité !...
    Arf, c'est ce que je craignais.

    Bon, par contre avec la solution que tu as proposé, j'obtiens check%5B%5D=gloubi&sendCheck=Test+it+%21
    Je n'ai toujours qu'un checkbox dans ce cas.
    Si par for each tu sous entends que par déduction je sais lesquels ne sont pas selectionnés, ça ne m'interesse que moyennement.
    En fait si je veux obtenir ce résultat, c'est parce que coté serveur je n'aimerais pas faire la distinction entre une requete AJAX par Rico du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajaxEngine.sendRequest('selectCheck','gloubi=true');
    envoyée dans le onclick d'un checkbox et un POST d'un formulaire complet avec des checkbox.
    Dans mon cas, lors de l'exécution de la requete AJAX, toutes les checkbox se décochent, car le serveur ne voit pas la différence. Pour lui c'est comme si on avait sélectionné qu'une checkbox et qu'on avait fait un POST classique.
    Je ne sais pas si c'est très clair, mais de toutes façons, si ce n'est pas ce que tu sous entendais par for each, ce n'est pas important, c'est juste que j'ai mal compris ce que tu voulais m'expliquer.

    Quoiqu'il en soit merci de cette réponse si rapide.
    Joël.

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Heu, là tu n'envoies pas en POST mais en GET ...

    En POST, j'ai ça :

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Array
    (
        [check] => Array
            (
                [0] => gloubi
            )
    )
    dans le cas où le premier est coché, et ça quand ce sont les deux :

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array
    (
        [check] => Array
            (
                [0] => gloubi
                [1] => boulga
            )
    )
    Donc en effet, tu es obligé d'en déduire ceux qui sont cochés de ceux qui ne le sont pas.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Points : 72
    Points
    72
    Par défaut Merci pour tout
    Dommage, ca ne convient pas à mon problème.
    J'ai décidé de le faire côté serveur, apparemment ça demande un peu trop de bircolage côté client, et mieux vaut que ce bricolage ne saute pas à la figure des clients si possible .
    En tout cas merci d'avoir éclairci ce point, même si ça parait évident je n'avais pas trouvé de confirmation dans les FAQs et autres.

    A bientot,
    guejo.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Points : 97
    Points
    97
    Par défaut
    sinon, tu ne fait pas des checkbox mais des radio et tu fait un truc du style
    gloubi : OUI NON
    boulga OUI NON

    et là tu es sur que des deux valeurs sont envoyées

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Ah la la, si on pouvait adapter la volonté des clients ce serait plus facile ce métier

    Merci pour le conseil, mais cette option n'est pas recevable pour mes supérieurs

    La solution ne doit pas modifier l'affichage, c'est une contrainte pimordiale dans mon cas.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Pourquoi ne pas tout simplement creer un input type hidden avec qqchose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <script language="javascript">
    // Code non teste
    function checkifchecked(from,to) {
    if(from.checked) {
    to.value="true";
    }
    else {
    to.value="false";
    }
    }
    </script>
    <form name="form">
    <input type="hidden" name="checkbox1">
    <input type="checkbox" name="checkbox1_sys" onclick="checkifchecked(document.form.checkbox1_sys,document.form.checkbox1)">
    </form>
    Et recuperer la valeur de checkbox1 au lieu de checkbox1_sys...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encodage pour envoi par POST
    Par Sylvercis dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/06/2014, 23h00
  2. Ajax avec jQuery: envoi par POST retour en JSON
    Par band22 dans le forum jQuery
    Réponses: 1
    Dernier message: 14/10/2011, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo