J'ai un problème avec une case à cocher, je ne sais pas comment faire pour enregistrer sa valeur dans le cas où elle est cocher.
Pourtant les valeurs dans la BDD changent lorsque que je la coche mais reviens a l'ancienne dès que je recharge la page car la case à cocher ne retient pas le choix et se décoche systematiquement.
Mon script est le suivant :
PHP :
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
$req2 = $bdd->prepare("UPDATE users SET verified='0' WHERE id= ?");
if (isset($_POST['verified'])) {
$req->execute(array($_SESSION['id']));
$check = 'checked="checked"';
}
else
{
$req2->execute(array($_SESSION['id']));
$check = '"checked="checked"';
}
Parce qu'il faut que tu testes avant tout si le formulaire est soumis ('POST' == $_SERVER['REQUEST_METHOD'] ou alors éventuellement le submit mais il faudrait déjà qu'il ait un nom) sinon quand tu arrives sur la page isset($_POST['verified']) est faux donc tu le reset à 0 ?
Inutile de faire 2 requêtes, 1 suffit :
$req = $bdd->prepare('UPDATE users SET verified = :state WHERE id= :id');
$req->execute(array('state' => intval(isset($_POST['verified'])), 'id' => $_SESSION['id']));
Pourquoi le checked dans les 2 cas ? Et il y a une " en trop dans le else, non ?
PS : erf, le mardown est toujours à plat, lire > pour ces >
> Si je ne mets pas la variable $check dans else, echo va m'afficher une erreur comme quoi la variable n'est pas définie.
Ca n'a pas plus de sens de l'initialiser à '' ?
> Et oui a chaque moment que je recharge la page la valeur retourne a 0 dans ma BDD.
Dans ce cas, je pense que je t'ai répondu, il manque un test : avant même d'avoir soumis le formulaire, tu cherches à faire ton UPDATE et $_POST['verified'] n'existe pas.
> Si je ne mets pas la variable $check dans else, echo va m'afficher une erreur comme quoi la variable n'est pas définie.
Ca n'a pas plus de sens de l'initialiser à '' ?
> Et oui a chaque moment que je recharge la page la valeur retourne a 0 dans ma BDD.
Dans ce cas, je pense que je t'ai répondu, il manque un test : avant même d'avoir soumis le formulaire, tu cherches à faire ton UPDATE et $_POST['verified'] n'existe pas.
ça ne fonctionne pas avec 'POST' == $_SERVER['REQUEST_METHOD']
Est-ce que avec submit cela pourrait être plus simple ?
Le code est incomplet. Ta(tes) requête(s) est(sont) passée(s) où ? Notes que visiblement tu exécutes la même, sans paramètre pour le statut de cette case à cocher.
Les erreurs PDO sont activées ?
Si tu mets un echo dans chacun des if/else, s'affichent-ils comme attendu ?
Dans le if comme le else tu exécutes la même requête préparée : $req qui passe l'état à 1 donc maintenant le problème c'est qu'il est systématiquement à 1 ?
Dans l'un des deux, on devrait trouver $req2 à la place de $req (vu que tu ne veux pas de ma requête).
Et le "test" de l'echo que je t'ai suggéré, il donne quoi en fin de compte ?
Oui je viens juste de remarquer. J'ai donc remplacer le $req par $req2 dans le else mais cela ne change rien et ta requête m'affiche des erreurs aussi.
- Edité par quenquen147 23 avril 2017 à 15:57:01
Enregistrer la valeur d'une case a cocher
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Voici l'intégralité de mon code.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli