Validation mulitiple

Fermé
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020 - 12 déc. 2019 à 13:42
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 9 janv. 2020 à 17:54
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

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
12 déc. 2019 à 20:22
bonjour, moi je ferais cela via des cases à cocher groupées.
as-tu déjà une bonne connaissance de php et html?
0
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
13 déc. 2019 à 16:57
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
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 déc. 2019 à 17:57
qu'as-tu déjà réalisé?
0
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
13 déc. 2019 à 21:38
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
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 déc. 2019 à 22:06
quel est le lien qui permet de rediriger vers un formulaire?
0
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
16 déc. 2019 à 10:00
Bonjour, voici le lien qui permet de rediriger vers un formulaire:

<a href="naturecommande.html">Valider la commande</a>
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
16 déc. 2019 à 10:48
et où se fait la validation de la commande, et le choix de quelle commande est validée?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
16 déc. 2019 à 11:26
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
16 déc. 2019 à 11:50
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
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
16 déc. 2019 à 12:16
Merci pour les remarques c'est parce que je suis débutante. Je vais exploiter çà et vous revenir.
0
binousha_1022
6 janv. 2020 à 12:50
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 janv. 2020 à 16:41
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
binousha_1022
6 janv. 2020 à 17:18
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 6 janv. 2020 à 19:03
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
binousha_1022
6 janv. 2020 à 17:51
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
binousha_1022
8 janv. 2020 à 16:32
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > binousha_1022
8 janv. 2020 à 17:25
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
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
Modifié le 9 janv. 2020 à 10:44
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 janv. 2020 à 17:54
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 : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.
0