j’ai suivi le tuto de Qwix (ici) et j’ai bien compris le fonctionnement et j’ai réussi à obtenir le même résultat après l’avoir adapté en PDO (codes ci-dessous).
On affiche les données de la base dans une page modification1.php ; On passe l’id de l’enregistrement à modifier par l’URL et on récupère ensuite l’id par la méthode GET sur la page suivante modification2.php?id. On a donc autant de boutons "modifier" redirigeant vers une page de modification2.php?id que d’enregistrement dans la table.
Les champs du formulaire modification2.php?id sont pré-remplis par une requête sur les données disponibles (value). L’utilisateur peut donc modifier et lorsqu’il clique sur modifier, les données du formulaire sont envoyées par méthode POST à une 3ème page modification3.php qui fait la mise à jour à l’aide d’une requête UPDATE avec un WHERE sur l’id.
Tout çà marche parfaitement même si j’ai bien compris qu’il faut l’optimiser pour la sécurité mais je verrai çà dans un second temps.
Ce que je veux faire maintenant, c’est faire des UPDATE multiples.
J’affiche les données de ma table sous forme de tableau ; Il faut donc que je passe plusieurs id.
Il me semble que la solution serait :
d’utiliser un array sur l’id (ligne 25 modification2.php) puis
parcourir l’array en faisant un while plutôt qu’un if (ligne 34 modification2.php). Mais là j’ai un peu de mal à concevoir le code. Il faut en plus que je "sorte" le bouton "Modifier" de la page modification2.php de la boucle pour que tout soit modifié d’un coup et pas seulement pour chaque enregistrement.
Enfin, dans ma page modification3.php (ligne 36), il faut que je boucle sur l’id pour mettre à jour tous les enregistrements de la page modification2.php.
Mais n’ayant jusqu’à présent jamais utilisé d’array, je n’arrive pas à mettre tout çà en place.
Si quelqu’un peut m’aider…
modification1.php
<html>
<head>
<title>modification de données en PHP :: partie 1</title>
</head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//requête SQL:
$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;
//exécution de la requête:
$result = $bdd->query($sql);
//affichage des données:
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div align=\"center\">"
.$donnees['pat']." ".$donnees['fic']
." <a href=\"modification2.php?idPersonne=".$donnees['id']."\">modifier</a></div>\n"
) ;
}
?>
</body>
</html>
modification2.php
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<title>modification de données en PHP :: partie2</title>
</head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id = $_GET["idPersonne"] ;
//requête SQL:
$sql = "SELECT * FROM gbd_dat WHERE id = ".$id ;
//exécution de la requête:
$result = $bdd->query($sql);
//affichage des données:
if($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
?>
<form name="insertion" action="modification3.php" method="POST">
<input type="hidden" name="id" value="<?php echo($id) ;?>">
<table border="0" align="center" cellspacing="2" cellpadding="2">
<tr align="center">
<td>Patient</td>
<td><input type="text" name="pat" value="<?php echo $donnees['pat'] ;?>"></td>
</tr>
<tr align="center">
<td>Fiche</td>
<td><input type="text" name="fic" value="<?php echo $donnees['fic'] ;?>"></td>
</tr>
<tr align="center">
<td>Question</td>
<td><input type="text" name="que" value="<?php echo $donnees['que'] ;?>"></td>
</tr>
<tr align="center">
<td>Description</td>
<td><input type="text" name="des" value="<?php echo $donnees['des'] ;?>"></td>
</tr>
<tr align="center">
<td>Détails</td>
<td><input type="text" name="det" value="<?php echo $donnees['det'] ;?>"></td>
</tr>
<tr align="center">
<td>Corrections</td>
<td><input type="text" name="cor" value="<?php echo $donnees['cor'] ;?>"></td>
</tr>
<tr align="center">
<td>Non récupérable</td>
<td><input type="number" name="non_rec" value="<?php echo $donnees['non_rec'] ;?>"></td>
</tr>
<tr align="center">
<td>Commentaires</td>
<td><input type="text" name="com" value="<?php echo $donnees['com'] ;?>"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="modifier"></td>
</tr>
</table>
</form>
<?php
}//fin if
?>
</body>
</html>
modification3.php
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//récupération des valeurs des champs:
//numéro patient:
$patient = $_POST["pat"] ;
//Fiche:
$fiche = $_POST["fic"] ;
//Question:
$question = $_POST["que"] ;
//Description:
$description = $_POST["des"] ;
//Détails:
$details = $_POST["det"] ;
//Correction:
$correction = $_POST["cor"] ;
//Non récupérable:
$nonrecuperable = $_POST["non_rec"] ;
//Commentaires :
$commentaires = $_POST["com"] ;
//récupération de l'identifiant de la personne:
$id = $_POST["id"] ;
//création de la requête SQL:
$sql = "UPDATE gbd_dat
SET
pat = '$patient',
fic = '$fiche',
que = '$question',
des = '$description',
det = '$details',
cor = '$correction',
non_rec = $nonrecuperable,
com = '$commentaires'
WHERE id = '$id' " ;
//exécution de la requête SQL:
$requete = $bdd->query($sql);
//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("La modification à été correctement effectuée") ;
}
else
{
echo("La modification à échouée") ;
}
?>
l'un de Qwix tout en php que j'essaie d’adapter pour des updates multiples
et l'autre trouvé sur Mediabox (ici) et qui utilise Javascript et je qu'essaie d'adapter tout court et qui explique l'update multiple mais qu'il faut adapter en PDO...
concrètement, si tu ne veux modifier que certaines lignes :
1- Tu mets une checkbox par ligne (par exemple name="id[]")
2- Tu récupères toutes les id des tuples à modifier avec l'array $_POST['id'] sur lequel tu fais un implode :$id = implode(',',$_POSt['id']). Ta requête sera donc du style $req = 'SELECT * FROM table WHERE id IN('.$id.')');
3- Tu affiches tes lignes avec les input remplis des valeurs de la table à modifier, toujours an name="id[]", name="nom[]", etc...
4- Tu envoies le formulaire et tu peux récupérer des arrays du même style que tu parcoures avec un FOR pour faire les requêtes de mise à jour.
1. l'utilisateur devra apporter un commentaire sur chaque enregistrement donc j'ai fait un array sur les id ($array = $query->fetchAll(PDO::FETCH_COLUMN,0)) que je récupère ensuite grâce à $_SESSION ; j'ai lu que $_SESSION faisait déjà un array donc peut-être que mon $array est inutile...
2. je ne connaissait pas implode mais çà à l'air simple
3. si je transforme mon if en while (ligne 34 du code modification2.php) j'affiche tous les enregistrements correspondant aux id passés dans le where
4. ok pour le FOR pour mettre à jour tous les enregistrements concernés
Justement, non : bindParam, si c'est bien utilisé et est approprié, ça devrait également être fait avant d'itérer. Le but étant de binder une variable une fois pour toute (et lors du execute, la valeur courante de celle-ci sera automatiquement bindée en interne). Dans le cas contraire, bindValue est suffisante.
Elles seraient bien placées mais le code est faux (l'execute devrait être placé après le foreach) et n'a aucun intérêt/est mal choisi (pas d'exécution multiple et on pourrait directement binder $_POST['nom']/$_POST['prenom']).
1. l'utilisateur devra apporter un commentaire sur chaque enregistrement donc j'ai fait un array sur les id ($array = $query->fetchAll(PDO::FETCH_COLUMN,0)) que je récupère ensuite grâce à $_SESSION ; j'ai lu que $_SESSION faisait déjà un array donc peut-être que mon $array est inutile...
Si j'ai bien compris et que tu ne veux dans un premier temps n'afficher que les lignes que l'utilisateur a choisi, mettre tes id en session ne me paraît pas pertinent.
L'intérêt d'avoir des inputs avec un name de la forme id[], nom[],prenom[] etc c'est de récupérer un array facilement utlisable;
En effet, l'équivalent de la première ligne sera $POST['id'][0], $POST['nom'][0], $POST['prenom'][0], de la deuxème ligne $POST['id'][1], $POST['nom'][1], $POST['prenom'][1], etc...
C'est pour cela que je te conseillais un boucle for, tu n'as plus qu'à incrémenter sur le nombre de lignes de l'array.
En reprenant l'exemple de Christouphe tu aurais quelque chose comme :
<?php
$req = "update toto SET nom=:nom,prenom=:prenom WHERE id=:id";
$stmt = $bdd->prepare($req);
$nb = count($_POST['id']);
$stmt->bindParam('nom',$nom,PDO::PARAM_STR);
$stmt->bindParam('prenom',$prenom,PDO::PARAM_STR);
$stmt->bindParam('id',$id,PDO::PARAM_INT);
for($i=0;$i<$nb;$i++)
{
$nom=$_POST['nom'][$i];
$prenom=$_POST['prenom'][$i];
$id=$_POST['id'][$i];
$stmt->execute();
}
Si j'ai bien compris et que tu ne veux dans un premier temps n'afficher que les lignes que l'utilisateur a choisi, mettre tes id en session ne me paraît pas pertinent.
pas exactement ; les données s'afficheront à l'utilisateur sous forme de tableaux de 15 enregistrements et il pourra naviguer par pages et par filtres (cf capture ci-dessous). je souhaite donc que l'utilisateur puisse saisir dans les enregistrements qui s'affichent en cliquant sur un bouton. c'est pour çà que j'ai récupéré les id de ma page dans un array mais je ne sais pas si je me fais bien comprendre ?
voilà où j'en suis des codes mais çà ne fonctionne pas car il me dit que mes variables (lignes 51 à 59 du code modification3.php) ne sont pas définies et que j'ai un Uninitialized string offset: 0 (lignes 67, 68 et 70 du code modification3.php)
jusque là j'avais utilisé bindValue dans mes requêtes préparées mais c'est bindParam, çà change quelquechose ?
modification1.php
<html>
<head>
<title>modification de données en PHP :: partie 1</title>
</head>
<body>
<?php
session_start();
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//requête SQL:
//$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;
$query = $bdd->prepare('SELECT * FROM gbd_dat ORDER BY pat, fic, que');
$query->execute();
//je récupère mes idéntifiants dans un array (vérifier en utilisant var_dump($array))
//il faut que je transmette mon array() à la page modification2.php en utilisant $_SESSION (peut-être inutile de passer par un array avant SESSION
//car SESSION est déjà un array ?)
$id = $query->fetchAll(PDO::FETCH_COLUMN,0);
//exécution de la requête:
//$result = $bdd->query($sql);
$_SESSION['id'] = $id;
//var_dump($array);
$query->closeCursor();
$query = $bdd->prepare('SELECT * FROM gbd_dat ORDER BY pat, fic, que');
$query->execute();
//affichage des données:
while ($donnees = $query->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div align=\"center\">"
.$donnees['pat']." ".$donnees['fic']
." <a href=\"modification2.php?idPersonne=".$donnees['id']."\">modifier</a></div>\n"
) ;
}
?>
</body>
</html>
modification2.php
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<title>modification de données en PHP :: partie2</title>
</head>
<body>
<?php
session_start();
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
//$id = $_GET["idPersonne"] ;
//$id = $_SESSION['array'];
$id = implode(',',$_SESSION['id']);
//je récupère bien mes id dans $id (=array) sous la forme d'une chaine des id avec l'implode
//var_dump($id);
//requête SQL:
$sql = "SELECT * FROM gbd_dat WHERE id IN (".$id.")" ;
//exécution de la requête:
$result = $bdd->query($sql);
//affichage des données:
While($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
?>
<form name="insertion" action="modification3.php" method="POST">
<input type="hidden" name="id" value="<?php echo($id) ;?>">
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<td>Patient</td>
<td><input type="text" name="pat" value="<?php echo $donnees['pat'] ;?>"></td>
</tr>
<tr>
<td>Fiche</td>
<td><input type="text" name="fic" value="<?php echo $donnees['fic'] ;?>"></td>
</tr>
<tr>
<td>Question</td>
<td><input type="text" name="que" value="<?php echo $donnees['que'] ;?>"></td>
</tr>
<tr>
<td>Description</td>
<td><input type="text" name="des" value="<?php echo $donnees['des'] ;?>"></td>
</tr>
<tr>
<td>Détails</td>
<td><input type="text" name="det" value="<?php echo $donnees['det'] ;?>"></td>
</tr>
<tr>
<td>Corrections</td>
<td><input type="text" name="cor" value="<?php echo $donnees['cor'] ;?>"></td>
</tr>
<tr>
<td>Non récupérable</td>
<td><input type="number" name="non_rec" value="<?php echo $donnees['non_rec'] ;?>"></td>
</tr>
<tr>
<td>Commentaires</td>
<td><input type="text" name="com" value="<?php echo $donnees['com'] ;?>"></td>
</tr>
<?php
}//fin if
?>
<tr>
<td colspan="2"><input type="submit" value="modifier"></td>
</tr>
</table>
</form>
</body>
</html>
modification3.php
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$nb = count($_POST['id']);
//préparation de la requête
$requete = "UPDATE gbd_dat SET
pat = :patient,
fic = :fiche,
que = :question,
des = :description,
det = :details,
cor = :correction,
non_rec = :nonrecuperable,
com = :commentaires
WHERE id IN (:id) ";
/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$result = $bdd->prepare($requete);
//print_r($bdd->errorInfo());
$result->bindValue('id',$id,PDO::PARAM_INT);
$result->bindValue('patient',$patient,PDO::PARAM_STR);
$result->bindValue('fiche',$fiche,PDO::PARAM_STR);
$result->bindValue('question',$question,PDO::PARAM_STR);
$result->bindValue('description',$description,PDO::PARAM_STR);
$result->bindValue('details',$details,PDO::PARAM_STR);
$result->bindValue('correction',$correction,PDO::PARAM_STR);
$result->bindValue('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
$result->bindValue('commentaires',$commentaires,PDO::PARAM_STR);
for($i=0;$i<$nb;$i++)
{
$patient=$_POST['pat'][$i];
$fiche=$_POST['fic'][$i];
$question=$_POST['que'][$i];
$description=$_POST['des'][$i];
$details=$_POST['det'][$i];
$correction=$_POST['cor'][$i];
$nonrecuperable=$_POST['non_rec'][$i];
$commentaires=$_POST['com'][$i];
$id=$_POST['id'][$i];
$result->execute();
}
//exécution de la requête SQL:
//$requete = $bdd->query($sql);
//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("La modification à été correctement effectuée") ;
}
else
{
echo("La modification à échouée") ;
}
?>
effectivement je n'ai plus de bugg mais c'est comme si les variables n'étaient pas ré-évaluées car seul le premier enregistrement de ma boucle est modifié
en gros j'arrive à faire des UPDATE multiples maintenant mais je doit avoir un problème d'id justement car çà ne modifie pas les bons enregistrement
modification1.php
<html>
<head>
<title>modification de données en PHP :: partie 1</title>
</head>
<body>
<?php
session_start();
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//requête SQL:
//$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;
$query = $bdd->prepare('SELECT * FROM gbd_dat ORDER BY pat, fic, que');
$query->execute();
//je récupère mes idéntifiants dans un array (vérifier en utilisant var_dump($array))
//il faut que je transmette mon array() à la page modification2.php en utilisant $_SESSION (peut-être inutile de passer par un array avant SESSION
//car SESSION est déjà un array ?)
$id = $query->fetchAll(PDO::FETCH_COLUMN,0);
//exécution de la requête:
//$result = $bdd->query($sql);
$_SESSION['id'] = $id;
$nb = 10;
//var_dump($array);
$query->closeCursor();
$query = $bdd->prepare('SELECT * FROM gbd_dat ORDER BY pat, fic, que LIMIT :nb');
$query->bindValue('nb', $nb, PDO::PARAM_INT);
$query->execute();
//affichage des données:
while ($donnees = $query->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div>"
.$donnees['pat']." ".$donnees['fic']
."
</div>\n"
) ;
}
?>
<a href="modification2.php">modifier</a>
</body>
</html>
modification2.php
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<title>modification de données en PHP :: partie2</title>
</head>
<body>
<?php
session_start();
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
//$id = $_GET["idPersonne"] ;
//$id = $_SESSION['array'];
$id = implode(',',$_SESSION['id']);
$nb = 10;
//je récupère bien mes id dans $id (=array) sous la forme d'une chaine des id avec l'implode
//var_dump($id);
//requête SQL:
//$sql = "SELECT * FROM gbd_dat WHERE id IN (".$id.") LIMIT :nb" ;
//$result = $bdd->query($sql);
$query = $bdd->prepare('SELECT * FROM gbd_dat ORDER BY pat, fic, que LIMIT :nb');
$query->bindValue('nb', $nb, PDO::PARAM_INT);
$query->execute();
//affichage des données:
echo '<tr class="class01">';
//echo '<td class="ID">#ID</td>';
echo '<td class="Patient">Patient</td>';
echo '<td class="Fiche">Fiche</td>';
echo '<td class="Question">Question</td>';
echo '<td class="Description">Description</td>';
echo '<td class="Details">Details</td>';
echo '<td class="Correction">Corrections</td>';
echo '<td class="NR">NR</td>';
echo '<td class="Commentaires">Commentaires</td>';
While($donnees = $query->fetch(PDO::FETCH_ASSOC))
{
?>
<form name="insertion" action="modification3.php" method="POST">
<input type="hidden" name="id" value="<?php echo($id) ;?>">
<input type="hidden" name="nb" value="<?php echo($nb) ;?>">
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<td><input type="text" name="pat[]" value="<?php echo $donnees['pat'] ;?>"></td>
<td><input type="text" name="fic[]" value="<?php echo $donnees['fic'] ;?>"></td>
<td><input type="text" name="que[]" value="<?php echo $donnees['que'] ;?>"></td>
<td><input type="text" name="des[]" value="<?php echo $donnees['des'] ;?>"></td>
<td><input type="text" name="det[]" value="<?php echo $donnees['det'] ;?>"></td>
<td><input type="text" name="cor[]" value="<?php echo $donnees['cor'] ;?>"></td>
<td><input type="number" name="non_rec[]" value="<?php echo $donnees['non_rec'] ;?>"></td>
<td><input type="text" name="com[]" value="<?php echo $donnees['com'] ;?>"></td>
</tr>
<?php
}//fin if
?>
<tr>
<td colspan="2"><input type="submit" value="modifier"></td>
</tr>
</table>
</form>
</body>
</html>
modification3.php
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//$nb = count($_POST['id']);
$nb = $_POST['nb'];
//préparation de la requête
$requete = "UPDATE gbd_dat SET
pat = :patient,
fic = :fiche,
que = :question,
des = :description,
det = :details,
cor = :correction,
non_rec = :nonrecuperable,
com = :commentaires
WHERE id = :id ";
/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$result = $bdd->prepare($requete);
//print_r($bdd->errorInfo());
$result->bindParam('id',$id,PDO::PARAM_INT);
$result->bindParam('patient',$patient,PDO::PARAM_STR);
$result->bindParam('fiche',$fiche,PDO::PARAM_STR);
$result->bindParam('question',$question,PDO::PARAM_STR);
$result->bindParam('description',$description,PDO::PARAM_STR);
$result->bindParam('details',$details,PDO::PARAM_STR);
$result->bindParam('correction',$correction,PDO::PARAM_STR);
$result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
$result->bindParam('commentaires',$commentaires,PDO::PARAM_STR);
for($i=0;$i<$nb;$i++)
{
$patient=$_POST['pat'][$i];
$fiche=$_POST['fic'][$i];
$question=$_POST['que'][$i];
$description=$_POST['des'][$i];
$details=$_POST['det'][$i];
$correction=$_POST['cor'][$i];
$nonrecuperable=$_POST['non_rec'][$i];
$commentaires=$_POST['com'][$i];
$id=$_POST['id'][$i];
$result->execute();
var_dump($patient);
}
//$i=1;
//var_dump($i);
//var_dump($nb);
//while($i<$nb)
//{
// $patient=$_POST['pat'][$i];
// $fiche=$_POST['fic'][$i];
// $question=$_POST['que'][$i];
// $description=$_POST['des'][$i];
// $details=$_POST['det'][$i];
// $correction=$_POST['cor'][$i];
// $nonrecuperable=$_POST['non_rec'][$i];
// $commentaires=$_POST['com'][$i];
// $id=$_POST['id'][$i];
// $result->execute();
// var_dump($patient);
// $i++;
//}
//exécution de la requête SQL:
//$requete = $bdd->query($sql);
//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("La modification à été correctement effectuée") ;
}
else
{
echo("La modification à échouée") ;
}
?>
me revoilà, toujours avec mes problèmes de mise à jour...
donc j'ai réussi à mettre en place l'update multiple et je veux donc le mettre en place sur mon projet.
j'ai scrupuleusement (enfin sans doute pas...) suivi l'algo d'hier mais rien en se passe lorsque je clique sur modifier pour envoyer l'update
la page dms_modification3.php ne se lance pas et donc pas d'update
j'ai vérifié le nom de la page, des variables, etc... et je ne vois pas où j'ai fait l'erreur...
d'avance merci pour votre aide
dms_modification2.php
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<title>Mereva</title>
</head>
<body>
<!--début du bloc page-->
<div id="page">
<!-- En-tête -->
<div class="element_page">
<?php include("entete.php"); ?>
</div>
<!-- Le corps -->
<div class="element_page">
<div id="corps">
<?php include("menus.php"); ?>
<!--Tableau avec le contenu de la table GBD_DAT-->
<div id='element_tableau'>
<div id="tableau">
<?php
//*******************************************************************
//affichage page par page tutoriel Ymox sur le site Zeste de Savoir
//https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/
//*******************************************************************
//*Connexion à la base de données
//*OpenCLassroom "Concevez votre site web avec php et MySql"
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$limite = 10;
$page = (!empty($_GET['page']) ? $_GET['page'] : 1);
$debut = ($page - 1) * $limite;
// Partie "Requête"
/* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
/*sans tenir compte du critère limit*/
$sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat1` LIMIT :limite OFFSET :debut';
$query = ($sql);
/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$query = $bdd->prepare($query);
/* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
$query->bindValue(
'limite', // Le marqueur est nommé « limite »
$limite, // Il doit prendre la valeur de la variable $limite
PDO::PARAM_INT // Cette valeur est de type entier
);
$query->bindValue(
'debut', // Le marqueur est nommé « début »
$debut, // Il doit prendre la valeur de la variable $debut
PDO::PARAM_INT // Cette valeur est de type entier
);
/* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
$resultSet = $query->execute();
/* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
* faut pas oublier qu'on ne récupère pas directement le nombre.
* De plus, comme la requête ne contient aucune donnée client pour fonctionner,
* on peut l'exécuter ainsi directement */
$resultFoundRows = $bdd->query('SELECT found_rows()');
/* On doit extraire le nombre du jeu de résultat */
$nombredElementsTotal = $resultFoundRows->fetchColumn();
// début du tableau
echo '<table>'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr class="class01">';
echo '<td class="ID">#ID</td>';
echo '<td class="Patient">Patient</td>';
echo '<td class="Fiche">Fiche</td>';
echo '<td class="Question">Question</td>';
echo '<td class="Description">Description</td>';
echo '<td class="Details">Details</td>';
echo '<td class="Correction">Corrections</td>';
echo '<td class="NR">NR</td>';
echo '<td class="Commentaires">Commentaires</td>';
echo '</tr>';
echo '</table>'."\n";
// Partie "Boucle"
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($element= $query -> fetch())
{
?>
<form id="insertion" name="insertion" action="dms_modification3.php" method="POST">
<input type="hidden" name="limite" value="<?php echo($limite) ;?>">
<table>
<tr class="class02">
<td class="ID"><input class="id" type="text" name="id[]" value="<?php echo $element['id'] ;?>"></td>
<td class="Patient"><input class="pat" type="text" name="pat[]" value="<?php echo $element['pat'] ;?>"></td>
<td class="Fiche"><input class="fic" type="text" name="fic[]" value="<?php echo $element['fic'] ;?>"></td>
<td class="Question"><input class="que" type="text" name="que[]" value="<?php echo $element['que'] ;?>"></td>
<td class="Description"><input class="des" type="text" name="des[]" value="<?php echo $element['des'] ;?>"></td>
<td class="Details"><input class="det" type="text" name="det[]" value="<?php echo $element['det'] ;?>"></td>
<td class="Corrections"><input class="cor" type="text" name="cor[]" value="<?php echo $element['cor'] ;?>"></td>
<td class="NR"><input class="non_rec" type="number" name="non_rec[]" value="<?php echo $element['non_rec'] ;?>"></td>
<td class="Commentaires"><input class="com" type="text" name="com[]" value="<?php echo $element['com'] ;?>"></td>
</tr>
<?php
}//fin while
?>
</table>
</form>
<!--fin du bloc tableau-->
</div>
<!--fin du bloc element_tableau-->
</div>
<div>
<input class="modifier" type="submit" value="modifier">
</div>
<?php
$query->closeCursor();
?>
<!--fin du bloc corps-->
</div>
<!--fin du bloc element_page correspondant au CORPS-->
</div>
<div class="element_page">
<!--// Partie "Filtres"-->
<div id='filtres'>
<form action="demande_de_corrections_page_filtres.php" method="get">
<select onselect="this.form.submit()" name="patient" id="patient">
<?php
$sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
$result = $bdd->query($sql);
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
?>
<option value="<?php echo $element['pat'];?>"><?php echo $donnees['pat'];?></option>
<?php
}
?>
</select>
<select onselect="this.form.submit()" name="fiche" id="fiche">
<?php
$sql="SELECT DISTINCT pat, fic FROM gbd_dat1 ORDER BY pat";
$result = $bdd->query($sql);
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
?>
<option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
<?php
}
?>
</select>
<input class="valider" type="submit" value="Valider" />
</form>
</div>
<!--// Partie "Liens"-->
<div id='liens'>
<?php
/* On calcule le nombre de pages */
$nombreDePages = ceil($nombredElementsTotal / $limite);
/* Si on est sur la première page, on n'a pas besoin d'afficher de lien
* vers la précédente. On va donc l'afficher que si on est sur une autre
* page que la première */
if ($page > 1):
?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
endif;
/* On va effectuer une boucle autant de fois que l'on a de pages */
for ($i = 1; $i <= $nombreDePages; $i++):
?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
endfor;
/* Avec le nombre total de pages, on peut aussi masquer le lien
* vers la page suivante quand on est sur la dernière */
if ($page < $nombreDePages):
?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
endif;
?>
</div>
</div>
<!-- Le pied de page -->
<div class="element_page">
<div id="pied_de_page"/>
<?php include("pied_de_page.php"); ?>
</div>
</div>
<!--fin du bloc page-->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- jQuery est inclus ! -->
<script>
jQuery(document).ready(function(){
// Du code en jQuery va pouvoir être tapé ici !
console.log("jQuery est prêt !");
});
</script>
</body>
</html>
dms_modification3.php
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
//$nb = count($_POST['id']);
$limite = $_POST['limite'];
//préparation de la requête
$requete = "UPDATE gbd_dat1 SET
pat = :patient,
fic = :fiche,
que = :question,
des = :description,
det = :details,
cor = :correction,
non_rec = :nonrecuperable,
com = :commentaires
WHERE id = :id ";
/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$result = $bdd->prepare($requete);
//print_r($bdd->errorInfo());
$result->bindParam('id',$id,PDO::PARAM_INT);
$result->bindParam('patient',$patient,PDO::PARAM_STR);
$result->bindParam('fiche',$fiche,PDO::PARAM_STR);
$result->bindParam('question',$question,PDO::PARAM_STR);
$result->bindParam('description',$description,PDO::PARAM_STR);
$result->bindParam('details',$details,PDO::PARAM_STR);
$result->bindParam('correction',$correction,PDO::PARAM_STR);
$result->bindParam('nonrecuperable',$nonrecuperable,PDO::PARAM_INT);
$result->bindParam('commentaires',$commentaires,PDO::PARAM_STR);
for($i=0;$i<$limite;$i++)
{
$patient=$_POST['pat'][$i];
$fiche=$_POST['fic'][$i];
$question=$_POST['que'][$i];
$description=$_POST['des'][$i];
$details=$_POST['det'][$i];
$correction=$_POST['cor'][$i];
$nonrecuperable=$_POST['non_rec'][$i];
$commentaires=$_POST['com'][$i];
$id=$_POST['id'][$i];
$result->execute();
//var_dump($patient);
}
//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("La modification à été correctement effectuée") ;
}
else
{
echo("La modification à échouée") ;
}
?>
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.