Validation mulitiple

binousha_1022 Messages postés 44 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, moi je ferais cela via des cases à cocher groupées.
    as-tu déjà une bonne connaissance de php et html?
    0
  2. binousha_1022 Messages postés 44 Statut Membre
     
    oui mais je suis débutante et je suis en train de créer un logiciel de suivi commande. Merci de m'aider svp.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      qu'as-tu déjà réalisé?
      0
  3. binousha_1022 Messages postés 44 Statut Membre
     
    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>
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      quel est le lien qui permet de rediriger vers un formulaire?
      0
  4. binousha_1022 Messages postés 44 Statut Membre
     
    Bonjour, voici le lien qui permet de rediriger vers un formulaire:

    <a href="naturecommande.html">Valider la commande</a>
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      et où se fait la validation de la commande, et le choix de quelle commande est validée?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. binousha_1022 Messages postés 44 Statut Membre
     
    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>
    
    0
  7. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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);
    

    0
  8. binousha_1022 Messages postés 44 Statut Membre
     
    Merci pour les remarques c'est parce que je suis débutante. Je vais exploiter çà et vous revenir.
    0
  9. binousha_1022
     
    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();
        }
    ?>
    
    0
  10. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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();
      }
      
    ?>
    

    0
  11. binousha_1022
     
    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
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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)
      
      0
  12. binousha_1022
     
    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
    0
    1. binousha_1022
       
      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.
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > binousha_1022
         
        Quel 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....
        0
  13. binousha_1022 Messages postés 44 Statut Membre
     
    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();
      }
      
    ?>
    
    0