Validation mulitiple

Bonjour, comment créer des boutons de validations multiples, c'est à dire cocher plusieurs lignes, les valider et si la validation est correcte qu'il nous renvoie sur une autre page qui nous demandera de saisir la date de validation. Je travaille sur html, php et mysql.

12 réponses

  1. Contributeur
    bonjour, moi je ferais cela via des cases à cocher groupées.
    as-tu déjà une bonne connaissance de php et html?
    1. oui mais je suis débutante et je suis en train de créer un logiciel de suivi commande. Merci de m'aider svp.
      1. Contributeur
        qu'as-tu déjà réalisé?
    2. J'ai créer une liste qui permet d'afficher la liste des commandes reçues (qui marche actuellement) et en dessous de la liste j'ai crée un lien qui permet de rediriger vers un formulaire et valider les commandes une à une (ce qui est fastidieux). Maintenant je veux que le récepteur coche chaque ligne et les valider en une seule fois.
      Voici le code:

      <!DOCTYPE html>
      <html>
      <head>
      	<meta charset="utf-8"/>
      	<title>Recherche</title>
      	<style>
      		table{width:100%;border-collapse:collapse}
      		table tr,table th,table td{border:1px solid black;}
      		table tr td{text-align:center;padding:1em;}
      	</style>
      </head>
      <body>
      	<?php include('connection_database.php');?>
      	<form method='post'>
      		<input type='text' placeholder='numerocompte' name="numerocompte"/>
      		<input type='submit' value="Rechercher"/>
      	</form>
      	<table>
      		<thead>
      			<tr><th>Agence</th><th>Nom de l'agent</th><th>Date Commande</th><th>Prénom</th><th>Nom</th><th>N°Compte</th><th>Monture</th><th>Statut</th></th></tr>
      		</thead>
      		<tbody>
      			<?php
      				$sql='select * from commande WHERE date_reception_log IS NULL';
      				$params=[];
      				if(isset($_POST['numerocompte'])){
      					$sql.=' where numerocompte like :numerocompte';
      					$params[':numerocompte']="%".addcslashes($_POST['numerocompte'],'_')."%";
      				}
      				$resultats=$connect->prepare($sql);
      				$resultats->execute($params);
      				if($resultats->rowCount()>0){
      					while($d=$resultats->fetch(PDO::FETCH_ASSOC)){
      					?>
      						<tr><td><?=$d['agence']?></td><td><?=$d['nomagent']?></td><td><?=$d['datecommande']?></td><td><?=$d['prenom']?></td><td><?=$d['nom']?></td><td><?=$d['numerocompte']?></td><td><?=$d['monture']?></td><td><?=$d['statut']?></tr>
      					<?php
      					}
      					$resultats->closeCursor();
      				}
      				else echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
      				$connect=null;
      			?>
      		</tbody>
      	</table>
      <a href="naturecommande.html">Valider la commande</a>
      </body>
      </html>
      
      1. Contributeur
        quel est le lien qui permet de rediriger vers un formulaire?
    3. Bonjour, voici le lien qui permet de rediriger vers un formulaire:

      <a href="naturecommande.html">Valider la commande</a>
      1. Contributeur
        et où se fait la validation de la commande, et le choix de quelle commande est validée?
    4. Mr, j'ai posté le code qui permet d'afficher toutes les commandes reçues. Maintenant je veux mettre une case sur chaque ligne, si on veut valider certaines commandes il suffira juste de cocher les cases et cliquer sur valider. j'espère que je suis claire maintenant.
      Voici encore le code:

      <!DOCTYPE html>
      <html>
      <head>
      	<meta charset="utf-8"/>
      	<title>Recherche</title>
      	<style>
      		table{width:100%;border-collapse:collapse}
      		table tr,table th,table td{border:1px solid black;}
      		table tr td{text-align:center;padding:1em;}
      	</style>
      </head>
      <body>
      	<?php include('connection_database.php');?>
      	<form method='post'>
      		<input type='text' placeholder='numerocompte' name="numerocompte"/>
      		<input type='submit' value="Rechercher"/>
      	</form>
      	<table>
      		<thead>
      			<tr><th>Agence</th><th>Nom de l'agent</th><th>Date Commande</th><th>Prénom</th><th>Nom</th><th>N°Compte</th><th>Monture</th><th>Statut</th></th></tr>
      		</thead>
      		<tbody>
      			<?php
      				$sql='select * from commande WHERE date_reception_log IS NULL';
      				$params=[];
      				if(isset($_POST['numerocompte'])){
      					$sql.=' where numerocompte like :numerocompte';
      					$params[':numerocompte']="%".addcslashes($_POST['numerocompte'],'_')."%";
      				}
      				$resultats=$connect->prepare($sql);
      				$resultats->execute($params);
      				if($resultats->rowCount()>0){
      					while($d=$resultats->fetch(PDO::FETCH_ASSOC)){
      					?>
      						<tr><td><?=$d['agence']?></td><td><?=$d['nomagent']?></td><td><?=$d['datecommande']?></td><td><?=$d['prenom']?></td><td><?=$d['nom']?></td><td><?=$d['numerocompte']?></td><td><?=$d['monture']?></td><td><?=$d['statut']?></tr>
      					<?php
      					}
      					$resultats->closeCursor();
      				}
      				else echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
      				$connect=null;
      			?>
      		</tbody>
      	</table>
      <a href="naturecommande.html">Valider la commande</a>
      </body>
      </html>
      
      1. Modérateur
        Bonjour,

        Déjà, il y a quelques erreurs dans ton code.
        Des balises HTML mal fermées,
        Utilisation du rowCount en PDO qu'il ne faut pas faire sur une requête select ..
        Utilisation d'une simple lien pour "valider" la commande...
        Volonté de mettre des cases à cocher... mais sans les coder ...

        Je t'invite, au passage, à lire ET à appliquer le contenu de ces deux liens:
        https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
        https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

        Bref,
        Voici à quoi devrait ressembler ton code :
        
        <?php
        //activation des erreurs php
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        
        //connexion à la bdd
        require_once('connection_database.php');
        
        //traitement
        $sql='select * from commande WHERE date_reception_log IS NULL';
        $params=[];
        if(isset($_POST['numerocompte'])){
          $sql.=' where numerocompte like :numerocompte';
          $params[':numerocompte']="%".addcslashes($_POST['numerocompte'],'_')."%";
        }
        try{
          $req =$ connect->prepare($sql);
          $req->execute($params);
          $resultats = $req->fetchAll(); // on stocke le resultat dans un array
        }catch(Exception $e){ 
          // en cas de souci dans la requête !
          echo " Erreur : " . $e->getMessage();
        }
        
        <!DOCTYPE html>
        <html>
        <head>
        	<meta charset="utf-8"/>
        	<title>Recherche</title>
        	<style>
        		table{width:100%;border-collapse:collapse}
        		table tr,table th,table td{border:1px solid black;}
        		table tr td{text-align:center;padding:1em;}
        	</style>
        </head>
        <body>
        	
        	<form method='post'>
        		<input type='text' placeholder='numerocompte' name="numerocompte"/>
        		<input type='submit' value="Rechercher"/>
        	</form>
          
          <form method='post' action='validation.php'>
        	<table>
        		<thead>
        			<tr>
                  <th>#</th>
                  <th>Agence</th>
                  <th>Nom de l'agent</th>
                  <th>Date Commande</th>
                  <th>Prénom</th>
                  <th>Nom</th>
                  <th>N°Compte</th>
                  <th>Monture</th>
                  <th>Statut</th>
                </tr>
        		</thead>
        		<tbody>
        			<?php
        				
        				if(!empty($resultats)){
                  foreach($resultats as $d){
        					  echo "<tr>
                            <td><input type='checkbox' name='listeCmd[]' value='" . $d['id'] . "' value='1'></td>
                            <td>" . $d['agence'] . "</td>
                            <td>" . $d['nomagent'] . "</td>
                            <td>" . $d['datecommande'] . "</td>
                            <td>" . $d['prenom'] . "</td>
                            <td>" . $d['nom'] . "</td>
                            <td>" . $d['numerocompte'] . "</td>
                            <td>" . $d['monture'] . "</td>
                            <td>" . $d['statut'] . "</td>
                          </tr>";					
        					}
        				}else{
                 echo "<tr><td colspan='4'>aucun résultat trouvé</td></tr>";
                }
        				
                $connect=null;
        			?>
        		</tbody>
        	</table>
          <!-- <a href="naturecommande.html">Valider la commande</a> -->
          <input type='submit' name='Valider'>
        </form>
        </body>
        </html>
        


        Bien entendu, j'ai mis un chemin bidon dans le form
          <form method='post' action='validation.php'> 

        Je te laisse définir vers quel fichier doit aller le formulaire pour valider...

        J'ai également utilisé l'ID dans les cases à cocher
         <td><input type='checkbox' name='listeCmd[]' value='" . $d['id'] . "' value='1'></td>
        

        A toi de remplacer ce champ par celui qui correspond à ton numéro dans ta bdd (le nom du champ)

        Une fois ces modifications faites, tu pourras retrouver dans la page de validation, la liste des commandes cochées via la variable post
        $listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] : NULL;
        print_r($listeCmd);
        

        1. Merci pour les remarques c'est parce que je suis débutante. Je vais exploiter çà et vous revenir.
          1. Bonjour jordane45; j'ai exploité vos codes mais je galère touours. Je parviens à voire les cases et les cocher mais quand je rempli le formulaire il ne met pas à jour la table.

            Voici les codes:

            listecommande.php

            <!DOCTYPE html>
            <html>
            <head>
            	<meta charset="utf-8"/>
            	<title>Recherche</title>
            	<style>
            		table{width:100%;border-collapse:collapse}
            		table tr,table th,table td{border:1px solid black;}
            		table tr td{text-align:center;padding:1em;}
            	</style>
            </head>
            <body>
            	<?php include('connection_database.php');?>
            	<form method='post'>
            		<input type='text' placeholder='numerocompte' name="numerocompte"/>
            		<input type='submit' value="Rechercher"/>
            	</form>
            	<form method='post' action='validation.php'>
            	<table>
            		<thead>
            			<tr>
            			
            			<th>Choisir</th>
            			<th>Agence</th>
            			<th>Nom de l'agent</th>
            			<th>Date Commande</th>
            			<th>Prénom</th>
            			<th>Nom</th>
            			<th>N°Compte</th>
            			<th>Monture</th>
            			<th>Montant</th>
            			<th>Acompte</th>
            			
            			</tr>
            		</thead>
            		<tbody>
            			<?php
            				$sql='select * from commande WHERE date_reception_compta IS NULL';
            				$params=[];
            				if(isset($_POST['numerocompte'])){
            					$sql.=' and numerocompte like :numerocompte';
            					$params[':numerocompte']="%".addcslashes($_POST['numerocompte'],'_')."%";
            				}
            				$resultats=$connect->prepare($sql);
            				$resultats->execute($params);
            				if($resultats->rowCount()>0){
            					while($d=$resultats->fetch(PDO::FETCH_ASSOC)){
            					?>
            						<tr>
            						<td><input type='checkbox' name='listeCmd[]' value='" . $d['id'] . "' value='numerocompte'></td>
            						<td><?=$d['agence']?></td>
            						<td><?=$d['nomagent']?></td>
            						<td><?=$d['datecommande']?></td>
            						<td><?=$d['prenom']?></td>
            						<td><?=$d['nom']?></td>
            						<td><?=$d['numerocompte']?></td>
            						<td><?=$d['monture']?></td>
            						<td><?=$d['montant']?></td>
            						<td><?=$d['acompte']?></tr>
            					<?php
            					}
            					$resultats->closeCursor();
            				}
            				else echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
            				$connect=null;
            			?>
            		</tbody>
            	</table>
            	<input type='submit' name='Valider'>
            </body>
            </html>
            


            validation.php

            <?php include('connection_database.php');?>
            
            <?php
            // vérifions que la variable a été transmise
            //$listeCmd = (isset($_POST['listeCmd']))?$_POST['listeCmd']:null;
            
            echo "Voici les commandes que vous avez coché :<br>";
            // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
            //if (!empty($listeCmd)) {
             // foreach($listeCmd as $cle => $valeur) {
            	$listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] : NULL;
            
                print_r($listeCmd);
            
            	//echo $cle.' : '.$valeur.'<br>';
              /*}
            }*/
            ?>
            <!DOCTYPE html>
            <html>
                 <head>
            	
            		 <meta charset="utf-8"/>
            		 <link rel="stylesheet" href="inscription.css"/>
            		 </head>
                    
                    <form action="validationcomptabletest.php" method="post">
                        
                        <div class="c100">
                            <label for="date_reception_compta">Date de réception : </label>
                            <input type="date" id="date_reception_compta" name="date_reception_compta">
                        </div>
                        <div class="c100">
                            <label for="date_transmission_log">Date de transmission: </label>
                            <input type="date" id="date_transmission_log" name="date_transmission_log">
                        </div>
                        
                       
                        <div class="c100" id="submit">
                            <input type="submit" value="Valider">
                        </div>
                    </form>
            </html>
            


            validationcomptabletest.php

            <?php
                $serveur = "localhost";
                $dbname = "suivicommande";
                $user = "root";
                $pass = "";
                
                $date_reception_compta = $_POST["date_reception_compta"];
                $date_transmission_log = $_POST["date_transmission_log"];
                $listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] : [];
            	$lesID = "(";
                
                try{
                    //On se connecte à la BDD
                    $dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,'');
                    $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                
                    //On insère les données reçues
            		
            		// on cree la liste des id que l'on doit mettre à jour
            		foreach ($listeCmd as $id) {
            			$lesID .= "'". $id . "',";
            		}
            		$lesID = substr($lesID, 0, -1);  
            		$lesID .= ")";
            		
                    $sth = $dbco->prepare("
                        UPDATE commande
            			SET date_reception_compta=:date_reception_compta, date_transmission_log=:date_transmission_log
            			WHERE (id in :id)"); 
                        
                    $sth->bindParam(':date_reception_compta',$date_reception_compta,PDO::PARAM_STR);
                    $sth->bindParam(':date_transmission_log',$date_transmission_log,PDO::PARAM_STR);
                    $sth->bindParam(':id',$lesID,PDO::PARAM_STR);
            		$sth->execute();
                    
                    //On renvoie l'utilisateur vers la page de remerciement
                    header("Location:espacecomptable.php");
                }
                catch(PDOException $e){
                    echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
                }
            ?>
            
            1. Modérateur
              Tu envoies, en POST, les checkbox que tu as selectionné....... mais elles ne sont pas transmises ensuite dans ton second formulaire.
              Normal donc que ça ne les mette pas à jour en bdd...

              Essaye ça

              validation.php
              <?php include('connection_database.php');?>
              
              <?php
              // vérifions que la variable a été transmise
              //$listeCmd = (isset($_POST['listeCmd']))?$_POST['listeCmd']:null;
              
              echo "Voici les commandes que vous avez coché :<br>";
              // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
              //if (!empty($listeCmd)) {
               // foreach($listeCmd as $cle => $valeur) {
              	$listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] : NULL;
              
                  //print_r($listeCmd);
                $listCmdList = join(',',$listCmd); // on transforme l'array en string séparée par virgule
              	//echo $cle.' : '.$valeur.'<br>';
                /*}
              }*/
              ?>
              <!DOCTYPE html>
              <html>
                   <head>
              	
              		 <meta charset="utf-8"/>
              		 <link rel="stylesheet" href="inscription.css"/>
              		 </head>
                      
                      <form action="validationcomptabletest.php" method="post">
                          
                          <div class="c100">
                              <label for="date_reception_compta">Date de réception : </label>
                              <input type="date" id="date_reception_compta" name="date_reception_compta">
                          </div>
                          <div class="c100">
                              <label for="date_transmission_log">Date de transmission: </label>
                              <input type="date" id="date_transmission_log" name="date_transmission_log">
                          </div>
                          
                          <input type="hidden" name="listCmd" value="<?php echo $listCmdList;?>">
                         
                          <div class="c100" id="submit">
                              <input type="submit" value="Valider">
                          </div>
                      </form>
              </html>
              


              validationcomptabletest.php
              <?php 
               require_once('connection_database.php');
               
                  
                $date_reception_compta = $_POST["date_reception_compta"];
                $date_transmission_log = $_POST["date_transmission_log"];
                $listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] : [];
              	
                $lesID = explode(',',$listCmd);
                  
                try{
                  $sql = "UPDATE commande
                            SET date_reception_compta=:date_reception_compta, 
                                date_transmission_log=:date_transmission_log
                          WHERE id = :id ";
                  $sth = $dbco->prepare($sql); 
              		foreach ($listeCmd as $id) {
                      $sth->bindParam(':date_reception_compta',$date_reception_compta,PDO::PARAM_STR);
                      $sth->bindParam(':date_transmission_log',$date_transmission_log,PDO::PARAM_STR);
                      $sth->bindParam(':id',$id,PDO::PARAM_STR);
                      $sth->execute();
                    }  
                    //On renvoie l'utilisateur vers la page de remerciement
                    //header("Location:espacecomptable.php"); on desactive le temps de tests sinon on ne verra pas les éventuelles erreurs...
                    //exit; //toujours un exit après une redirection !
                    
                } catch(PDOException $e){
                  echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
                }
                
              ?>
              

              1. Je l'ai testé mais j'ai ces erreurs:

                ( ! ) Notice: Undefined variable: listCmd in C:\wamp64\www\SuiviCommande\validation.php on line 14

                ( ! ) Warning: join(): Invalid arguments passed in C:\wamp64\www\SuiviCommande\validation.php on line 14
                1. Modérateur
                  validation.php : erreur de copier/coller ... à remplacer par $listeCmd
                  $listCmdList = join(',',$listCmd); // on transforme l'array en string séparée par virgule
                  


                  A remplacer par
                  $listCmdList = join(',',$listeCmd); // on transforme l'array en string séparée par virgule
                  
                  


                  Dans validationcomptabletest.php,
                  foreach ($listeCmd as $id)
                  

                  A remplacer par
                  foreach ($lesID as $id)
                  
              2. C'est fait mais j'ai un autre erreur au niveau de validationcomptabletest.php; en plus il ne m'affiche pas la liste.

                ( ! ) Notice: Undefined index: numerocompte in C:\wamp64\www\SuiviCommande\validationcomptabletest.php on line 7
                Call Stack
                # Time Memory Function Location
                1 0.0013 406424 {main}( ) ...\validationcomptabletest.php:0
                Impossible de traiter les données. Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de '')')' � la ligne 3
                1. Bonjour tout le monde, quelqu'un pour m'aider à résoudre ce problème SVP, je galère et je dois livrer le projet dans une semaine.
                2. Modérateur
                  @binousha_1022Quel code se trouve dans ton fichier SuiviCommande\validationcomptabletest.php?

                  Sachant que le message est clair.... il ne connait pas la "variable" numerocompte à la ligne 7 de ce fichier....
              3. Bonjour et merci pour votre aide depuis le début, j'ai déclaré numerocompte mais j'ai la même erreur. Voici le code:

                <?php 
                 require_once('connection_database.php');
                  $date_reception_compta = $_POST["date_reception_compta"];
                  $date_transmission_log = $_POST["date_transmission_log"];
                  $numerocompte = $_POST["numerocompte"];
                  $listeCmd = !empty($_POST['listeCmd']) ? $_POST['listeCmd'] :[] ;
                  $lesID = explode(',',$listCmd); 
                  try{
                    $sql = "UPDATE commande
                              SET date_reception_compta=:date_reception_compta, 
                                  date_transmission_log=:date_transmission_log
                            WHERE id = :id ";
                    $sth = $dbco->prepare($sql); 
                		foreach ($lesIDas $id)
                 {
                        $sth->bindParam(':date_reception_compta',$date_reception_compta,PDO::PARAM_STR);
                        $sth->bindParam(':date_transmission_log',$date_transmission_log,PDO::PARAM_STR);
                        $sth->bindParam(':id',$id,PDO::PARAM_STR);
                        $sth->execute();
                      }  
                      //On renvoie l'utilisateur vers la page de remerciement
                      header("Location:espacecomptable.php"); 
                      //exit; 
                      
                  } catch(PDOException $e){
                    echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
                  }
                  
                ?>