Mise à jour de formulaire

Fermé
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020 - Modifié le 24 juin 2020 à 16:57
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020 - 25 juin 2020 à 10:41
Bonjour, j'ai une liste de table à laquelle j'ai ajouté une colonne à écrire. Tout marche sauf qu'à chaque modification (colonne peniche) il n'enregistre que la 1ère valeur sur tous les champs. au lieu d'enregistrer une peniche pour une commade Voici le code pour plus de compréhension. Merci d'avance.
NB: j'ai omis quelques informations.
<!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' action='#'>
  <label for="date_reception_log">Date réception : </label>
   <input type='date' placeholder='date_reception' name="date_reception"/>
  <label for="date_transmission">Date transmission : </label>
   <input type='date' placeholder='date_transmission' name="date_transmission"/>
        
   
   <input type='submit' value="Envoyer" name="Envoyer"/>
 <table>
  <thead>
   <tr>
      <th>Choisir</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>

   </th>
   
   </tr>
  </thead>
  <tbody>
   <?php
    $sql='select * from ...'; 

    $params=[];
    if(isset($_POST['numerocompte'])&& ($_POST['date_reception_log']) && ($_POST['date_transmission_at'])&& ($_POST['peniche'])){
     ' UPDATE commande SET
        date_reception_log=:date_reception, 
        date_transmission_at=:date_transmission
        peniche=:peniche

        WHERE id = :id ';
      $params[':numerocompte']="%".addcslashes($_POST['numerocompte'],'_')."%";
      $params[':date_reception']="%".addcslashes($_POST['date_reception'],'_')."%";
      $params[':date_transmission']="%".addcslashes($_POST['date_transmission'],'_')."%";
      $params[':peniche']="%".addcslashes($_POST['peniche'],'_')."%";

     }
    $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="<?php echo $d['numerocompte']; ?>"></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td>
      <td><?=$d['']?></td><td>
      <input type='varchar' id="peniche" name="peniche" value="<?php echo $d['peniche']; ?>"></td></tr>

      
     <?php
     }
     $resultats->closeCursor();
    }
    else echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
    $connect=null;
   ?>
  </tbody>
 </table>
 </form>
<?php 
   if(isset($_POST['Envoyer']))
   {
    try{
     $serveur = "localhost";
     $dbname = "#";
     $user = "root";
     $pass = "";

     $date_reception = $_POST["date_reception"];
     $date_transmission = $_POST["date_transmission"];
     $peniche = $_POST["peniche"];

     $lesNumeroCompte;
     echo 'date 1 ' .$_POST["date_reception"];
     echo 'date 2 ' .$_POST["date_transmission"];
     echo 'peniche ' .$_POST["peniche"];

     if(!isset($_POST['date_reception_log']) || $_POST['date_reception']==''){
      echo '<script>alert("Veuillez saisir la date reception")</script>';
      return;
     }
     if(!isset($_POST['date_transmission_at']) || $_POST['date_transmission_at']==''){
      echo '<script>alert("Veuillez saisir la date transmission")</script>';
      return;
     }
     if(!isset($_POST['peniche']) || $_POST['peniche']==''){
      echo '<script>alert("Veuillez saisir la péniche SVP")</script>';
      return;
     }
     if(empty($_POST["listeCmd"])){
      echo '<script>alert("Veuillez choisir une commande")</script>';
      return;
     }
     else{
      $lesNumeroCompte = $_POST["listeCmd"]; 
     }

     $liste = "(";
     //On se connecte à la BDD
     $dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);
     $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     //On insère les données reçues
     echo 'date_reception_log : '.$date_reception_log;
     echo 'date_transmission_at : '.$date_transmission_at;
     echo 'peniche : '.$peniche;

     // on cree la liste des id que l'on doit mettre à jour
     foreach ($lesNumeroCompte as $numerocompte) {
      echo 'aaaaa ' . $numerocompte;
      $liste .= "'". $numerocompte . "',";
     }
     $liste = substr($liste, 0, -1);  
     $liste .= ")";
     echo 'liste : '.$liste;
     $sth = $dbco->prepare("
      UPDATE commande
      SET date_reception_log=:date_reception_log, date_transmission_at=:date_transmission_at, peniche=:peniche
      WHERE numerocompte in " .$liste ); 
      
     $sth->bindParam(':date_reception_log',$date_reception_log,PDO::PARAM_STR);
     $sth->bindParam(':date_transmission_at',$date_transmission_at,PDO::PARAM_STR);
     $sth->bindParam(':peniche',$peniche,PDO::PARAM_STR);

       // $sth->bindParam(':numerocompte',$liste,PDO::PARAM_STR);
     $sth->execute();
     
     //On renvoie l'utilisateur vers la page de remerciement
     header("Location:espacelogistique.php");
    }
    catch(PDOException $e){
     echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
    }
    //if (!empty($_POST['checked']))
    //{ 
     //foreach(($_POST['checked']) as $checked)
     //echo $checked."<br/>";
    //}
    //else
     //echo "selectionner au moins un numéro de compte";
   }
  ?>
 </body>
