Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer valeur de checkbox

Sujet résolu
    19 novembre 2017 à 19:16:15

    Bonjour,

    j'ai un formulaire avec une checkbox à cocher sur chaque enregistrement (les enregistrements de ma table sont présentées dans un tableau) (ligne 128)

    j'aimerai que lorsque l'utilisateur coche la case, la valeur 1 soit enregistrée dans ma table (sinon 0) et que quand j'ai 1 dans la table, la case apparaissent cochée sur le formulaire.

    j'ai 2 problèmes pour faire çà :

    1. j'ai réussi à enregistrer 1 lorsque la première case de mon tableau est cochée mais pas pour les autres enregistrements

    2. lorsque j'affiche à nouveau mon formulaire, la case n'est pas cochée, alors que la valeur est 1 dans la table

    <?php
    // On démarre la session AVANT d'écrire du code HTML
    session_start();
    
    ?>
    
    
    <!DOCTYPE html>
    
    <html>
    
        <head>
    
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <title>Mereva</title>
    
        </head>
    
        <body>
            
            <!--début du bloc page-->
            <div id="page">
    
                <!-- En-tête -->
                <div class="element_page"> 
                    <?php include("entete.php"); ?>
                </div>
    
                <!-- Le corps --> 
                <div class="element_page">
                    <div id="corps">
                        
                        <?php include("menus.php"); ?>
                        <!--Tableau avec le contenu de la table GBD_DAT-->
                                    
                        <div id='element_tableau'>
    	                    <div id="tableau">
    
    							<?php
    
    							//*******************************************************************
    							//affichage page par page tutoriel Ymox sur le site Zeste de Savoir
    							//https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/
    
    							//*******************************************************************
    							
    
    							//*Connexion à la base de données
    		                    //*OpenCLassroom "Concevez votre site web avec php et MySql"  
    		                    try
    							{
    							// On se connecte à MySQL
    							$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    							}
    							catch(Exception $e)
    							{
    							// En cas d'erreur, on affiche un message et on arrête tout
    							die('Erreur : '.$e->getMessage());
    							}
    
    							$limite = 10;
    							$page = (!empty($_GET['page']) ? $_GET['page'] : 1);
    							$debut = ($page - 1) * $limite;
    
    
    							// Partie "Requête"
    							/* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
    							/*sans tenir compte du critère limit*/
    							$sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat1` LIMIT :limite OFFSET :debut';
    							$query = ($sql);
    							/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
    							$query = $bdd->prepare($query);
    							/* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
    							$query->bindValue(
    							'limite',         // Le marqueur est nommé « limite »
    							$limite,         // Il doit prendre la valeur de la variable $limite
    							PDO::PARAM_INT   // Cette valeur est de type entier
    							);
    							$query->bindValue(
    							'debut',         // Le marqueur est nommé « début »
    							$debut,         // Il doit prendre la valeur de la variable $debut
    							PDO::PARAM_INT   // Cette valeur est de type entier
    							);
    
    							/* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
    							$resultSet = $query->execute();
    
    							/* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
    							* faut pas oublier qu'on ne récupère pas directement le nombre.
    							* De plus, comme la requête ne contient aucune donnée client pour fonctionner,
    							* on peut l'exécuter ainsi directement */
    							$resultFoundRows = $bdd->query('SELECT found_rows()');
    							/* On doit extraire le nombre du jeu de résultat */
    							$nombredElementsTotal = $resultFoundRows->fetchColumn();
    
    							// début du tableau
    							echo '<table>'."\n";
    							// première ligne on affiche les titres prénom et surnom dans 2 colonnes
    							echo '<tr class="class01">';
    							echo '<td class="ID">#ID</td>';
    							echo '<td class="Patient">Patient</td>';
    							echo '<td class="Fiche">Fiche</td>';
    							echo '<td class="Question">Question</td>';
    							echo '<td class="Description">Description</td>';
    							echo '<td class="Details">Details</td>';
    							echo '<td class="Correction">Corrections</td>';
    							echo '<td class="NR">NR</td>';
    							echo '<td class="Commentaires">Commentaires</td>';
    							echo '</tr>';
    							echo '</table>'."\n";
    							// Partie "Boucle"
    							// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    							while($element= $query -> fetch()) 
    							{
    								?>
    								<form id="insertion" name="insertion" action="dms_modification3.php" method="POST">
    								  <input type="hidden" name="limite" value="<?php echo($limite) ;?>">
    								  <table>
    								    <tr class="class02">
    								      <td class="ID"><input class="id" type="text" name="id[]" value="<?php echo $element['id'] ;?>"></td>
    								      <td class="Patient"><input class="pat" type="text" name="pat[]" value="<?php echo $element['pat'] ;?>"></td>
    								      <td class="Fiche"><input class="fic" type="text" name="fic[]" value="<?php echo $element['fic'] ;?>"></td>
    								      <td class="Question"><input class="que" type="text" name="que[]" value="<?php echo $element['que'] ;?>"></td>
    								      <td class="Description"><input class="des" type="text" name="des[]" value="<?php echo $element['des'] ;?>"></td>
    								      <td class="Details"><input class="det" type="text" name="det[]" value="<?php echo $element['det'] ;?>"></td>
    								      <td class="Corrections"><input class="cor" type="text" name="cor[]" value="<?php echo $element['cor'] ;?>"></td>
    								      <td class="NR"><input class="non_rec" type="checkbox" name="non_rec[]" value="<?php echo $element['non_rec'] ;?>" if($element['non_rec']=1){ echo 'checked="checked"';}></td>
    								      <td class="Commentaires"><input class="com" type="text" name="com[]" value="<?php echo $element['com'] ;?>"></td>
    								    </tr>
    
    								<?php
    							}//fin while 
    						?>
    									</table>
    									<div>
    									<input class="modifier" type="submit" value="Modifier">
    									</div>
    								  
    								</form>
    						
    						<!--fin du bloc tableau-->  
    						</div>
    	                        
    
    
                        <!--fin du bloc element_tableau-->
                        </div>
    
    	                    <?php
    	                    $query->closeCursor();
    	                    ?>
                    <!--fin du bloc corps-->
                    </div>
    
                <!--fin du bloc element_page correspondant au CORPS-->
                </div>
    
                <div class="element_page">
    	            <!--// Partie "Filtres"-->
    				<div id='filtres'>
    				    <form action="demande_de_corrections_page_filtres.php" method="get">
                        <select onselect="this.form.submit()" name="patient" id="patient">
                        <?php
                        $sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
                        $result = $bdd->query($sql); 
                        while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                        {
                        ?>
                        <option value="<?php echo $element['pat'];?>"><?php echo $donnees['pat'];?></option>
                        <?php
                        }
                        ?>
                        </select>
                        <select onselect="this.form.submit()" name="fiche" id="fiche">
                        <?php
                        $sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
                        $result = $bdd->query($sql);
                        while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                        {
                        ?>
                        <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                        <?php
                        }
                        ?>
                        </select>
    				    <input class="valider" type="submit" value="Valider" />                             
    			        </form> 
    			    </div>
    
    			     <!--// Partie "Liens"-->
    			    
    				<div id='liens'>
    
    				    <?php
    					/* On calcule le nombre de pages */
    					$nombreDePages = ceil($nombredElementsTotal / $limite);
    
    
    
    					/* Si on est sur la première page, on n'a pas besoin d'afficher de lien
    					* vers la précédente. On va donc l'afficher que si on est sur une autre
    					* page que la première */
    					if ($page > 1):
    					?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
    					endif;
    
    					/* On va effectuer une boucle autant de fois que l'on a de pages */
    					for ($i = 1; $i <= $nombreDePages; $i++):
    					?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
    					endfor;
    
    					/* Avec le nombre total de pages, on peut aussi masquer le lien
    					* vers la page suivante quand on est sur la dernière */
    					if ($page < $nombreDePages):
    					?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
    					endif;
    					?>         
    		        </div> 
    		    </div>
    
                <!-- Le pied de page -->
                <div class="element_page"> 
                <div id="pied_de_page"/>
                <?php include("pied_de_page.php"); ?>
                </div>
                </div> 
    
            <!--fin du bloc page-->
            </div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <!-- jQuery est inclus ! -->
       <script>
    
            jQuery(document).ready(function(){
            // Du code en jQuery va pouvoir être tapé ici !
            console.log("jQuery est prêt !");
    		});
    
    
    		
    
       </script>
        </body>
    
    </html>
    <?php
    //connection au serveur
    try
    {
    // On se connecte à MySQL
    $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch(Exception $e)
    {
    // En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
    }
     
    //$nb = count($_POST['id']);
    $limite = $_POST['limite'];
    
    
    
    //préparation de la requête
    $requete = "UPDATE gbd_dat1 SET 
    		pat = :patient,
    		fic = :fiche,
    		que = :question,
    		des = :description,
    		det = :details,
    		cor = :correction,
    		non_rec = :nonrecuperable,
    		com = :commentaires
    		WHERE id = :id ";
    
    /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
    $result = $bdd->prepare($requete);
    
    //print_r($bdd->errorInfo());
    $result->bindParam('id',$id,PDO::PARAM_INT);
    $result->bindParam('patient',$patient,PDO::PARAM_STR);
    $result->bindParam('fiche',$fiche,PDO::PARAM_STR);
    $result->bindParam('question',$question,PDO::PARAM_STR);
    $result->bindParam('description',$description,PDO::PARAM_STR);
    $result->bindParam('details',$details,PDO::PARAM_STR);
    $result->bindParam('correction',$correction,PDO::PARAM_STR);
    $result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
    $result->bindParam('commentaires',$commentaires,PDO::PARAM_STR);
    
    for($i=0;$i<$limite;$i++)
       {
    		$patient=$_POST['pat'][$i];
    		$fiche=$_POST['fic'][$i];
    		$question=$_POST['que'][$i];
    		$description=$_POST['des'][$i];		
    		$details=$_POST['det'][$i];
    		$correction=$_POST['cor'][$i];
    		//$nonrecuperable=$_POST['non_rec'][$i];
    		$nonrecuperable = isset($_POST['non_rec'][$i]) ? 1 : 0;
    		$commentaires=$_POST['com'][$i];		
    		$id=$_POST['id'][$i];
        	$result->execute();
        	//var_dump($patient);
    	}
     
    //affichage des résultats, pour savoir si la modification a marchée:
    if($requete)
    {
        echo("La modification à été correctement effectuée") ;
    }
    else
    {
        echo("La modification à échouée") ;
    }
    ?>




    -
    Edité par djé22 19 novembre 2017 à 19:17:10

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2017 à 19:21:38

      Comme dit dans le précédent sujet, tu as mis le <form> dans la boucle.
      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2017 à 20:07:35

        Salut Philodick

        merci pour ton aide... ; )

        j'avais modifié la place du code du bouton "modifier" et effectivement çà marchait

        je comprends pas trop pourquoi çà ne fonctionne pas pareil avec la checkox...

        j'ai donc sorti le <form> pour le mettre avant la boucle while ; çà permet de modifier en base mais pas dans les bons enregistrements

        je coche les lignes 1 et 10 de mon formulaire et çà s'enregistre dans les lignes 1 et 2 de ma table

        -
        Edité par djé22 19 novembre 2017 à 20:13:33

        • Partager sur Facebook
        • Partager sur Twitter
          19 novembre 2017 à 21:03:58

          Tu peux utiliser une checkbox pour décider quelles lignes modifier, mais pas après ; une checkbox non cochée ne renvoie pas une valeur vide, elle ne renvoie pas de valeur du tout. Tu vas donc avoir des trous.
          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2017 à 8:44:17

            pour avoir la valeur 0 dans une checkbox non cochée il suffit de faire 

            <input type="hidden" name="nomCheckBox" value="0"/>
            <input type="checkbox" name="nomCheckBox" value="1"/>



            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2017 à 10:02:53

              Bonjour,

              merci pour vos réponses

              utiliser les checkbox s'avère beaucoup plus compliqué que ce que j'imaginais...

              j'ai modifié le code pour que les checkbox soient cochées si la valeur en base =1 et çà fonctionne

              par contre, l'action de cocher ne fonctionne pas correctement :

              j'affiche 10 enregistrements par page

              quelque soit la case que je coche sur les enregistrements affichés, tous les enregistrements affichés passent à 1 dans ma table

              pourtant, les valeurs de ma checkbox sont indicées...

              par ailleurs, le fait de décocher mes checkbox, n'enregistre pas 0 en base...

              une piste de réflexion ?

              <form id="insertion" name="insertion" action="dms_modification3.php" method="POST">    
              							<?php
              							while($element= $query -> fetch()) 
              							{
              								?>
              								
              								  <input type="hidden" name="limite" value="<?php echo($limite) ;?>">
              								  <table>
              								    <tr class="class02">
              								      <td class="ID"><input class="id" type="text" name="id[]" value="<?php echo $element['id'] ;?>"></td>
              								      <td class="Patient"><input class="pat" type="text" name="pat[]" value="<?php echo $element['pat'] ;?>"></td>
              								      <td class="Fiche"><input class="fic" type="text" name="fic[]" value="<?php echo $element['fic'] ;?>"></td>
              								      <td class="Question"><input class="que" type="text" name="que[]" value="<?php echo $element['que'] ;?>"></td>
              								      <td class="Description"><input class="des" type="text" name="des[]" value="<?php echo $element['des'] ;?>"></td>
              								      <td class="Details"><input class="det" type="text" name="det[]" value="<?php echo $element['det'] ;?>"></td>
              								      <td class="Corrections"><input class="cor" type="text" name="cor[]" value="<?php echo $element['cor'] ;?>"></td>
              															      <td class="NR">
              								      <input type="hidden" name="non_rec[]" value="0"/>
              								      <input class="non_rec" type="checkbox" name="non_rec[]" 
              									<?php if($element['non_rec'] == 1) echo ' CHECKED="checked"'; ?>
              								      >
              
              								      </td>
              								      <td class="Commentaires"><input class="com" type="text" name="com[]" value="<?php echo $element['com'] ;?>"></td>
              								    </tr>
              								   	</table>
              								<?php
              							}//fin while 
              						?>
              									
              									<div>
              									<input class="modifier" type="submit" value="Modifier">
              									</div>
              								  
              								</form>
              <?php
              //connection au serveur
              try
              {
              // On se connecte à MySQL
              $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
              }
              catch(Exception $e)
              {
              // En cas d'erreur, on affiche un message et on arrête tout
              die('Erreur : '.$e->getMessage());
              }
               
              //$nb = count($_POST['id']);
              $limite = $_POST['limite'];
              
              //préparation de la requête
              $requete = "UPDATE gbd_dat1 SET 
              		pat = :patient,
              		fic = :fiche,
              		que = :question,
              		des = :description,
              		det = :details,
              		cor = :correction,
              		non_rec = :nonrecuperable,
              		com = :commentaires
              		WHERE id = :id ";
              
              /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
              $result = $bdd->prepare($requete);
              
              //print_r($bdd->errorInfo());
              $result->bindParam('id',$id,PDO::PARAM_INT);
              $result->bindParam('patient',$patient,PDO::PARAM_STR);
              $result->bindParam('fiche',$fiche,PDO::PARAM_STR);
              $result->bindParam('question',$question,PDO::PARAM_STR);
              $result->bindParam('description',$description,PDO::PARAM_STR);
              $result->bindParam('details',$details,PDO::PARAM_STR);
              $result->bindParam('correction',$correction,PDO::PARAM_STR);
              $result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
              $result->bindParam('commentaires',$commentaires,PDO::PARAM_STR);
              
              for($i=0;$i<$limite;$i++)
                 {
              		$patient=$_POST['pat'][$i];
              		$fiche=$_POST['fic'][$i];
              		$question=$_POST['que'][$i];
              		$description=$_POST['des'][$i];		
              		$details=$_POST['det'][$i];
              		$correction=$_POST['cor'][$i];
              		//$nonrecuperable=$_POST['non_rec'][$i];
              		$nonrecuperable = isset($_POST['non_rec'][$i]) ? 1 : 0;
              		$commentaires=$_POST['com'][$i];		
              		$id=$_POST['id'][$i];
                  	$result->execute();
                  	//var_dump($patient);
              	}
               
              //affichage des résultats, pour savoir si la modification a marchée:
              if($requete)
              {
                  echo("La modification à été correctement effectuée") ;
              }
              else
              {
                  echo("La modification à échouée") ;
              }
              ?>




              -
              Edité par djé22 20 novembre 2017 à 10:06:41

              • Partager sur Facebook
              • Partager sur Twitter
                20 novembre 2017 à 11:53:43

                Salut,

                ce n'est pas compliqué, il faut être logique et surtout carré dans son développement.

                • Une CB activée envoie Soit ON si aucune valeur n'est affecté, soit la valeur associée
                • Une CB non activée ne renvoie rien

                Maintenant si tu sors une valeur a affecter depuis la BDD:

                <?php
                    foreach ($dataBD AS $ligne) {
                        $maCheckBox = '<input type="checkbox"';
                        if (!empty($ligne['maCechbox'])) {
                            $maCheckBox .= ' value="'.$ligne['maCechbox'].'"';
                        }
                
                        $maCheckBox .= '/>'
                        if (!empty($ligne['maCechbox'])) {
                            $maCheckBox .= $ligne['maCechbox'];
                        } else {
                            $maCheckBox .= ' Ma valeur par defaut';
                        }
                    }

                A toi de faire tes tests sur des fichiers séparés rapidement pour comprendre la mécanique
                .

                ++

                • Partager sur Facebook
                • Partager sur Twitter
                  20 novembre 2017 à 13:43:49

                  La modification que j'ai suggéré ne convient pas effectivement si tu utilise un tableau que tu n'indice pas toi même, je te conseille d'indicer ton tableau html sur l'id de ton objet à modifier, je te donne un petit code pour voir comment utiliser de façon assez pratique les checkbox (je te conseille de tester le code tel quel pour bien voir comment ça marche) : 

                  <pre>
                      <?php
                      print_r($_REQUEST);
                      ?>
                      <form>  
                          <input type="hidden" name="checkbox[1]" value="0"/>
                          <input type="checkbox" name="checkbox[1]" value="1"/>
                          <input type="hidden" name="checkbox[2]" value="0"/>
                          <input type="checkbox" name="checkbox[2]" value="1"/>
                          <button type="submit">Button</button>
                      </form>
                  </pre>
                  

                  en mettant dans name "checkbox[idAModifier]", tu devrais arriver à résoudre ton problème assez facilement.

                  Tu peux même créer une fonction à qui tu passe : le nom de la variable où mettre la valeur, la valeur coché et la valeur non coché qui te sort direct les deux input nécessaires.

                  Bon courage pour la suite.

                  -
                  Edité par Valeri@n 20 novembre 2017 à 14:45:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 novembre 2017 à 14:39:15

                    bonjour,

                    merci à tous les 2 pour vos précisions mais je ne comprends absolument rien... et pourtant je vois bien que vous faites de gros effort pour être pédagogique (et je vous en remercie) mais mon niveau est vraiment trop faible

                    j'ai essayé de suivre vos conseils en repartant d'un exemple simple mais je ne sais pas comment avancer

                    une table test_checkbox (avec 2 variables de type integer id et non_rec) dans laquelle j'ai inséré 10 enregistrements ayant tous non_rec=0 (case non cochée)

                    id non_rec

                    1 0

                    2 0

                    3 0

                    4 0

                    5 0

                    6 0

                    7 0

                    9 0

                    10 0

                    et 2 fichiers

                    checkbox1.php

                    <?php
                    try
                    {
                    $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                    }
                    catch(Exception $e)
                    {
                    die('Erreur : '.$e->getMessage());
                    }
                    
                    $limite = 10;
                    
                    $sql = 'SELECT * FROM `test_checkbox` LIMIT :limite';
                    $query = ($sql);
                    $query = $bdd->prepare($query);
                    $query->bindValue('limite',$limite,PDO::PARAM_INT);
                    
                    $resultSet = $query->execute();
                    ?>
                    
                    <form name="insertion" action="checkbox2.php" method="POST">    
                    <?php
                    while($element= $query -> fetch()) 
                    {
                    ?>
                    <table>
                    <tr>
                    <td><input type="text" name="id[]" value="<?php echo $element['id'] ;?>"></td>
                    <td><input type="checkbox" name="non_rec[]" value="<?php echo $element['non_rec'] ;?>"></td>
                    </tr>
                    </table>
                    <?php
                    }
                    ?>
                    
                    <input class="modifier" type="submit" value="Modifier">
                    </form>

                    checkbox2.php

                    <?php
                    //connection au serveur
                    try
                    {
                    // On se connecte à MySQL
                    $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                    }
                    catch(Exception $e)
                    {
                    // En cas d'erreur, on affiche un message et on arrête tout
                    die('Erreur : '.$e->getMessage());
                    }
                     
                    $limite = 10;
                    
                    var_dump($_POST['non_rec']);
                    //préparation de la requête
                    $requete = "UPDATE test_checkbox SET 
                    		non_rec = :nonrecuperable
                    		WHERE id = :id ";
                    
                    /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                    $result = $bdd->prepare($requete);
                    
                    //print_r($bdd->errorInfo());
                    $result->bindParam('id',$id,PDO::PARAM_INT);
                    $result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
                    
                    for($i=0;$i<$limite;$i++)
                       {
                    		$nonrecuperable = isset($_POST['non_rec'][$i]) ? 0 : 1;
                    		$id=$_POST['id'][$i];
                        	$result->execute();
                    	}
                     
                    //affichage des résultats, pour savoir si la modification a marchée:
                    if($requete)
                    {
                        echo("La modification à été correctement effectuée") ;
                    }
                    else
                    {
                        echo("La modification à échouée") ;
                    }
                    ?>




                    -
                    Edité par djé22 20 novembre 2017 à 14:45:34

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 novembre 2017 à 14:47:15

                      Pour que tu comprennes le code ci-dessous:

                      <?php
                          //Pour test
                          $dataBD = array(
                          '0' => array('maCheckBox0' => 'toto'),
                          '1' => array('maCheckBox1' => 3254)
                          );
                          
                          foreach ($dataBD AS $ligne) {
                              $maCheckBox = '<input type="checkbox"';
                              if (!empty($ligne['maCheckBox0'])) {
                                  $maCheckBox .= ' value="'.$ligne['maCheckBox0'].'"';
                              }
                       
                              $maCheckBox .= '/>'.PHP_EOL;
                              if (!empty($ligne['maCheckBox0'])) {
                                  $maCheckBox .= $ligne['maCheckBox0'];
                              } else {
                                  $maCheckBox .= ' Ma valeur par defaut';
                              }
                              echo $maCheckBox.'<br/>'.PHP_EOL;
                          }
                      ?>
                      

                      Sort ce code source:

                      <input type="checkbox" value="toto"/>
                      toto<br/>
                      <input type="checkbox"/>
                       Ma valeur par defaut<br/>
                      

                      ++

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 novembre 2017 à 14:59:53

                        euh, j'ai honte de le dire mais comprends pas !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 novembre 2017 à 15:00:53

                          tu ne comprends pas quoi ? Dis nous où ça bloque.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 novembre 2017 à 16:14:07

                            dois-je faire une page 1 = formulaire avec le code que tu appelles le "code source" et qui envoie les données dans une page 2 pour être updatées dans la base ?

                            et je fais une table dans ma base ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 novembre 2017 à 16:26:03

                              Oula, les bases ne sont pas acquises ;)

                              Code source == code HTML généré que tu peux voir en "affichant le source de la page"

                              Mon exemple part du principe que tu as des données en base, donc pour simuler cela, j'ai simplement mis un tableau. Ensuite la logique reste identique, une boucle sur le résultat et lorsque tu tombes sur la case à cocher tu "écris" dans le code source ;)

                              ++

                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 novembre 2017 à 19:44:05

                                merci

                                oui, c'est sûr que je pars de très loin et je n'ai suivi que quelques tuto OC mais là je ne vois pas du tout où tu veux en venir (mais je reconnais que je suis très lent)

                                mon problème n'est plus tant d'écrire dans le code source car avec mon code actuel, quand ma valeur en base est 0 j'ai une case non cochée qui s'affiche et quand la valeur dans ma base est 1 j'ai case cochée qui s'affiche

                                mon problème est d'écrire dans ma base... si je décoche une case cochée je veux que ma valeur passe à 0 et inversement si je coche une case je veux que la valeur en base passe à 1

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 novembre 2017 à 21:22:50

                                  Tu ne peux pas procéder comme ça, comme je te l'ai déjà dit, une case non cochée ne renverra pas de variable $_POST du tout.

                                  Donc soit tu procèdes par élimination (tu passes en revue dans la base les valeur id non renvoyées dans le POST), soit tu utilises un autre moyen pour transmettre l'info (bouton radio, input hidden...).

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 novembre 2017 à 10:17:00

                                    Bonjour,

                                    j'ai finalement opté pour une la solution que m'a donné Ymox sur le forum Zeste de savoir qui fonctionne très bien.

                                    le code ci-dessous :

                                    dms_modification2.php

                                    <?php
                                    // On démarre la session AVANT d'écrire du code HTML
                                    session_start();
                                    
                                    ?>
                                    
                                    
                                    <!DOCTYPE html>
                                    
                                    <html>
                                    
                                        <head>
                                    
                                            <meta charset="utf-8" />
                                            <link rel="stylesheet" href="style.css" />
                                            <title>Mereva</title>
                                    
                                        </head>
                                    
                                        <body>
                                            
                                            <!--début du bloc page-->
                                            <div id="page">
                                    
                                                <!-- En-tête -->
                                                <div class="element_page"> 
                                                    <?php include("entete.php"); ?>
                                                </div>
                                    
                                                <!-- Le corps --> 
                                                <div class="element_page">
                                                    <div id="corps">
                                                        
                                                        <?php include("menus.php"); ?>
                                                        <!--Tableau avec le contenu de la table GBD_DAT-->
                                                                    
                                                        <div id='element_tableau'>
                                    	                    <div id="tableau">
                                    
                                    							<?php
                                    
                                    							//*******************************************************************
                                    							//affichage page par page tutoriel Ymox sur le site Zeste de Savoir
                                    							//https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/
                                    
                                    							//*******************************************************************
                                    							
                                    
                                    							//*Connexion à la base de données
                                    		                    //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                                    		                    try
                                    							{
                                    							// On se connecte à MySQL
                                    							$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                                    							}
                                    							catch(Exception $e)
                                    							{
                                    							// En cas d'erreur, on affiche un message et on arrête tout
                                    							die('Erreur : '.$e->getMessage());
                                    							}
                                    
                                    							$limite = 10;
                                    							$page = (!empty($_GET['page']) ? $_GET['page'] : 1);
                                    							$debut = ($page - 1) * $limite;
                                    
                                    
                                    							// Partie "Requête"
                                    							/* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
                                    							/*sans tenir compte du critère limit*/
                                    							$sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat1` LIMIT :limite OFFSET :debut';
                                    							$query = ($sql);
                                    							/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                                    							$query = $bdd->prepare($query);
                                    							/* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
                                    							$query->bindValue(
                                    							'limite',         // Le marqueur est nommé « limite »
                                    							$limite,         // Il doit prendre la valeur de la variable $limite
                                    							PDO::PARAM_INT   // Cette valeur est de type entier
                                    							);
                                    							$query->bindValue(
                                    							'debut',         // Le marqueur est nommé « début »
                                    							$debut,         // Il doit prendre la valeur de la variable $debut
                                    							PDO::PARAM_INT   // Cette valeur est de type entier
                                    							);
                                    
                                    							/* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
                                    							$resultSet = $query->execute();
                                    
                                    							/* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
                                    							* faut pas oublier qu'on ne récupère pas directement le nombre.
                                    							* De plus, comme la requête ne contient aucune donnée client pour fonctionner,
                                    							* on peut l'exécuter ainsi directement */
                                    							$resultFoundRows = $bdd->query('SELECT found_rows()');
                                    							/* On doit extraire le nombre du jeu de résultat */
                                    							$nombredElementsTotal = $resultFoundRows->fetchColumn();
                                    
                                    							// début du tableau
                                    							echo '<table>'."\n";
                                    							// première ligne on affiche les titres prénom et surnom dans 2 colonnes
                                    							echo '<tr class="class01">';
                                    							echo '<td class="ID">#ID</td>';
                                    							echo '<td class="Patient">Patient</td>';
                                    							echo '<td class="Fiche">Fiche</td>';
                                    							echo '<td class="Question">Question</td>';
                                    							echo '<td class="Description">Description</td>';
                                    							echo '<td class="Details">Details</td>';
                                    							echo '<td class="Correction">Corrections</td>';
                                    							echo '<td class="NR">NR</td>';
                                    							echo '<td class="Commentaires">Commentaires</td>';
                                    							echo '</tr>';
                                    							echo '</table>'."\n";
                                    							// Partie "Boucle"
                                    							// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
                                    							?><form id="insertion" name="insertion" action="dms_modification3.php" method="POST">    
                                    							<?php
                                    							while($element= $query -> fetch()) 
                                    							{
                                    								?>
                                    								
                                    								<input type="hidden" name="limite" value="<?php echo($limite) ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][id]" value="<?php echo $element['id'] ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][pat]" value="<?php echo $element['pat'] ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][fic]" value="<?php echo $element['fic'] ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][que]" value="<?php echo $element['que'] ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][des]" value="<?php echo $element['des'] ;?>">
                                    								<input type="hidden" name="lignes[<?php echo $element['id']; ?>][det]" value="<?php echo $element['det'] ;?>">
                                    								  <table>
                                    								    <tr class="class02">
                                    
                                    								    <td class="ID"><?php echo $element['id'] ;?></td>
                                    									<td class="Patient"><?php echo $element['pat'] ;?></td>
                                    									<td class="Fiche"><?php echo $element['fic'] ;?></td>
                                    									<td class="Question"><?php echo $element['que'] ;?></td>
                                    									<td class="Description"><?php echo $element['des'] ;?></td>
                                    									<td class="Details"><?php echo $element['det'] ;?></td>
                                    									<td class="Corrections"><input class="cor" type="text" name="lignes[<?php echo $element['id']; ?>][cor]" value="<?php echo $element['cor'] ;?>"></td>
                                    									<td class="NR"><input class="non_rec" type="checkbox" name="lignes[<?php echo $element['id']; ?>][non_rec]"<?php if($element['non_rec'] == 1) echo ' checked="checked"'; ?> /></td>
                                    									<td class="Commentaires"><input class="com" type="text" name="lignes[<?php echo $element['id']; ?>][com]" value="<?php echo $element['cor'] ;?>"></td>
                                    								    </tr>
                                    								   	</table>
                                    								<?php
                                    							}//fin while 
                                    						?>
                                    									
                                    									<div id="btn_modifier">
                                    									<input class="modifier" type="submit" value="Modifier">
                                    									</div>
                                    								  
                                    								</form>
                                    						
                                    						<!--fin du bloc tableau-->  
                                    						</div>
                                    	                        
                                    
                                    
                                                        <!--fin du bloc element_tableau-->
                                                        </div>
                                    
                                    	                    <?php
                                    	                    $query->closeCursor();
                                    	                    ?>
                                                    <!--fin du bloc corps-->
                                                    </div>
                                    
                                                <!--fin du bloc element_page correspondant au CORPS-->
                                                </div>
                                    
                                                <div class="element_page">
                                    	            <!--// Partie "Filtres"-->
                                    				<div id='filtres'>
                                    				    <form action="demande_de_corrections_page_filtres.php" method="get">
                                                        <select onselect="this.form.submit()" name="patient" id="patient">
                                                        <?php
                                                        $sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
                                                        $result = $bdd->query($sql); 
                                                        while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                                                        {
                                                        ?>
                                                        <option value="<?php echo $element['pat'];?>"><?php echo $donnees['pat'];?></option>
                                                        <?php
                                                        }
                                                        ?>
                                                        </select>
                                                        <select onselect="this.form.submit()" name="fiche" id="fiche">
                                                        <?php
                                                        $sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
                                                        $result = $bdd->query($sql);
                                                        while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                                                        {
                                                        ?>
                                                        <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                                                        <?php
                                                        }
                                                        ?>
                                                        </select>
                                    				    <input class="valider" type="submit" value="Valider" />                             
                                    			        </form> 
                                    			    </div>
                                    
                                    			     <!--// Partie "Liens"-->
                                    			    
                                    				<div id='liens'>
                                    
                                    				    <?php
                                    					/* On calcule le nombre de pages */
                                    					$nombreDePages = ceil($nombredElementsTotal / $limite);
                                    
                                    
                                    
                                    					/* Si on est sur la première page, on n'a pas besoin d'afficher de lien
                                    					* vers la précédente. On va donc l'afficher que si on est sur une autre
                                    					* page que la première */
                                    					if ($page > 1):
                                    					?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
                                    					endif;
                                    
                                    					/* On va effectuer une boucle autant de fois que l'on a de pages */
                                    					for ($i = 1; $i <= $nombreDePages; $i++):
                                    					?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
                                    					endfor;
                                    
                                    					/* Avec le nombre total de pages, on peut aussi masquer le lien
                                    					* vers la page suivante quand on est sur la dernière */
                                    					if ($page < $nombreDePages):
                                    					?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
                                    					endif;
                                    					?>         
                                    		        </div> 
                                    		    </div>
                                    
                                                <!-- Le pied de page -->
                                                <div class="element_page"> 
                                                <div id="pied_de_page"/>
                                                <?php include("pied_de_page.php"); ?>
                                                </div>
                                                </div> 
                                    
                                            <!--fin du bloc page-->
                                            </div>
                                        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
                                        <!-- jQuery est inclus ! -->
                                       <script>
                                    
                                            jQuery(document).ready(function(){
                                            // Du code en jQuery va pouvoir être tapé ici !
                                            console.log("jQuery est prêt !");
                                    		});
                                    
                                    
                                    		
                                    
                                       </script>
                                        </body>
                                    
                                    </html>


                                    dms_modification3.php

                                    <?php
                                    //connection au serveur
                                    try
                                    {
                                    // On se connecte à MySQL
                                    $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                                    }
                                    catch(Exception $e)
                                    {
                                    // En cas d'erreur, on affiche un message et on arrête tout
                                    die('Erreur : '.$e->getMessage());
                                    }
                                     
                                    //$nb = count($_POST['id']);
                                    $limite = $_POST['limite'];
                                    //var_dump($_POST['non_rec']);
                                    //préparation de la requête
                                    $requete = "UPDATE gbd_dat1 SET 
                                    		pat = :patient,
                                    		fic = :fiche,
                                    		que = :question,
                                    		des = :description,
                                    		det = :details,
                                    		cor = :correction,
                                    		non_rec = :nonrecuperable,
                                    		com = :commentaires
                                    		WHERE id = :id ";
                                    
                                    /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                                    $result = $bdd->prepare($requete);
                                    
                                    //print_r($bdd->errorInfo());
                                    $result->bindParam('id',$id,PDO::PARAM_INT);
                                    $result->bindParam('patient',$patient,PDO::PARAM_STR);
                                    $result->bindParam('fiche',$fiche,PDO::PARAM_STR);
                                    $result->bindParam('question',$question,PDO::PARAM_STR);
                                    $result->bindParam('description',$description,PDO::PARAM_STR);
                                    $result->bindParam('details',$details,PDO::PARAM_STR);
                                    $result->bindParam('correction',$correction,PDO::PARAM_STR);
                                    $result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
                                    $result->bindParam('commentaires',$commentaires,PDO::PARAM_STR);
                                    
                                    for($i=0;$i<$limite;$i++)
                                       {
                                    		foreach($_POST['lignes'] as $id => $donneesLigne)
                                    		{
                                    			$patient=$donneesLigne['pat'];
                                    			$fiche=$donneesLigne['fic'];
                                    			$question=$donneesLigne['que'];
                                    			$description=$donneesLigne['des'];
                                    			$details=isset($donneesLigne['det']) ? $donneesLigne['det'] : '';
                                    			$correction=$donneesLigne['cor'];
                                    			$nonrecuperable=isset($donneesLigne['non_rec']) ? 1 : 0;
                                    			$commentaires=$donneesLigne['com'];
                                    			$id=$donneesLigne['id'];
                                    			$result->execute();
                                    		}
                                    	}
                                     
                                    //affichage des résultats, pour savoir si la modification a marchée:
                                    if($requete)
                                    {
                                        echo("La modification à été correctement effectuée") ;
                                    }
                                    else
                                    {
                                        echo("La modification à échouée") ;
                                    }
                                    ?>




                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 novembre 2017 à 10:47:01

                                      Est-ce qu'il t'a donné ce code finit prêt à ton emploi ?

                                      Est-ce que tu comprends ce code ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 novembre 2017 à 11:32:56

                                        oui, il m'a bien expliqué le code (ici) mais il faut que je retravaille dessus pour le maitriser

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Récupérer valeur de checkbox

                                        × 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