Bonjour,
J'ai un problème avec mon code php , j'ai une page qui affiche un formulaire depuis une BDD et depuis cette page j'ai un bouton modifier qui renvoie a l'aide d'un form vers une page qui doit éffectuer l'update seulement voila lorsque que je modifie des valeurs dans mon form qui à plusieurs ligne l'update prends en compte que la dernière ligne et modifie toutes les valeurs de toutes les lignes avec cette dernière
<?php
if(isset($_POST['ok']) && isset($_POST['nb_semaine']) && $_POST['nb_semaine'] != "")
{
$email_selectionnee = $_POST['email_user'];
$semaine_selectionne = $_POST['nb_semaine'];
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
}
try {
//connexion BDD
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
if($bdd != false)
{
$reponse = $bdd->query('SELECT DISTINCT email_user FROM form');
$email_user = array();
$nb_email = 0;
while($ligne_email = $reponse->fetch())
{
array_push($email_user, $ligne_email['email_user']);
/* On incrémente de compteur */
$nb_email++;
}
?>
<form action="#" id="formliste" method="post">
<div class="form-group" id="selectemail">
<select name="email_user" class="form-control" id="email_user" onchange="document.forms['formliste'].submit();" type="text">
<option value="-1">- - - Sélectionner une adresse - - -</option>
<?php
for($i = 0; $i < $nb_email; $i++)
{
?>
<option <?php echo((isset($idr) && $idr == $email_user[$i])?" selected=\"selected\"":null); ?>><?php echo($email_user[$i]); ?></option>
<?php
}
?>
</select>
</div>
<?php
unset($reponse);
/* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */
if(isset($idr) && $idr != -1)
{
$reponse2 = $bdd->query('SELECT DISTINCT nb_semaine FROM form WHERE email_user ="'.$_POST['email_user'].'"');
if($bdd != false){
/* Un petit compteur pour les départements */
$nd = 0;
/* On crée deux tableaux pour les numéros et les noms des départements */
$nb_semaine = array();
while ($ligne_semaine = $reponse2->fetch())
{
array_push($nb_semaine, $ligne_semaine['nb_semaine']);
$nd++;
}
?>
<div class="form-group" id="selectsemaine">
<select class="form-control" name="nb_semaine" id="nb_semaine" type="text">
<?php
for($d = 0; $d<$nd; $d++)
{
?>
<option <?php echo((isset($semaine_selectionne) && $semaine_selectionne == $nb_semaine[$d])?" selected=\"selected\"":null); ?>><?php echo($nb_semaine[$d]); ?></option>
<?php
}
?>
</select>
</div>
<?php
}
unset($reponse);
}
?>
<input class="btn btn-warning" type="submit" name="ok" id="ok" value="Valider"/></p>
</form><br/>
<?php
if(isset($_POST['ok']) && isset($_POST['nb_semaine']) && $_POST['nb_semaine'] != "")
{
echo'<div class="form-group row" id="semaine">
<label for="example-week-input" class="col-xs-2 col-form-label">Semaine n°</label>
<div class="col-xs-10">
<input class="form-control" type="week" name="nb_semaine" value="'.$semaine_selectionne.'">
</div>
</div><hr>';
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
$sql = $bdd->query ('SELECT dateactu , heure_eff, repas , num_commande , nom_cli , adr_cli, nb_semaine FROM form WHERE email_user ="' .$email_selectionnee.'" AND nb_semaine= "'.$semaine_selectionne.'" ');
?>
<form action="modifadmin.php" id="formumodif" method="post" >
<?php
while ($donnees = $sql->fetch())
{
echo '<table id="table"">
<div id="divform" class="form-group row">
<div class="col-xs-10" id="formulaire">
<tr>
<tr><th> Date :</th>
<th> Heures éffectuées :</th>
<th> Prix repas :</th>
<th> Numéro commande : </th>
<th> Nom client :</th>
<th> adresse client : </th>
</tr>
<td><input class="form-control" type="date" name="dateactu[]" value="' . $donnees['dateactu'] . '" id="input"></td>
<td><input class="form-control" type="text" name="heure_eff[]" value="' . $donnees['heure_eff'] . '" placeholder="heure(s) éffectuée(s)" id="input"></td>
<td><input class="form-control" placeholder="prix repas" type="text" value="' . $donnees['repas'] . '" name="repas[]" id="input"></td>
<td><input class="form-control" type="text" name="num_commande[]" value="' . $donnees['num_commande'] . '" placeholder="numéro commande" id="input"></td>
<td><input class="form-control" type="text" name="nom_cli[]" value="' . $donnees['nom_cli'] . '" placeholder="nom du client" id="input"></td>
<td><input class="form-control" type="text" name="adr_cli[]" value="' . $donnees['adr_cli'] . '" placeholder="adresse client" id="input"></td>
</tr>
</div>
</div></table>';
}
?>
<input class="btn btn-success" type="submit" name="modifier" id="modifier" value="modifier"/>
</form>
<?php
}
}
}
catch (PDOException $e) {
echo 'Erreur : ' . $e -> getMessage();
}
?>
<?php
session_start();
// Je vérifie que toutes les infos du formulaire sont bien là.
if (!empty($_POST['dateactu']) && !empty($_POST['heure_eff']) && !empty($_POST['repas'])
&& !empty($_POST['num_commande']) && !empty($_POST['nom_cli']) && !empty($_POST['adr_cli'])) {
$nbligne = count($_POST['heure_eff']);
echo $nbligne;
$dateactu = $_POST['dateactu'];
$heure_eff = $_POST['heure_eff'];
$repas = $_POST['repas'];
$num_commande = $_POST['num_commande'];
$nom_cli = $_POST['nom_cli'];
$adr_cli = $_POST['adr_cli'];
try {
//connexion BDD
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
$sql = $bdd->prepare ('UPDATE form SET dateactu = :dateactu , heure_eff = :heure_eff , repas = :repas , num_commande = :num_commande , nom_cli = :nom_cli , adr_cli = :adr_cli ');
for ($i=0; $i < $nbligne; $i++) {
$sql -> execute(array( 'dateactu' => $dateactu[$i] ,
'heure_eff' =>$heure_eff[$i] ,
'repas'=> $repas[$i] ,
'num_commande' =>$num_commande[$i] ,
'nom_cli' => $nom_cli[$i],
'adr_cli' => $adr_cli[$i] ));
}
}
catch (PDOException $e) {
echo 'Erreur : ' . $e -> getMessage();
}
}
else {
?>
<script>
alert("Certains champs sont vides");
</script>
<?php
}
?>
J'aimerais savoir pourquoi l'update récupere seulement les valeurs de la dernière ligne car je penses que mon " for ($i=0; $i < $nbligne; $i++)" remplace toute les valeurs par les valeurs de la dernière ligne, mais je ne sais pas si ce probleme viens peut être de la requête sql. Merci
Bonjour,
Dans ta boucle while, il n'y a rien qui dérrencie chaque passage. Donc pour php, toutes les valeurs sont identiques.
Il faut que chauqe "table" est en id unique.
Et si je ne trompe pas, un "name" d'un champs input de type "text", "date".... ne peut pas être un tableau.
$i = 0;
while(tralalalalala){
echo '<input type="text" name="mon_nom_'.$i.'" value="tralalalala">';
}
Bonjour.
while ($donnees = $sql->fetch())
Dans cette partie du code, tu utilises la méthode fetch
, sauf que si tu veux récupérer plusieurs enregistrements, il te faut utiliser la méthode fetchAll
, car la méthode fetch
ne retourne qu'un seul enregistrement :
PDOStatement::fetch — Récupère la ligne suivante d'un jeu de résultats PDO
Description :
Récupère une ligne depuis un jeu de résultats associé à l'objet PDOStatement. Le paramètre fetch_style détermine la façon dont PDO retourne la ligne.
Ok d'accord merci pour vos réponses , du coup si je comprends bien je dois utiliser un foreach à la place du while ?
Bon j'ai remplacé mon while par
foreach ($sql->fetchAll() as $donnees)
{
echo '<table id="table"">
<div id="divform" class="form-group row">
<div class="col-xs-10" id="formulaire">
<tr>
<tr><th> Date :</th>
<th> Heures éffectuées :</th>
<th> Prix repas :</th>
<th> Numéro commande : </th>
<th> Nom client :</th>
<th> adresse client : </th>
</tr>
<td><input class="form-control" type="date" name="dateactu[]" value="' . $donnees['dateactu'] . '" id="input"></td>
<td><input class="form-control" type="text" name="heure_eff[]" value="' . $donnees['heure_eff'] . '" placeholder="heure(s) éffectuée(s)" id="input"></td>
<td><input class="form-control" placeholder="prix repas" type="text" value="' . $donnees['repas'] . '" name="repas[]" id="input"></td>
<td><input class="form-control" type="text" name="num_commande[]" value="' . $donnees['num_commande'] . '" placeholder="numéro commande" id="input"></td>
<td><input class="form-control" type="text" name="nom_cli[]" value="' . $donnees['nom_cli'] . '" placeholder="nom du client" id="input"></td>
<td><input class="form-control" type="text" name="adr_cli[]" value="' . $donnees['adr_cli'] . '" placeholder="adresse client" id="input"></td>
</tr>
</div>
</div></table>';
}
j'ai bien toutes mes données de ma bdd qui s'affiche mais lorsque j'appuis sur modifier cela change toutes mes valeurs par ma dernière lignes j'ai encore le même probleme qu'au début , mais êtes vous sûr que ça vient pas de ma requête ? ou de mon for ?
@Lartak pourquoi lui faire modifier le fetch en fetchall ? le fetch fonctionne très bien dans un while
il ramène une ligne à la fois
Ah je viens de remarquer que ma requete changait toute ma table , et non seulement les lignes affichés, je voudrais savoir aussi comment récuperer les valeurs sélectionnées dans mes variables
$email_selectione
$semaine_selectionnee
j'ai donc fais ça
$nbligne = count($_POST['heure_eff']);
$dateactu = $_POST['dateactu'];
$heure_eff = $_POST['heure_eff'];
$repas = $_POST['repas'];
$num_commande = $_POST['num_commande'];
$nom_cli = $_POST['nom_cli'];
$adr_cli = $_POST['adr_cli'];
$email_selectionnee = $_POST['email_user'];
$semaine_selectionne = $_POST['nb_semaine'];
try {
//connexion BDD
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
$sql = $bdd->prepare ('UPDATE form SET dateactu = :dateactu , heure_eff = :heure_eff , repas = :repas , num_commande = :num_commande , nom_cli = :nom_cli , adr_cli = :adr_cli WHERE email_user ="' .$email_selectionnee.'" AND nb_semaine= "'.$semaine_selectionne.'" ');
Mais j'obtiens des erreurs : Undefined index: email_user et Undefined index: nb_semaine
Mais j'obtiens des erreurs : Undefined index: email_user et Undefined index: nb_semaine
Ceci veux tout simplement dire, que tu cherche à utiliser une variable dont l'index est non définie, donc dans ton cas :
$email_selectionnee = $_POST['email_user']; // email_user
$semaine_selectionne = $_POST['nb_semaine']; // nb_semaine
Soit deux index qui appartiennent à un autre formulaire que celui des index précédents, alors qu'il est normalement impossible de soumettre deux formulaires en même temps (tout du moins seulement avec PHP).
Oui j'ai essayé mais j'obtiens que des undefined index au niveau des lignes
$nbligne = count($_POST['heure_eff']);
$dateactu = $_POST['dateactu'];
$heure_eff = $_POST['heure_eff'];
$repas = $_POST['repas'];
$num_commande = $_POST['num_commande'];
$nom_cli = $_POST['nom_cli'];
$adr_cli = $_POST['adr_cli'];
$email_selectionnee = $_POST['email_user'];
$semaine_selectionne = $_POST['nb_semaine'];
j'ai fais quelques modif depuis l'autre jour j'ai tout sur la même page avec un seul formulaire mais j'ai toujours le même probleme cette fois c'est lorsque je modifie la deuxième ligne de mon tableau que prend en compte le changement de toutes mes lignes et je ne sais pas pourquoi
<body>
<?php include "utils/navbar.php";?>
</br>
</br>
<?php
if(isset($_POST['ok']) && isset($_POST['nb_semaine']) && $_POST['nb_semaine'] != "")
{
$email_selectionnee = $_POST['email_user'];
$semaine_selectionne = $_POST['nb_semaine'];
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
}
try {
//connexion BDD
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
if($bdd != false)
{
$reponse = $bdd->query('SELECT DISTINCT email_user FROM form');
$email_user = array();
$nb_email = 0;
while($ligne_email = $reponse->fetch())
{
array_push($email_user, $ligne_email['email_user']);
/* On incrémente de compteur */
$nb_email++;
}
?>
<form action="#" id="formliste" method="post">
<div class="form-group" id="selectemail">
<select name="email_user" class="form-control" id="email_user" onchange="document.forms['formliste'].submit();" type="text">
<option value="-1">- - - Sélectionner une adresse - - -</option>
<?php
for($i = 0; $i < $nb_email; $i++)
{
?>
<option <?php echo((isset($idr) && $idr == $email_user[$i])?" selected=\"selected\"":null); ?>><?php echo($email_user[$i]); ?></option>
<?php
}
?>
</select>
</div>
<?php
unset($reponse);
if(isset($idr) && $idr != -1)
{
$reponse2 = $bdd->query('SELECT DISTINCT nb_semaine FROM form WHERE email_user ="'.$_POST['email_user'].'"');
if($bdd != false){
/* Un petit compteur */
$nd = 0;
$nb_semaine = array();
while ($ligne_semaine = $reponse2->fetch())
{
array_push($nb_semaine, $ligne_semaine['nb_semaine']);
$nd++;
}
?>
<div class="form-group" id="selectsemaine">
<select class="form-control" name="nb_semaine" id="nb_semaine" type="text">
<?php
for($d = 0; $d<$nd; $d++)
{
?>
<option <?php echo((isset($semaine_selectionne) && $semaine_selectionne == $nb_semaine[$d])?" selected=\"selected\"":null); ?>><?php echo($nb_semaine[$d]); ?></option>
<?php
}
?>
</select>
</div>
<?php
}
unset($reponse);
}
?>
<input class="btn btn-warning" type="submit" name="ok" id="ok" value="Valider"/></p>
<br/>
<?php
if(isset($_POST['ok']) && isset($_POST['nb_semaine']) && $_POST['nb_semaine'] != "")
{
echo'<div class="form-group row" id="semaine">
<label for="example-week-input" class="col-xs-2 col-form-label">Semaine n°</label>
<div class="col-xs-10">
<input class="form-control" type="week" name="nb_semaine" value="'.$semaine_selectionne.'">
</div>
</div><hr>';
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
$sql = $bdd->query ('SELECT id_formulaire, dateactu , heure_eff, repas , num_commande , nom_cli , adr_cli, nb_semaine , ct , chantier FROM form WHERE email_user ="' .$email_selectionnee.'" AND nb_semaine= "'.$semaine_selectionne.'" ');
$c=0;
while ($donnees = $sql->fetch())
{
echo '<table id="table"">
<div id="divform" class="form-group row">
<div class="col-xs-10" id="formulaire">
<tr>
<tr><th> id </th>
<th> Date :</th>
<th> Heures éffectuées :</th>
<th> Prix repas :</th>
<th> Numéro commande : </th>
<th> Nom client :</th>
<th> adresse client : </th>
</tr>
<td><input class"form-control" type="text" name="id_formulaire[]" value="'.$donnees['id_formulaire'].'" id="input"></td>
<td><input class="form-control" type="date" name="dateactu[]" value="' . $donnees['dateactu'] . '" id="inputdate"></td>
<td><input class="form-control" type="text" name="heure_eff[]" value="' . $donnees['heure_eff'] . '" placeholder="heure(s) éffectuée(s)" id="input"></td>
<td><input class="form-control" placeholder="prix repas" type="text" value="' . $donnees['repas'] . '" name="repas[]" id="input"></td>
<td><input class="form-control" type="text" name="num_commande[]" value="' . $donnees['num_commande'] . '" placeholder="numéro commande" id="input"></td>
<td><input class="form-control" type="text" name="nom_cli[]" value="' . $donnees['nom_cli'] . '" placeholder="nom du client" id="input"></td>
<td><input class="form-control" type="text" name="adr_cli[]" value="' . $donnees['adr_cli'] . '" placeholder="adresse client" id="input"></td>
<td><select class="form-control" id="input" name="ct[]" type="text"><option>'.$donnees['ct'].'<option> Ct entretient </option><option> facturable </option></select></td>
<td><select class="form-control" id="input" name="chantier[]" type="text"><option>'.$donnees['chantier'].'</option><option> Encours </option><option> Fini </option></select></td>
</tr>
</div>
</div></table>';
}
}
?>
<input class="btn btn-success" type="submit" name="modifier" id="modifier" value="Modifier"/>
</form>
<?php
if (isset($_POST['modifier'])){
$nbligne = count($_POST['heure_eff']);
$dateactu = $_POST['dateactu'];
$heure_eff = $_POST['heure_eff'];
$repas = $_POST['repas'];
$num_commande = $_POST['num_commande'];
$nom_cli = $_POST['nom_cli'];
$adr_cli = $_POST['adr_cli'];
$ct = $_POST['ct'];
$chantier = $_POST['chantier'];
$email_selectionnee = $_POST['email_user'];
$semaine_selectionne = $_POST['nb_semaine'];
$id_formulaire = $_POST['id_formulaire'];
//connexion BDD
$bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', '');
$sql = $bdd->prepare ('UPDATE form SET dateactu = :dateactu , heure_eff = :heure_eff , repas = :repas , num_commande = :num_commande , nom_cli = :nom_cli , adr_cli = :adr_cli , ct = :ct , chantier = :chantier WHERE email_user ="' .$email_selectionnee.'" AND nb_semaine= "'.$semaine_selectionne.'" ');
foreach ($id_formulaire as $row) {
$sql -> execute(array( 'dateactu' => $dateactu[$i] ,
'heure_eff' =>$heure_eff[$i] ,
'repas'=> $repas[$i] ,
'num_commande' =>$num_commande[$i] ,
'nom_cli' => $nom_cli[$i],
'adr_cli' => $adr_cli[$i],
'ct' => $ct[$i],
'chantier' => $chantier[$i]));
}
echo $row;
}
}
}
catch (PDOException $e) {
echo 'Erreur : ' . $e -> getMessage();
}
si quelqu'un pourait m'aider merci beaucoup