</html>
A voir également:

3 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
24 juin 2020 à 17:28
bonjour, pour que nous comprenions, ajoute print_r($_POST) avant la ligne 87;
pour que tu comprennes, ajoute print_r() de $liste ,$date_reception_log, ,$date_transmission_at, $peniche avant la ligne 147.
et montre-nous tout cela.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
24 juin 2020 à 17:44
montre aussi la source html de la page affichée
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
24 juin 2020 à 23:00
Bonjour,

Quelques règles à suivre pour avoir un code propre et "facile" à debuguer
on place le maximum de code php en dehors du html ( de préférence au début du script)
on active l'affichage des erreurs PDO et PHP
- https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
on essaye de découper en fonctions
on récupère proprement les variables AVANT de les utiliser



En gros ça devrait donner un truc du genre :
<?php
//----------------------------------------------//
//Affichage des erreurs php
//----------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//----------------------------------------------//
//fonctions
//----------------------------------------------//
  // Connexion à la bdd
  function getDb(){
      $serveur = "localhost";
      $dbname = "#";
      $user = "root";
      $pass = ""; 
    try{
      //On se connecte à la BDD
      $dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);
      $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $dbco->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    return $dbco;
  }
  
  function getAll(){
    $bdd = getDb();
    $sql='select * from ...'; 
    //Execution de la requete
    try{
      $requete = $bdd -> prepare($sql) ;
      $requete->execute() ;
      return $requete->fetchAll(); // on retourne un array avec tous les résultats
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();     
    }
  }
  
  
  function updCommande($date_reception_log,$date_transmission_at,$peniche,$lesNumeroCompte=array()){
    $bdd = getDb();
    
    $liste = join("','",$lesNumeroCompte);
    
    $sql = "UPDATE commande
            SET date_reception_log=:date_reception_log, 
                date_transmission_at=:date_transmission_at, 
                peniche=:peniche
            WHERE numerocompte in ('" .$liste . "')" ;
            
    try{
      $sth = $dbco->prepare($sql);
      $sth->bindParam(':date_reception_log',$date_reception_log,PDO::PARAM_STR);
      $sth->bindParam(':date_transmission_at',$date_transmission_at,PDO::PARAM_STR);
      $sth->bindParam(':peniche',$peniche,PDO::PARAM_STR);
      return $sth->execute();
    }catch(Exception $e){
       echo " Erreur ! ".$e->getMessage();     
    } 
          
  }  
  

//----------------------------------------------//
//récupération des variables
//----------------------------------------------//
 $date_reception = !empty($_POST["date_reception"]) ? $_POST["date_reception"] : '';
 $date_transmission = !empty($_POST["date_transmission"]) ? $_POST["date_transmission"] : '';
 $peniche = !empty($_POST["peniche"]) ? $_POST["peniche"] : '';
 $date_reception_log = !empty($_POST["date_reception_log"]) ? $_POST["date_reception_log"] : '';
 $date_reception = !empty($_POST["date_reception"]) ? $_POST["date_reception"] : '';
 $date_transmission_at = !empty($_POST["date_transmission_at"]) ? $_POST["date_transmission_at"] : '';
 $lesNumeroCompte =  !empty($_POST["listeCmd"]) ? $_POST["listeCmd"] : '';; 
 
