Validation mulitiple

Signaler
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020
-
jordane45
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
-
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

Messages postés
9351
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2020
489
bonjour, moi je ferais cela via des cases à cocher groupées.
as-tu déjà une bonne connaissance de php et html?
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

oui mais je suis débutante et je suis en train de créer un logiciel de suivi commande. Merci de m'aider svp.
yg_be
Messages postés
9351
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2020
489
qu'as-tu déjà réalisé?
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

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>
yg_be
Messages postés
9351
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2020
489
quel est le lien qui permet de rediriger vers un formulaire?
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

Bonjour, voici le lien qui permet de rediriger vers un formulaire:

<a href="naturecommande.html">Valider la commande</a>
yg_be
Messages postés
9351
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2020
489
et où se fait la validation de la commande, et le choix de quelle commande est validée?
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

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>
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
2018
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://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://www.commentcamarche.net/faq/46512-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);

Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

Merci pour les remarques c'est parce que je suis débutante. Je vais exploiter çà et vous revenir.

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();
    }
?>
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
2018
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();
  }
  
?>


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
jordane45
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
2018
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)

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

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.
jordane45
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
2018 > 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....
Messages postés
16
Date d'inscription
mercredi 11 décembre 2019
Statut
Membre
Dernière intervention
10 janvier 2020

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();
  }
  
?>
jordane45
Messages postés
27288
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 janvier 2020
2018
Si tu récupérais proprement tes variables avant de les utiliser.. tu n'aurais pas de message d'erreur...
$numerocompte = !empty($_POST["numerocompte"]) ? $_POST["numerocompte"] : NULL;



=====>>> A lire ET a appliquer : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.