Partage
  • Partager sur Facebook
  • Partager sur Twitter

Enregistrer la valeur d'une case a cocher

Sujet résolu
    23 avril 2017 à 14:31:32

    Bonjour,

    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"';
    }


    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>



    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2017 à 14:45:53

      Définir "ancienne" ?

      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-&gt;prepare('UPDATE users SET verified = :state WHERE id= :id');
      $req-&gt;execute(array('state' =&gt; intval(isset($_POST['verified'])), 'id' =&gt; $_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 &gt;

      -
      Edité par julp 23 avril 2017 à 14:51:09

      • Partager sur Facebook
      • Partager sur Twitter
        23 avril 2017 à 14:58:02

        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.

        Et oui a chaque moment que je recharge la page la valeur retourne a 0 dans ma BDD. 

        -
        Edité par quenquen147 23 avril 2017 à 14:59:45

        • Partager sur Facebook
        • Partager sur Twitter
          23 avril 2017 à 15:06:44

          > 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.

          • Partager sur Facebook
          • Partager sur Twitter
            23 avril 2017 à 15:18:59

            julp a écrit:

            > 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 ?

            • Partager sur Facebook
            • Partager sur Twitter
              23 avril 2017 à 15:20:27

              Dans un if ? Qui encapsule tout ton code ?

              > Est-ce que avec submit cela pourrait être plus simple ?

              Pour moi, c'est la même chose.

              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2017 à 15:27:01

                if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                	if (isset($_POST['verified'])) {
                	$req->execute(array($_SESSION['id']));
                	$check = '"checked="checked"';
                }
                else
                {
                	$req->execute(array($_SESSION['id']));
                	$check = "";
                }
                }
                

                Oui la condition encapsule tout mon code
                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2017 à 15:31:06

                  Juste à cause de la notice ?

                  Déplaces $check = ""; avant le if.

                  -
                  Edité par julp 23 avril 2017 à 15:31:34

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 avril 2017 à 15:35:22

                    Cela ne m'affiche plus d'erreur mais en consequent la valeur case a cocher ne s'enregistre toujours pas.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 avril 2017 à 15:43:40

                      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 ?

                      -
                      Edité par julp 23 avril 2017 à 15:44:24

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 avril 2017 à 15:46:47

                        <?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 ($_SERVER['REQUEST_METHOD'] == 'POST') {
                        	if (isset($_POST['verified'])) {
                        	$req->execute(array($_SESSION['id']));
                        	$check = '"checked="checked"';
                        }
                        else
                        {
                        	$req->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');
                        }
                        ?>
                        Voici l'intégralité de mon code.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 avril 2017 à 15:49:16

                          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 ?

                          -
                          Edité par julp 23 avril 2017 à 15:52:07

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 avril 2017 à 15:52:26

                            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

                            • Partager sur Facebook
                            • Partager sur Twitter

                            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.
                            • Editeur
                            • Markdown