Modification enregistrement PHP / MYSQL / PDO
Posté : 03 août 2016, 21:17
Bonjour à tous!
Je reviens vers vous après que vous m'ayez bien aidée à comprendre les dates.
Pour le moment j'ai l'impression de bien avancer mais depuis quelques jours je butte sur la modification de saisie. J'ai testé plusieurs tutoriels mais à chaque fois j'avais des problèmes car je ne comprenais pas tout ou alors j'avais des incohérences entre la connexion à la base via PDO ou natif. J'avoue tout juste commencer à saisir du coup je préfère m'adresser à vous.
Pour le moment je travaille en local sur une base de donnée avec une table pour essayer de comprendre le fonctionnement de tous ces langages avant de me lancer sur le site définitif.
J'arrive à insérer et à visualiser ce que j'envoie dans la base ce qui est un exploit pour moi.
J'ai actuellement 4 fichiers qui devraient me permettre de faire ma saisie et mes correction le tout prevenant de divers bouts de code modifiés trouvés par-ci par-là
J'ai l'impression que ça fonctionne à moitié mais je ne sais pas où est l'erreur.
Voila ce que donne mon code :
Le formulaire de saisie avec la liste des enregistrements afin qu'ils soient modifiés à postériori:

Le formulaire de correction :

Donc là je vois que ça coince car il me manque le nom et la date de naissance et la possibilité d'envoyer la correction au serveur.
J'essaie de travailler en PDO pour plus de sécurité à ce qu'on m'a dit mais j'ai pas l'impression de réussir.
Voila mes codes:
fichier index.php qui permet de saisir et voir.
modifier_post.php
Est-il possible de tout regrouper?
Doit-on saisir sur chaque fichier les infos de connexion à la base de donnée?
Désolée j'ai beaucoup de questions mais php est vraiment obscure pour moi je comprend mieux le sql vieux souvenirs avec acces et l'étude des bases de données en bts avec feuille et crayon de papier.
Pouvez-vous m'orienter pour que je trouve mon erreur afin que je comprenne?
Merci à vous.
Je reviens vers vous après que vous m'ayez bien aidée à comprendre les dates.
Pour le moment j'ai l'impression de bien avancer mais depuis quelques jours je butte sur la modification de saisie. J'ai testé plusieurs tutoriels mais à chaque fois j'avais des problèmes car je ne comprenais pas tout ou alors j'avais des incohérences entre la connexion à la base via PDO ou natif. J'avoue tout juste commencer à saisir du coup je préfère m'adresser à vous.
Pour le moment je travaille en local sur une base de donnée avec une table pour essayer de comprendre le fonctionnement de tous ces langages avant de me lancer sur le site définitif.
J'arrive à insérer et à visualiser ce que j'envoie dans la base ce qui est un exploit pour moi.
J'ai actuellement 4 fichiers qui devraient me permettre de faire ma saisie et mes correction le tout prevenant de divers bouts de code modifiés trouvés par-ci par-là
J'ai l'impression que ça fonctionne à moitié mais je ne sais pas où est l'erreur.
Voila ce que donne mon code :
Le formulaire de saisie avec la liste des enregistrements afin qu'ils soient modifiés à postériori:

Le formulaire de correction :

