Mise à jour de formulaire
                    
        
     
             
                    binousha_1022
    
        
    
                    Messages postés
            
                
     
             
            44
        
            
                                    Statut
            Membre
                    
                -
                                     
binousha_1022 Messages postés 44 Statut Membre -
        binousha_1022 Messages postés 44 Statut Membre -
        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.
                
            
                
    
    
    
        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:         
- Mise à jour de formulaire
- Whatsapp formulaire opposition - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Formulaire de réclamation facebook compte désactivé - Guide
3 réponses
                        
                    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.
    
                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.
                
        
     
             
                    yg_be
    
        
    
                    Messages postés
            
                
     
             
            24281
        
            
                                    Statut
            Contributeur
                    
    
            
                
     
             
                        1 584
        
        
    
    montre aussi la source html de la page affichée
    
    
                        
                    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 :
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 ??
 
                
                
    
                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 ??
                        
                    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
                
                
    
                