checkbox non compatissante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : checkbox non compatissante

Re: checkbox non compatissante

par Eva » 18 févr. 2010, 03:57

Merci de votre aide à tous les 2 !

Pour info, voici une petite fonction qui m'a bien aidé :

Code : Tout sélectionner

function getCheckedValue(field) { field = $('#' + field) txt = "" for (i = 0; i < field.length; i++) { if (field[i].checked) { txt = field[i].value } } if (txt == "") { return "0" } else { return "1" } }
Maintenant, il n'y a plus qu'à déclarer mes variables sous la forme :

Code : Tout sélectionner

mavariable: getCheckedValue('mavariable'),
et le tour est joué !

Merci encore de votre aide !

Eva

Re: checkbox non compatissante

par Eva » 18 févr. 2010, 00:55

Merci Ryle ;)

En fait, les 2 syntaxes :

Code : Tout sélectionner

$('#allerretour').is(':checked')
et

Code : Tout sélectionner

$('#allerretour').checked
ne fonctionnent pas dans le sens où elles désactivent totalement les effets Ajax du formulaire. Mais il y a une bonne nouvelle, c'est que la 1ere proposition a le mérite de me transmettre l'info de la checkbox (cochée ou non cochée), alors que la 2nde proposition me renvoie systématiquement la même valeur...Sans doute un probleme de syntaxe, mais je n'y connais rien en javascript :wink:

Eva

Re: checkbox non compatissante

par Ryle » 17 févr. 2010, 23:05

C'est un problème lié au fait que tu soumettes le formulaire en ajax et effectivement au niveau de ton javascript :)

En effet, lorsque tu fais appel à

Code : Tout sélectionner

$('#allerretour').val()
jQuery te retourne la valeur de l'élément dont l'id est "allerretour" (que la case soit cochée ou non), tu récupères donc à chaque la valeur "AR". Pour savoir si la case est cochée avec jQuery tu peux utiliser :

Code : Tout sélectionner

$('#allerretour').is(':checked')
qui te renverra alors true ou false en fonction du résultat.
A vérifier, mais je pense que tu peux le faire également comme ceci :

Code : Tout sélectionner

$('#allerretour').checked

