Case à cocher

PPetit
Invité n'ayant pas de compte PHPfrance

20 déc. 2021, 23:06

Bonjour à tous,

Je débute dans le PHP et actuellement je construis un formulaire d'enregistrement. Dans ce formulaire, j'ai inclus une case à cocher.
voici le code html du formulaire
Lundi: <input type="checkbox" name="lundi" >
Lorsque je renvoie les données du formulaire dans la BD, le champ "lundi" affiche toujours 0 que je coche la case ou non.
En fait je désire simplement que la BD enregistre une valeur 1 ou 0 ou Vrai Faux etc...
Je pense que le problème pourrait venir du type de champ de la BD.
A votre avis quel est le problème.
(je n'ai aucune erreur lorsque le formulaire est validé)

Merci

Mammouth du PHP | 2703 Messages

20 déc. 2021, 23:09

sans le code qui gère le contenu du formulaire et construit la requête sql, impossible de savoir où est le problème.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2021, 11:17

Fais un var_dump($_POST) ou var_dump($_GET) en fonction de la méthode d'envoi de ton formulaire.
Ça te permettra de comprendre ce qui est reçu par ton script PHP.
https://developer.mozilla.org/fr/docs/W ... t/checkbox
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 337 Messages

21 déc. 2021, 13:17

Il faut assigner une valeur à ta checkbox :

Code : Tout sélectionner

<input type="checkbox" name="lundi" value="1" />
Les checkbox fonctionnent ainsi :
- quand elles ne sont pas cochées, tu ne reçois rien
- quand elles sont cochées, tu reçois la valeur assignée à la checkbox

PPetit
Invité n'ayant pas de compte PHPfrance

21 déc. 2021, 13:45

Merci à tous pour vos réponses.

Voici le code php pour alimenter la base :
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST["name"]; 
    $email = $_POST["email"];
    $lundi = $_POST["lundi"];
Un peu plus bas
$statement = $mysqli->prepare("INSERT INTO users (name, email, lundi) VALUES(?, ?, ?)"); 
  
    $statement->bind_param('sss', $name, $email, $lundi); 
Au niveau de la BDD quel est le type de champ (ses attributs) qu'il faut paramétrer pour recevoir le résultat de la case à cocher (VARCHAR, TEXT, INT etc...)

J'ai ajouté
value="1"
comme le dit Finipe
Merci pour votre aide

PPetit
Invité n'ayant pas de compte PHPfrance

21 déc. 2021, 14:11

Comme je le dis plus haut, j'ai ajouté
value="1"
au formulaire.
Si je coche la case "lundi", tout va bien et la valeur 1 est bien envoyée dans la base de données.
Par contre, si je ne coche pas la case j'ai une erreur
Column 'lundi' cannot be null
J'ai ensuite essayé d'ajouter
var_dump($_POST)["lundi"];
Et là, j'obtiens un message d'erreur PHP

Mammouth du PHP | 2703 Messages

21 déc. 2021, 14:19


PPetit
Invité n'ayant pas de compte PHPfrance

21 déc. 2021, 20:47

Désolé mais je ne trouve pas la solution, ce problème pour gérer ce checkbox n'est pas à ma portée.

Merci quand même :(

Eléphant du PHP | 337 Messages

21 déc. 2021, 23:01

Comme je le disais, quand la case n'est pas cochée, le formulaire ne reçoit rien. Donc, quand tu vérifies tes valeurs de la variable $_POST, le plus simple est de faire un truc du genre (pour éviter les problèmes) :

Code : Tout sélectionner

if($_POST['lundi'] == 1) $lundi = 1; else $lundi = 0;
Et ensuite, tu peux la variable $lundi à ta base.

PS : si tu fais var_dump($_POST)["lundi"]; ça ne marchera pas. Il faut faire var_dump($_POST["lundi"]);

Mammouth du PHP | 2703 Messages

21 déc. 2021, 23:07

non, utiliser $_POST['lundi'] pour faire comparaison alors que l'on sait que cela peut ne pas exister, c'est une erreur qui génère d'ailleurs un warning.
c'est un isset() qu'il faut mettre dans le if.

PPetit
Invité n'ayant pas de compte PHPfrance

22 déc. 2021, 12:46

J'ai vraiment l'impression que l'utilisation de cases à cocher est complexe. Donc n'y comprenant pas grand chose, je laisse tomber cette idée et je vais simplement utiliser un simple champ, beaucoup plus simple à gérer.

Merci à tous pour vos tentatives d'aide.

Avatar du membre
Mammouth du PHP | 1564 Messages

29 déc. 2021, 12:50

Quand un checkbox est coché, PHP renvoi "on", donc faire une vérif si ton post == "on".

Pour la BDD, mettre ta colonne en tinyint(1) pour être optimisé