Donc là je vois que ça coince car il me manque le nom et la date de naissance et la possibilité d'envoyer la correction au serveur.
J'essaie de travailler en PDO pour plus de sécurité à ce qu'on m'a dit mais j'ai pas l'impression de réussir.
Voila mes codes:
fichier index.php qui permet de saisir et voir.
<form action="personnalite.php" method="post">
<p>
<label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br />
<label for="prenom">prénom 1</label> : <input type="text" name="prenom" id="prenom" /><br />
<label for="naissance">Date de naissance</label> : <input type="text" name="naissance" id="naissance"/><br />
<label for="photo">Lien photo</label> : <input type="text" name="photo" id="photo"/><br />
<input type="submit" value="Envoyer" />
</p>
</form>
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// Requête pour affichage
$reponse = $bdd->query('
SELECT nom, prenom ,
DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance , photo
FROM personnalite
ORDER BY ID DESC LIMIT 0, 1');
// Afficher le dernier enregistrement
while ($donnees = $reponse->fetch())
{
echo '<p>' . htmlspecialchars($donnees['prenom']) .
' ' . htmlspecialchars($donnees['nom']) .
', née le ' . htmlspecialchars($donnees['naissance']) .
"<img src=\"" . htmlspecialchars($donnees['photo']) . "\" />" .
'</p>';
}
$reponse->closeCursor();
// Modifier un enregistrement
//connection au serveur:
{
$reponse = $bdd->query('SELECT nom, prenom ,
DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance , photo, id
FROM personnalite
ORDER BY nom');
while ($donnees = $reponse->fetch())
{
?>
<p>
<?php echo
$donnees['nom'] .
' ' . $donnees['prenom'].
' ' . $donnees['naissance']; ?> <a href="modifier.php?number=<?php echo $donnees['id']; ?>">modifier la fiche</a>
<?php
}
// Fin de la boucle qui affiche les articles avec le lien modifier
$reponse->closeCursor();
}
?>
personnalite.php
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO personnalite (nom, prenom, naissance, photo) VALUES(?, ?, str_to_date(?, "%d/%m/%Y"), ?)');
$req->execute(array($_POST['nom'], $_POST['prenom'], $_POST['naissance'] , $_POST['photo']));
// Redirection du visiteur vers la page du minichat
header('Location: index.php');
?>
modifier.php
<?php
// Connexion à la base de données
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
/* On récupère les donnée de l'article séléctioné*/
$reponse = $bdd->prepare('SELECT prenom, nom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, photo, id FROM personnalite WHERE id = ?');
$reponse->execute(array($_GET['number']));
while ($donnees = $reponse->fetch())
{
?>
<!--Formulaire avec les champs préremplis-->
<p>
<form action="modifier_post.php" method="post" id="modif_personnalite">
<label for="prenom">Prénom</label><br/>
<input type="text" name="prenom" value="<?php echo $donnees['prenom'];?>" tabindex="20"/><br/>
<label for="nom">Nom</label><br/>
<input type="text" name="nom" title="<?php echo $donnees['nom'];?>" tabindex="20"/><br/>
<label for="naissance">Date de naissance</label><br/>
<input type="text" name="naissance" title="<?php echo $donnees['naissance'];?>"tabindex="20"/><br/>
<label for="photo">Photo</label><br/>
<input type="text" name="photo" value="<?php echo $donnees['photo'];?>" tabindex="150"/><br/>
<?php
}
// Fin de la boucle pour l'affichage des donnée dans la base de donnée
$reponse->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
</form>
etmodifier_post.php
<?php
/*Si le champ "Prénom" est rempli*/
if (isset($_POST['prenom']) AND $_POST['prenom'] !== "")
{
/*Ensuite si le champ "Nom" est rempli*/
if (isset($_POST['nom']) AND $_POST['nom'] !== "")
{
/*Puis si le champ "Naissance" est rempli*/
if (isset($_POST['naissance']) AND $_POST['naissance'] !== "")
{
/* Enfin si le champ "Photo" est rempli*/
if (isset($_POST['photo']) AND $_POST['photo'] !== "")
{
/*Au final on a comme ordre de modifier l'article seulement si les champs numero_article, date_article, text_article et auteur article ne sont pas vide*/
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*cette requètte préparée sert à modifier les données j'ai rajouté "nouveau" et "nouvelle" au nom des variables mais vous n'êtes pas obligé des faire pareil, c'est juste pour mieux me repérer et comprendre ce que je fais.*/
$reponse = $bdd->prepare('UPDATE personnalite SET prenom = :nouveau_prenom, nom = :nouveau_nom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance = :nouveau_naissance, photo = :nouvelle_photo WHERE id = :id ');
$reponse->execute(array(
'nouveau_prenom' => $_POST['prenom'],
'nouveau_nom' => $_POST['nom'],
'nouveau_naissance' => $_POST['naissance'],
'nouvelle_photo' => $_POST['photo']
));
}
catch(Exception $e)
{
die('Erreur:'.$e->getMessage());
}
$reponse->closeCursor();
}
}
}
echo'<p> votre présentation a bien été modifiée</p>';
}
else
{
echo '<p>Vous n\'avez pas remplis touts les champs demandés</p>';
}
?>
Est-ce obligatoire d'avoir autant de fichiers?Est-il possible de tout regrouper?
Doit-on saisir sur chaque fichier les infos de connexion à la base de donnée?
Désolée j'ai beaucoup de questions mais php est vraiment obscure pour moi je comprend mieux le sql vieux souvenirs avec acces et l'étude des bases de données en bts avec feuille et crayon de papier.
Pouvez-vous m'orienter pour que je trouve mon erreur afin que je comprenne?
Merci à vous.