Mise à jour de formulaire
binousha_1022
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
-
binousha_1022 Messages postés 41 Date d'inscription Statut Membre Dernière intervention -
binousha_1022 Messages postés 41 Date d'inscription Statut Membre Dernière intervention -
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
- Mise a jour kindle - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
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