//----------------------------------------------//
// Traitement du formulaire
//----------------------------------------------//
  
  //le temps des tests :
  echo "<pre>Variables POST : <br>";
  print_r($_POST);
  echo "</pre>";


if(isset($_POST['Envoyer']))  {
     echo 'date 1 ' .$date_reception;
     echo 'date 2 ' .$date_transmission;
     echo 'peniche ' .$peniche;

    if(!isset($date_reception_log) || $date_reception==''){
      echo '<script>alert("Veuillez saisir la date reception")</script>';
    }
    
    if(!isset($date_transmission_at) || $date_transmission_at ==''){
      echo '<script>alert("Veuillez saisir la date transmission")</script>';
    }
    
    if(!isset($peniche) || $peniche == ''){
      echo '<script>alert("Veuillez saisir la péniche SVP")</script>';
    }
     
    if(empty($lesNumeroCompte)){
      echo '<script>alert("Veuillez choisir une commande")</script>';
    } 
  
    if( updCommande($date_reception_log,$date_transmission_at,$peniche,$lesNumeroCompte)) {
      //On renvoie l'utilisateur vers la page de remerciement
      //header("Location:espacelogistique.php"); // on desactive la redirection le temps des tests
      echo "Update OK !";
      exit(); //toujours mettre un exit après une redirection.
   }
}

?>
<!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' action='#'>
  <label for="date_reception_log">Date réception : </label>
   <input type='date' placeholder='date_reception' name="date_reception"/>
  <label for="date_transmission">Date transmission : </label>
   <input type='date' placeholder='date_transmission' name="date_transmission"/>
        
   
   <input type='submit' value="Envoyer" name="Envoyer"/>
 <table>
  <thead>
   <tr>
      <th>Choisir</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>
   <th>#</th>

   </th>
   
   </tr>
  </thead>
  <tbody>
   <?php
    
    $resultats = getAll();
    
    if(!empty($resultats) ) {
      foreach( $resultats as $d){
     ?>
      <tr>
         <td><input type='checkbox' name='listeCmd[]' value="<?php echo $d['numerocompte']; ?>"></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td>
        <td><?=$d['']?></td><td>
        <input type='varchar' id="peniche_<?php echo $d['peniche']; ?>" name="peniche" value="<?php echo $d['peniche']; ?>"></td>
      </tr>
     <?php
     }
    } else {
      echo '<tr><td colspan=4>aucun résultat trouvé</td></tr>'.
    }

   ?>
  </tbody>
 </table>
 </form>
 </body>
</html>


Par contre, je suis un peu dubitatif sur le résultat souhaité avec ce code....
As tu testé la requête DIRECTEMENT dans ta bdd ( via phpmyadmin par exemple) avant d'essayer de la mettre en pratique dans ton code php ?
Ton formulaire ne contient qu'une donnée... les cases à cocher... les autres variables ne sont pas dedans.. c'est normal ??


0
binousha_1022 Messages postés 41 Date d'inscription mercredi 11 décembre 2019 Statut Membre Dernière intervention 25 juin 2020
25 juin 2020 à 10:41
Bonjour, merci de m'avoir répondu. Oui c'est normal, le but c'est de cocher les cases (une, deux ou plusieurs), remplir le formulaire (date réception et date transmission) , remplir la colonne "peniche"(chaque ligne une peniche) et le système fait la mise à jour en fonction du numerocompte. La requête marchait très bien jusqu'à ce qu'on m'a fait une suggestion (une peniche pour une commande au lieu de une peniche pour plusieurs commandes ). La peniche faisait parti du formulaire mais maintenant je lui ai crée une colonne. Mon soucis est à chaque fois il prend la peniche de la 1ere commande et l'enregistre sur les autres. Je penses que c'est plus clair maintenant. Merci
0