@Skikit : dans un mode d'envoi classique du formulaire, quelque soit les valeurs de tes checkbox, celles-ci ne sont transmises que lorsqu'elles sont cochées (si aucune valeur n'est spécifiée pour la case, c'est la chaine "on" qui est transmise lorsqu'elle est cochée ;))

Re: checkbox non compatissante

par Eva » 17 févr. 2010, 18:52

Je viens de me rendre compte que cette variable était également appelée dans un javascript (jquery). En le desactivant, la checkbox a effectivement bien fonctionnée :

Code : Tout sélectionner

jQuery(document).ready(function(){ $('#contactform').submit(function(){ var action = $(this).attr('action'); $("#message").slideUp(750,function() { $('#message').hide(); $('#submit') .after('<img src="assets/ajax-loader.gif" class="loader" />') .attr('disabled','disabled'); $.post(action, { depart: $('#depart').val(), arrivee: $('#arrivee').val(), date: $('#date').val(), heure: $('#heure').val(), allerretour: $('#allerretour').val(), miseadispo: $('#miseadispo').val(), duree: $('#duree').val(), protections: $('#protections').val(), bagages: $('#bagages').val(), nom: $('#nom').val(), societe: $('#societe').val(), adresse: $('#adresse').val(), codepostal: $('#codepostal').val(), ville: $('#ville').val(), telephone: $('#telephone').val(), email: $('#email').val(), commentaires: $('#commentaires').val(), fidelite: $('#fidelite').val(), facturation: $('#facturation').val(), conditions: $('#conditions').val() }, function(data){ document.getElementById('message').innerHTML = data; $('#message').slideDown('slow'); $('#contactform img.loader').fadeOut('slow',function(){$(this).remove()}); $('#contactform #submit').attr('disabled',''); if(data.match('success') != null) $('#contactform').slideUp('slow'); } ); }); return false; }); });
Visiblement, cette ligne ne convient pas :

Code : Tout sélectionner

allerretour: $('#allerretour').val(),

Re: checkbox non compatissante

par Skikit » 17 févr. 2010, 18:07

C'est encore une fois normal :)
Ta checkbox te renvoit un booléen : true si cochée, false si non cochée.
Si tu utilises ta variable $allerretour directement dans ton mail, ça va t'afficher 1 si true et soit 0 soit rien du tout si false.
Utilise donc plutôt une chaîne dans ton cas :
if(!empty($_POST['allerretour']))
       $allerretour = "Oui";
   else 
       $allerretour = "Non";
J'ai testé le code que tu as posté et ça fonctionne sur ma machine, si ta variable $allerretour a toujours la même valeur, c'est que tu y touches dans une partie du code que tu as caché ou alors que notre fonction empty() ne fait pas la même chose... Dans ce cas test directement :
if(isset($_POST['allerretour']))
       $allerretour = "Oui";
else 
       $allerretour = "Non";

Re: checkbox non compatissante

par Eva » 17 févr. 2010, 17:50

Merci Skikit, malheureusement le problème perdure...Que la case soit cochée ou non, je reçois :

Code : Tout sélectionner

Aller/Retour : "1"
par mail.

mon fichier contact.php ressemble à çà (j'ai éliminé les lignes non concernées) :

Code : Tout sélectionner

<?php if(!$_POST) exit; .... if(!empty($_POST['allerretour'])) $allerretour = true; else $allerretour = false; ... $address = "[email protected]"; $e_subject = 'Une demande de ' . $name . '.'; $e_body = "message.\r\n\n"; $e_ligne1 = "Ville : \"$depart\"\r\n\n"; $e_ligne2 = "Aller-retour : \" $allerretour\"\r\n\n"; ... $msg = $e_body . $e_ligne1 . $e_ligne2; if(mail($address, $e_subject, $msg, "From: [email protected]\r\nReply-To: $email\r\nReturn-Path: $email\r\n")) { echo "<fieldset>"; echo "<div id='success_page'>"; echo "<h1>Message envoyé.</h1>"; echo "</div>"; echo "</fieldset>"; } else { echo 'ERROR!'; } } function isEmail($email) { return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); } ?>
Incompréhensible...Tous les autres champs de type text, dropdown, textarea sont correctement récupérés, à l'exception de ces foutus checkboxes !

Re: checkbox non compatissante

par Skikit » 17 févr. 2010, 15:52

Dans le formulaire :
<input name="allerretour" type="checkbox" id="allerretour" />
Dans la page de traitement :
if(!empty($_POST['allerretour']))
    $allerretour = true;
else
    $allerretour = false;

Re: checkbox non compatissante

par Eva » 17 févr. 2010, 12:18

Merci de ta réponse...Mais on n'est pas censé pouvoir donner la valeur que l'on souhaite à une checkbox ? Le cas échéant, quelle valeur est-ce que je dois donner ?

Eva

Re: checkbox non compatissante

par Skikit » 17 févr. 2010, 11:38

Salut,

C'est normal... tu donnes la valeur "AR" à ta checkbox

checkbox non compatissante

par Eva » 16 févr. 2010, 16:46

Bonjour à tous,

Je créé actuellement un formulaire dont les informations sont destinées à être transmises par mail. L'une des infos que je souhaite recueillir est de savoir si une checkbox a été cochée ou non :

Code : Tout sélectionner

<form method="post" action="contact.php" name="contactform" id="contactform"> ... <label><span class="required"></label> <input name="allerretour" type="checkbox" id="allerretour" value="AR" />
Je récupère donc l'info via contact.php :

Code : Tout sélectionner

if (isset($_POST['submit'])) { $allerretour = NULL; if(isset($_POST['allerretour'])){ $allerretour = $_POST['allerretour']; } else { $allerretour = FALSE; }
Le problème, c'est que j'obtiens toujours la même valeur, que la case soit cochée ou non. J'ai essayé de multiples façons, à chaque fois le résultat est le même :

Code : Tout sélectionner

if(!empty($allerretour)){ $allerretour= "Oui";} else {$allerretour= "Non"; };
Je finis par me poser de sérieuses questions sur ma compréhension des formulaires.

Si vous avez des suggestions, je suis preneuse ;)

Merci

Eva