CheckBox PHP

Hellowz
Invité n'ayant pas de compte PHPfrance

09 avr. 2015, 20:49

Bonsoir tout le monde,
Je souhaite faire un truc simple, mais je ne sais pas pourquoi... je galère :D

J'ai une checkbox comme y s'en suite :

Code : Tout sélectionner

<input type="checkbox" name="valeur" id=valeur" class="css-checkbox" checked="checked"/>
Je voudrais que si la case est cochée, la valeur soit de 1, sinon de 0.
J'envoie tout ça en bdd.

Merci de votre aide,
Hellowz

Avatar du membre
Mammouth du PHP | 1609 Messages

09 avr. 2015, 21:38

Salut Hellowz,

En fait le principe de la case à cocher est que si elle est cochée le champ est transmis avec sa valeur et si elle n'est pas cochée le champ n'est pas transmis.
Développeur web depuis + de 20 ans

Hellowz
Invité n'ayant pas de compte PHPfrance

09 avr. 2015, 23:06

Pourtant ça ne marche pas.
Quelqu'un aurait un exemple de code ou autres :)

Mammouth du PHP | 688 Messages

09 avr. 2015, 23:10

qu'est-ce qui ne marche pas ?
isset($_POST['valeur']) va marcher si c'est bien une méthode post

Hellowz
Invité n'ayant pas de compte PHPfrance

09 avr. 2015, 23:31

Je vais essayer de vous expliquer plus en détails.

J'ai un formulaire avec un champs "Checkbox".
Il doit retourner 0 ou 1. Le problème, c'est que cliqué ou pas, il me retourne "on" tout le temps.

Aussi, pour l'insertion je passe par du js

Code : Tout sélectionner

<script> $(document).ready( function () { $("#forma").submit( function() { $.ajax({ type: "POST", url: "send.php", data: { lastname: $('#lastname').val(), firstname: $('#firstname').val(), optin : $('#optin').val(), }, success: function(msg) { if(msg == 'Validation') { $("#Ajout").html(msg); } else { $("#Ajout").html(msg); } } }); return false; }); }); </script>
Puis ensuite, j'utilise un autre fichier php pour le transfert. ( Ce qui n'est pas le problème )
Et voila ma ligne pour la checkbox

Code : Tout sélectionner

<input type="checkbox" name="optin" id="optin" />
Merci,
Hellowz

Mammouth du PHP | 688 Messages

09 avr. 2015, 23:45

$('#optin').attr('checked');
pour recuperer l'etat d'une checkbox

Mammouth du PHP | 2278 Messages

10 avr. 2015, 09:58

Comme expliqué ici entre autres:
http://www.w3.org/TR/html-markup/input.checkbox.html
et un exempe:
<form method = "post" action = "index.php" >
	<fieldset>
		<legend>Etes-vous pisciculteur?</legend>
			<label>Oui</label><input type = "checkbox"  name = "pisci" value ="1" />
			<label>Non</label><input type = "checkbox"  name = "pisci" value ="0" />

	</fieldset>
	<button type = "submit">Envoyer</button>
</form>
et index.php:
<?PHP
	var_dump ($_POST);

?>
Rien n'empêche de cocher les deux options avec comme résultat UNE seule des valeurs. C'est pourquoi on emploie plutôt la notation tableau.
Mais si c'est du oui/Non, il vaudrait mieux employer le type radio où les réponses sont exclusives l'une de l'autre
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 avr. 2015, 10:28

En complément :

Lorsque une case à cocher est cochée, le formulaire transmet celle-ci avec pour valeur l'information contenue dans le champ "value" de l'input. S'il n'y a pas d'attribut value, alors le formulaire transmet la valeur "on".
Si la case n'est pas cochée, celle-ci n'est pas envoyée par le formulaire et elle ne sera donc pas présente dans les variables $_POST ou $_GET.

Pour tester si une case a été cochée, il suffit donc de vérifier si celle-ci est présente ou non (quelle que soit sa valeur, 1, 0 ou "on")

Dans la mesure où tu envois ces données en javascript via ajax, tu vas chercher la valeur de la case, mais cette case n'a pas d'attribut value. Il faut donc en définir un. Cependant cet attribut sera toujours présent, que la case soit cochée ou non. Il te faut donc faire le test toi même pour savoir quelle valeur transmettre dans ta requête ajax.
optin : $('#optin').prop('checked') ? 1 : 0 // si la case dont l'id est optin est cochée, transmet 1 sinon transmet 0
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...