Enregistrer la valeur d'une case a cocher
- Accueil
- Forum
- Programmation
- PHP
- Enregistrer la valeur d'une case a cocher
quenquen147 Le 23 avril 2017 à 17:22 (Édité le 25 janvier 2019 à 17:53)
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 = '';
}
html :
<form method="POST" action="" class="ui form">
<div class="inline field">
<div class="ui toggle checkbox">
<input type="checkbox" tabindex="0" name="verified" class="hidden" <?php echo $check; ?> >
<label>Badge vérifié</label>
</div>
<script type="text/javascript">
$('.ui.checkbox')
.checkbox()
;
</script>
</div>
<button class="ui button" type="submit">Valider</button>
</form>
Et donc a chaque fois que je recharge la page la case se décoche et la valeur revient a 0. Zbuu Le 23 avril 2017 à 21:46 (Édité le 1 janvier 1970 à 01:00)
C'est normal quand tu actualises la page tu ne rentres plus dans ta conditions, tu arrives dans ton else et donc ta variable check vaut null.
Ton code n'est pas complet si ? Si tu fais une requête par exemple
$q = $db->prepare("SELECT tes_champs FROM ta_table WHERE ton_champs = :ton_champ");
$q->execute([':ton_champ' => $valeur]);
$data = $q->fetch();
Tu pourras récupéré la valeur de ton champ verified et affiché checked ou non dans ton input
<input type="checkbox" tabindex="0" name="verified" class="hidden" <?= $data['verified'] == 1 ? 'checked' : null; ?> >
Désolé pour les explications c'est pas mon fort 😄 quenquen147 Le 23 avril 2017 à 22:03 (Édité le 23 avril 2017 à 22:24)
<?php
session_start();
include('../include/base.php');
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
$req2 = $bdd->prepare("UPDATE users SET verified='0' WHERE id= ?");
if (isset($_SESSION['id']))
{
$requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
$check = "";
if (isset($_POST['verified'])) {
$req->execute(array($_SESSION['id']));
$check = '"checked="checked"';
}
else
{
$check = '';
$req2->execute(array($_SESSION['id']));
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Confidentialité</title>
<link rel="stylesheet" type="text/css" href="../assets/semantic/semantic.min.css">
<link rel="stylesheet" type="text/css" href="../assets/style.css">
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="../assets/semantic/semantic.min.js"></script>
<script src="../assets/semantic/components/dropdown.js" type="text/javascript"></script>
<script src="../assets/semantic/components/dropdown.min.js" type="text/javascript"></script>
<meta charset="utf-8">
</head>
<body>
<header >
<div class="ui large menu" style="border-radius: 0px;">
<a class="item" href="../profil.php?id='<?php $_SESSION['id'];?>">
Profil
</a>
<a class="active item">
Paramètres
</a>
<a class="item" href="../security">
Sécurité
</a>
<div class="right menu">
</div>
<div class="item">
<a href="../logout.php"><div class="ui primary button">Se deconnecter</div></a>
</div>
</div>
</div>
</header>
<div class="ui container" id="settings">
<div class="ui equal width grid">
<div class="column">
<div class="ui vertical pointing menu">
<a class="item" href="index.php">
Mes informations
</a>
<a class="item">
Mes réseaux sociaux
</a>
<a class="active item">
Confidentialité
</a>
</div>
</div>
<div class="eight wide column">
<div class="ui segment">
<h2 class="ui header">
<i class="eye icon"></i>
<div class="content">
Confidentialité
<div class="sub header">Gerer vos paramètres de confidentialité</div>
</div>
<div class="ui divider"></div>
<center>
<form method="POST" action="" class="ui form">
<div class="inline field">
<div class="ui toggle checkbox">
<input type="checkbox" tabindex="0" name="verified" class="hidden" <?php echo $check; ?> >
<label>Badge vérifié</label>
</div>
<script type="text/javascript">
$('.ui.checkbox')
.checkbox()
;
</script>
</div>
<button class="ui button" type="submit">Valider</button>
</form>
</center>
</div>
</div>
<div class="column">
3
</div>
</div>
</div>
</body>
</html>
<?php
}
else
{
header('Location: login.php');
}
?>
Et je sais vraiment pas comment faire :(
Car ce que j'aimerai faire enfaite c'est un script du genre :
Si je coche la checkbox alors le champ verified prendra la valeur 1 dans la bdd et la case restera cocher
et si je décoche, le champ verified de la bdd prendra comme valeur 0 et la checkbox restera non cocher après validation du formulaire.
Zbuu Le 23 avril 2017 à 22:28 (Édité le 23 avril 2017 à 22:38)
<input type="checkbox" tabindex="0" name="verified" class="hidden" <?= $user['verified'] == 1 ? 'checked' : null; ?>>
Ensuite pourquoi tu fais :
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
$req2 = $bdd->prepare("UPDATE users SET verified='0' WHERE id= ?");
Alors que tu peux mettre le champ par défaut à 0 et faire l'update à 1 lorsque ton formulaire est envoyé ? quenquen147 Le 24 avril 2017 à 17:14 (Édité le 1 janvier 1970 à 01:00)
<?php
session_start();
include('../include/base.php');
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
if (isset($_SESSION['id']))
{
$requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
$check = "";
if (isset($_POST['verified'])) {
$req->execute(array($_SESSION['id']));
$check = '"checked="checked"';
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Confidentialité</title>
<link rel="stylesheet" type="text/css" href="../assets/semantic/semantic.min.css">
<link rel="stylesheet" type="text/css" href="../assets/style.css">
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="../assets/semantic/semantic.min.js"></script>
<script src="../assets/semantic/components/dropdown.js" type="text/javascript"></script>
<script src="../assets/semantic/components/dropdown.min.js" type="text/javascript"></script>
<meta charset="utf-8">
</head>
<body>
<header >
<div class="ui large menu" style="border-radius: 0px;">
<a class="item" href="../profil.php?id='<?php $_SESSION['id'];?>">
Profil
</a>
<a class="active item">
Paramètres
</a>
<a class="item" href="../security">
Sécurité
</a>
<div class="right menu">
</div>
<div class="item">
<a href="../logout.php"><div class="ui primary button">Se deconnecter</div></a>
</div>
</div>
</div>
</header>
<div class="ui container" id="settings">
<div class="ui equal width grid">
<div class="column">
<div class="ui vertical pointing menu">
<a class="item" href="index.php">
Mes informations
</a>
<a class="item">
Mes réseaux sociaux
</a>
<a class="active item">
Confidentialité
</a>
</div>
</div>
<div class="eight wide column">
<div class="ui segment">
<h2 class="ui header">
<i class="eye icon"></i>
<div class="content">
Confidentialité
<div class="sub header">Gerer vos paramètres de confidentialité</div>
</div>
<div class="ui divider"></div>
<center>
<form method="POST" action="" class="ui form">
<div class="inline field">
<div class="ui toggle checkbox">
<input type="checkbox" tabindex="0" name="verified" class="hidden" <?= $user['verified'] == 1 ? 'checked' : null; ?> >
<label>Badge vérifié</label>
</div>
<script type="text/javascript">
$('.ui.checkbox')
.checkbox()
;
</script>
</div>
<button class="ui button" type="submit">Valider</button>
</form>
</center>
</div>
</div>
<div class="column">
3
</div>
</div>
</div>
</body>
</html>
<?php
}
else
{
header('Location: login.php');
}
?>
Zbuu Le 24 avril 2017 à 19:24 (Édité le 24 avril 2017 à 19:27)
La case reste cocher mais du coup après on peut pas la décocher :(Tu veux dire que ton champ verified reste sur 1 dans ta base de donnée même lorsque tu décoche la checkbox ? C'est normal puisque ta condition gère qu'un seul cas. Tu dois donc géré le cas inverse (je suis actuellement sur mon tel et j'ai des problème avec l'editeur :s)
quenquen147 Le 24 avril 2017 à 19:40 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 24 avril 2017 à 20:37 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 25 avril 2017 à 02:48 (Édité le 1 janvier 1970 à 01:00)
Si ta case est coché alors tu update ton champ verified à 1 (ça tu la déjà fais)
Sinon elle n'est pas coché alors tu update ton champ à 0
Après tu peux faire d'autre vérification du style que si tu renvoie le formulaire avec la case coché alors que ton champ et déjà égale à 1 alors ne rien faire comme ça tu ne fais pas de requête pour mettre ton champ a 1 alors qu'il y est déjà et vice versa.
@Beignet est-ce que mon message est assez clair ? Si ce n'est pas le cas tu peux mieux lui expliquer ?
quenquen147 Le 25 avril 2017 à 18:30 (Édité le 1 janvier 1970 à 01:00)
<?php
session_start();
include('../include/base.php');
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
$req2 = $bdd->prepare("UPDATE users SET verified='0' WHERE id= ?");
if (isset($_SESSION['id']))
{
$requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
$check = "";
if (isset($_POST['verified'])) {
$req->execute(array($_SESSION['id']));
}
else
{
$req2->execute(array($_SESSION['id']));
}
?>
quenquen147 Le 25 avril 2017 à 18:38 (Édité le 25 avril 2017 à 18:41)
<?php
session_start();
include('../include/base.php');
$req = $bdd->prepare("UPDATE users SET verified='1' WHERE id= ?");
$req2 = $bdd->prepare("UPDATE users SET verified='0' WHERE id= ?");
if (isset($_SESSION['id']))
{
$requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
$check = "";
if (isset($_POST['submit'])) {
if (isset($_POST['verified'])) {
$req->execute(array($_SESSION['id']));
}
else
{
$req2->execute(array($_SESSION['id']));
}
}
?>
EDIT :
Enfaite les valeurs de la case a cocher se modifie a chaque fois que je clique plusieurs fois sur le bouton valider.
Zbuu Le 25 avril 2017 à 20:51 (Édité le 1 janvier 1970 à 01:00)
Enfaite les valeurs de la case a cocher se modifie a chaque fois que je clique plusieurs fois sur le bouton valider.En redirigeant vers la même page ça devrait régler ton soucis ?
if (isset($_SESSION['id'])) {
$requser = $bdd->prepare("SELECT * FROM users WHERE id = ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
// Si le formulaire est envoyé
if (isset($_POST['submit'])) {
$req = $bdd->prepare("UPDATE users SET verified = ? WHERE id = ?");
// Si la checkbox est coché et que le champ verified est différent de 1
if (!empty($_POST['verified']) && $user['verified'] != 1) {
// Alors on passe le champ à 1
$req->execute(array(1, $_SESSION['id']));
} else {
// Sinon on passe le champ à 0
$req->execute(array(0, $_SESSION['id']));
}
// Redirection
header("Location: ta-page.php");
exit();
}
}
(Attention code non testé et écris depuis mon téléphone) quenquen147 Le 25 avril 2017 à 21:54 (Édité le 1 janvier 1970 à 01:00)
Mask Le 13 février 2021 à 08:33 (Édité le 1 janvier 1970 à 01:00)
Bonjour, j'aurais une question concernat le même sujet et je suis pas très doué en codage...
J'aimerais intégrer une checkbox qui reste cochée lorsqu'un utilisateur la cochée, même si il quitte le site et qu'il revient 2 jours après et je n'y arrive pas.
Pour le contexte : c'est un espace membre dans lequel il y a des dizaines de vidéos par page, et j'aimerai simplement afficher une case à cocher "Vidéo lue" pour que les utilisateurs sachent quelles vidéos ils ont visionné. (sachant qu'elles ne sont pas forcément regardé dasn l'ordre de la page, c'est pour quoi j'aimerai mettre cette fonction)
Voilà je sais pas si c'est faisable...
Merci beaucoup