Mise à jour d'un email en base de données [Résolu]

Mise à jour d'un email en base de données Téléchargement lent (mises à jour etc.) et débit montant bas (Résolu) » Forum - LaBox_Numéricable Mise a jour pilote carte graphique de base microsoft (Résolu) » Forum - Pilotes (drivers) Mise à jour de table dans une base access 2007 avec vb.net » Forum - Access Probleme d'ajout d'email vers base de données (Résolu) » Forum - Webmaster Probleme mise a jour base antivirus kaspersky (Résolu) » Forum - Antivirus

Bonjour, je suis en train de faire une petite application de gestion de mails. Je le développe en PHP orienté objet sans framework. Elle se découpe en 3 répertoires : App qui contient 3 sous-répertoires : Entities, Config et Managers ; un répertoire bootstrap et une répertoire views. J'ai implémenté une classe appelé DatabaseAccess qui effectue la connexion avec la base de données et qui est situé dans mon sous-répertoire "config" :

<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 20:28  */  namespace app; use PDO; class DatabaseAccess {      protected $dbname = DBNAME;     protected $dbhost = DBHOST;     protected $dbuser = DBUSER;     protected $dbpass = DBPASS;     protected $pdo;       public function __construct()     {         try {             $this->pdo = new \PDO("mysql:host=" . $this->dbhost . ";dbname=" . $this->dbname, $this->dbuser, $this->dbpass);             // Activation des erreurs PDO             $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH             $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);         } catch (PDOException $e) {             echo 'La connexion a échouée : ' . $e->getMessage();         }     } }


Dans le répertoire "config" il y a des constantes stockant les identifiants de connexions à la base de données :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 14/05/2018  * Time: 21:28  */  define('DBHOST', '127.0.0.1'); define('DBNAME', 'poo'); define('DBUSER', 'root'); define('DBPASS', '');


Dans mon répertoire "entities" j'ai crée un classe entité email que voici et qui fait référence à ma table "email" dans ma base de données "poo" :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:18  */  //Class entité d'un Email faisant référence au colonne de la table Email  namespace app;  //include_once('../config/autoload.php'); class email {     //Les colonnes de la table défini comme attribut de la classe     protected $id;     protected $email;     protected $password;      /**      * email constructor.      * @param $id      * @param $email      * @param $password      */     public function __construct($id, $email, $password)     {         $this->id = $id;         $this->email = $email;         $this->password = $password;      }      //Ensuite les assesseurs et mutateurs permettant de récuperer les enregistrements de la table      /**      * @return mixed      */     public function getId()     {         return $this->id;     }        /**      * @return mixed      */     public function getEmail()     {         return $this->email;     }      /**      * @param mixed $email      */     public function setEmail($email)     {         $this->email = $email;         return $this;     }      /**      * @return mixed      */     public function getPassword()     {         return $this->password;     }      /**      * @param mixed $password      */     public function setPassword($password)     {         $this->password = $password;         return $this;     }   }


J'ai aussi implémenté un classe EmailManager pour le requêtage en base. Cette clsse hérite de la classe DatabaseAccess :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:30  */ //Controller éffectuant les CRUD en base de données pour la table E-mail  //Utilisation de l'espace de travail namespace app;  //Utilisation de l'objet PDO pour interagir avec la base de données use PDO;  //Class permettant d'effectuer les requêtes CRUD en base de données dans la table E-mail, elle hérite de la classe de connexion en base de données class EmailManager extends DatabaseAccess {     protected $sql;  //Constructeur faisant appel au constructeur mère à savoir DatabaseAccess     public function __construct()     {         parent::__construct();     }  //Methode de création d'un courriel     public function create(email &$email)     {         $sql = $this->pdo->prepare('INSERT INTO email (idemail, emailpersonne, password) VALUES (NULL, :emailpersonne, :password)');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->bindValue(":password", $email->getPassword(), PDO::PARAM_STR);         $resultat = $sql->execute();         return $resultat;      } //Méthode permettant de sélectionner un courriel dans la base de données en fonction de ce qui est entré en base de données     public function read($idemail)     {         $sql = $this->pdo->prepare('SELECT * FROM email WHERE idemail= :idemail');         $sql->bindValue(":idemail", $idemail, PDO::PARAM_INT);         $sql->execute();         $resultat = $sql->fetchObject(__CLASS__);         return $resultat;      }      //Méthode ayant comme signature le récupération de tous les email de la table     public function readAll(email &$email)     {         $sql = $this->pdo->prepare('SELECT idemail, emailpersonne, password FROM email ORDER BY emailpersonne =:emailpersonne');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->execute();         $resultat = $sql->fetchAll();         return $resultat;     }      //Méthode permettant de mettre à jour un email     public function update(email $email)     {         $sql = $this->pdo->prepare('UPDATE email SET emailpersonne= :emailpersonne, password= :password WHERE idemail =:idemail LIMIT 1');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->bindValue(":password", $email->getPassword(), PDO::PARAM_STR);         $sql->bindValue(":idemail", $email->getId(), PDO::PARAM_INT);         $resultat = $sql->execute();         return $resultat;     }      //Méthode de suppression un email     public function delete(email &$email, $id)     {         $sql = $this->pdo->prepare('DELETE FROM email WHERE idemail =:idemail LIMIT 1');         $sql->bindValue(":idemail", $email->getId($id), PDO::PARAM_INT);         $resultat = $sql->execute();         return $resultat;      }  }


Mais pour ce cas, on va s'interessé uniquement à la méthode "update" de EmailManager car cette méthode qui met à jour n'est pas tout à fait opérationnel :
    //Méthode permettant de mettre à jour un email     public function update(email $email)     {         $sql = $this->pdo->prepare('UPDATE email SET emailpersonne= :emailpersonne, password= :password WHERE idemail =:idemail LIMIT 1');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->bindValue(":password", $email->getPassword(), PDO::PARAM_STR);         $sql->bindValue(":idemail", $email->getId(), PDO::PARAM_INT);         $resultat = $sql->execute();         return $resultat;     }


Quand je me connecte au formulaire de connexion que voici :
<?php //Mon formulaire de connextion au back-office  //Définition de l'espace de travail du projet namespace app;  //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include('../app/config/DatabaseAccess.php');  ?>  <form action="traitement.php" method="POST">     <div class="form-group">     </div>     <input type="hidden" name="id"> </p>  <!-- on cache ID mais on en a besoin pour récupérer les données -->   <div class="form-group">     <label for="exampleInputEmail1">Mon adresse email</label>     <input type="email" class="form-control" name="email" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Entrer votre adresse Email">   </div>   <div class="form-group">     <label for="exampleInputPassword1">Mot de passe</label>     <input type="password" class="form-control" name="password" id="exampleInputPassword1" placeholder="Entrer votre mot de passe">   </div>   <div class="form-group form-check">     <input type="checkbox" class="form-check-input" id="exampleCheck1">     <label class="form-check-label" for="exampleCheck1">Se souvenir de moi</label>   </div>   <button type="submit" name="envoyer" class="btn btn-primary">Envoyer</button> </form> </div>     </body>     <?php include('_piedpage.php');?>


Elle revoie à cette page qui affiche un Bonjour + l'email connecté avec deux boutons "modifier" et "supprimer". Et quand je clique sur le bouton "modifier" il dirige vers le formulaire de modification que voici :
<?php //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace app; session_start(); //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include("../app/config/identifiantsbdd.php"); include('../app/config/DatabaseAccess.php'); include('../app/entities/email.php'); include("../app/managers/EmailManager.php");  error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);    $_POST["id"] = $_SESSION["id"]; $_POST["email"] = $_SESSION["email"]; $_POST["password"] = $_SESSION["password"];   ?>      <form action="modifok.php" method="POST">         <div class="form-group">          <input type="hidden" name="id" value="<?php echo $_POST["id"];?>" </p>         <!-- on cache ID mais on en a besoin pour récupérer les données -->         </div>         <div class="form-group">             <label for="exampleInputEmail1">Modification de adresse email</label>             <input type="email" class="form-control" name="email" id="exampleInputEmail1" aria-describedby=\"emailHelp"                    value="<?php echo $_POST["email"]; ?> ">             <div class="form-group">                 <label for="exampleInputPassword1">Mot de passe</label>                 <input type="password" class="form-control" name="password" id="exampleInputPassword1"                        value="<?php echo $_POST["password"]; ?>">             </div>         </div>         <button type="submit" name="renvoyer" class="btn btn-primary">Renvoyer</button>     </form>      <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     <?php include('_piedpage.php'); ?>


Et après avoir cliqué sur le bouton "renvoyer" de ce formulaire de modification, la modif est bien prise en compte dans la session mais pas dans la base de données. Et dans mon EmailManager, la méthode concernée est la méthode "update". Et quand j'ai fais un var_dump de la méthode update il me renvoie bien "true" comme résultat. Ce qui signifie que la méthode "update" est fonctionnelle.

Voici la page de la validation de la modification validée :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 07/06/2018  * Time: 18:58  */ //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace app; //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include("../app/config/identifiantsbdd.php"); include('../app/config/DatabaseAccess.php'); include('../app/entities/email.php'); include("../app/managers/EmailManager.php");   error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);   $result = new EmailManager();  if (isset($_POST["renvoyer"])) {     if (isset($_POST["id"]) && isset($_POST["email"]) && isset($_POST["password"])) {         $email = new email($_POST["id"], $_POST["email"], $_POST["password"]);         $email->setEmail($_POST["email"])->setPassword($_POST["password"]);         if ($result->update($email) == true) {             var_dump($result->update($email));             $_SESSION["id"] = $email->getId();             $_SESSION["email"] = $email->setEmail($_POST["email"]);             $_SESSION["password"] = $email->setPassword($_POST["password"]);             echo "<div class=\"alert alert-success\" role=\"alert\">             L'email modifié avec succès et dévotion !         </div>";         } else {             echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'a pas été modifié avec échec et déception !         </div>";         }     } } ?>     <table class="table">         <thead>         <tr>             <th scope="col">Session</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"         if (isset($_POST["renvoyer"])) {             if (isset($_POST["email"]) && isset($_POST["password"])) {                 $_SESSION["email"] = $_POST["email"];                 $result->read($_POST["id"]);                 echo "<tr>";                 echo "<td>" . "Bonjour " . $_SESSION["email"] . '<br>' . "</li>";                 echo "</td>";                 echo "<td>";                 echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";                 echo "</td>";                 echo "<td>";                 echo "<a href='suppression.php'><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";                 echo "</td>";             }          }         /*             //Condition stipulant que si on clique sur le bouton "supprimer" et que si le contenu des champs n'est pas vide, on affiche les messages suivants :             if (isset($_POST["supprimer"])) {                 var_dump($result->delete($email));                 if ($result->delete($email) == true) {                     echo "<div class=\"alert alert-success\" role=\"alert\">                     L'email supprimé avec succès et dévotion !                 </div>";                 } else {                     echo "<div class=\"alert alert-warning\" role=\"alert\">                     L'email n'est pas supprimer avec échec et déception !                 </div>";                 }             }*/         ?>         </tbody>     </table>     <table class="table">         <thead>         <tr>             <th scope="col">#</th>             <th scope="col">Email</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         $email = new email($_POST["id"], $_POST["email"], $_POST["password"]);         $donnees = $result->readAll($email);         //Récupération des email venant de la base de données         foreach ($donnees as $donnee) {             echo "<tr>";             echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";             echo "</td>";             echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";             echo "</td>";             echo "<td>";             //echo "<a href='modification.php?id=$id'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";             echo "</td>";             echo "<td>";             echo "</a>";             echo "</td>";             echo "</tr>";             echo "</form>";         }          ?>         </tbody>     </table>      <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     </body>     <?php include('_piedpage.php'); ?>

Et ce fait depuis un bon moment que je cherche. Comment ce fait-il que la mise à jour est bien prise en compte dans la session mais pas en base de données qui reste identique. Pour j'ai testé ma connexion en base de données, elle marche bien et les méthode "create", "read" et "readAll" marche bien aussi.

Pouvez-vous m'aider ?

Cordialement.

Forum

Mise à jour d'un email en base de données Téléchargement lent (mises à jour etc.) et débit montant bas (Résolu) » Forum - LaBox_Numéricable Mise a jour pilote carte graphique de base microsoft (Résolu) » Forum - Pilotes (drivers) Mise à jour de table dans une base access 2007 avec vb.net » Forum - Access Probleme d'ajout d'email vers base de données (Résolu) » Forum - Webmaster Probleme mise a jour base antivirus kaspersky (Résolu) » Forum - Antivirus

Web: www.shapebootstrap.net

20 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour
Commence par ça

http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour. J'ai trouvé l'erreur. Cela venait de l'id de l'email. Dans ma base de données il était auto-incrémenté. Et donc il fallait d'abord chercher l'id de l'email et ensuite applique les modification symbolisé par la méthode "update" de mon manager. Donc j'ai appliqué la méthode "read" de mon manager sur l'id dans la méthode "update". La requête SQL est fonctionnelle. Merci.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonsoir. Finalement ma méthode "read" ne marche pas très bien. Car j'ai un formulaire de connexion que voici :

<?php //Mon formulaire de connextion au back-office  //Définition de l'espace de travail du projet namespace app;  //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include('../app/config/identifiantsbdd.php'); include('../app/config/DatabaseAccess.php'); include('../app/managers/EmailManager.php'); include('../app/entities/email.php');   ?>      <form action="traitement.php" method="POST">         <div class="form-group">         </div>         <input type="hidden" name="id" value=""></p>         <!-- on cache ID mais on en a besoin pour récupérer les données -->         <div class="form-group">             <label for="exampleInputEmail1">Mon adresse email</label>             <input type="email" class="form-control" name="email" id="exampleInputEmail1" aria-describedby="emailHelp"                    placeholder="Entrer votre adresse Email">         </div>         <div class="form-group">             <label for="exampleInputPassword1">Mot de passe</label>             <input type="password" class="form-control" name="password" id="exampleInputPassword1"                    placeholder="Entrer votre mot de passe">         </div>         <div class="form-group form-check">             <input type="checkbox" class="form-check-input" id="exampleCheck1">             <label class="form-check-label" for="exampleCheck1">Se souvenir de moi</label>         </div>         <button type="submit" name="envoyer" class="btn btn-primary">Envoyer</button>     </form>     <br>     <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     </div>      </body>     <?php include('_piedpage.php'); ?>


Ensuite voici mon manager EmailManager modifié :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:30  */ //Controller éffectuant les CRUD en base de données pour la table E-mail  //Utilisation de l'espace de travail namespace app;  //Utilisation de l'objet PDO pour interagir avec la base de données use PDO;  //Class permettant d'effectuer les requêtes CRUD en base de données dans la table E-mail, elle hérite de la classe de connexion en base de données class EmailManager extends DatabaseAccess {     protected $sql;  //Constructeur faisant appel au constructeur mère à savoir DatabaseAccess     public function __construct()     {         parent::__construct();     }  //Methode de création d'un courriel     public function create()     {         $email = new email($_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('INSERT INTO email (idemail, emailpersonne, password) VALUES (NULL, :emailpersonne, :password)');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->bindValue(":password", $email->getPassword(), PDO::PARAM_STR);         $resultat = $sql->execute();         return $resultat;      }  //Méthode permettant de sélectionner un courriel dans la base de données en fonction de ce qui est entré en base de données     public function read($idemail)     {         try {             $email = new email($_POST["id"], $_POST["email"], $_POST["password"]);             $sql = $this->pdo->prepare('SELECT idemail, emailpersonne, password FROM email WHERE idemail= :idemail');             $resultat = array(":idemail" => $idemail);             $sql->bindValue(":idemail", $idemail, PDO::PARAM_INT);             $sql->execute($resultat);             //$sql->fetchObject(__CLASS__);         } catch (Exception $e) {             // en cas d'erreur :             echo " Erreur ! " . $e->getMessage();             echo " Les datas : ";         }         print_r($resultat);      }      //Méthode ayant comme signature le récupération de tous les email de la table     public function readAll()     {         $email = new email($_POST["id"], $_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('SELECT idemail, emailpersonne, password FROM email ORDER BY emailpersonne =:emailpersonne');         $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);         $sql->execute();         $resultat = $sql->fetchAll();         return $resultat;     }      //Méthode permettant de mettre à jour un email     public function update($idemail)     {         try {             $email = new email($_POST["id"], $_POST["email"], $_POST["password"]);             $sql = $this->pdo->prepare('UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE idemail=:idemail LIMIT 1');             $resultat = array(":emailpersonne" => $email->getEmail(), ":password" => $email->getPassword(), ":idemail" => $this->read($idemail));             $sql->bindValue(":emailpersonne", $email->getEmail(), PDO::PARAM_STR);             $sql->bindValue(":password", $email->getPassword(), PDO::PARAM_STR);             $sql->bindValue(":idemail", $this->read($idemail), PDO::PARAM_INT);             $sql->execute($resultat);         } catch (Exception $e) {             // en cas d'erreur :             echo " Erreur ! " . $e->getMessage();             echo " Les datas : ";         }         print_r($resultat);       }      //Méthode de suppression un email     public function delete($idemail)     {         $sql = $this->pdo->prepare('DELETE FROM email WHERE idemail =:idemail LIMIT 1');         $sql->bindValue(":idemail", $this->read($idemail), PDO::PARAM_INT);         $resultat = $sql->execute();         return $resultat;      }  }


Et voici la page renvoyé si on envoie le formulaire :
<?php //Déclaration de l'espace de travail du projet namespace app; //Démarrage de la session session_start();    //Condition qui doit vérifié si l'utilisateur est authentifié /* if (empty($_SESSION["email"])) {     header('location:formulaire.php');     exit(); }*/  //Inclusion des scripts nécessaire au traitement des données venant de la base de données include("_entete.php"); include("../app/config/identifiantsbdd.php"); include("../app/config/DatabaseAccess.php"); include("../app/entities/email.php"); include("../app/managers/EmailManager.php");  //Activation des erreurs PDO error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  //Création des objets pour l'email et leur traitement  $result = new EmailManager();  //$email = new email($_POST['id'], $_POST['donnee'], $_POST['password']); //Récupération des valeurs passé dans le formulaire et affectation dans la session  ?> <table class="table">     <thead>     <tr>         <th scope="col">Session</th>         <th scope="col"></th>     </tr>     </thead>      <tbody>     <?php     $_SESSION["id"] = $_POST["id"];     var_dump($_SESSION["id"]);     //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"     if (isset($_POST["envoyer"])) {         if (isset($_POST["id"]) && isset($_POST["email"]) && isset($_POST["password"])) {             $mail = new email($_POST["id"], $_POST["email"], $_POST["password"]);             $_SESSION["email"] = $_POST["email"];             $_SESSION["password"] = $_POST["password"];             var_dump($_SESSION);             //$_SESSION["id"] = $result->read($_POST["id"]);             //$_SESSION["email"] = $_POST["email"];             //$_SESSION["password"] = $_POST["password"];             echo "<tr>";             echo "<td>";             echo "<input type=\"hidden\" name=\"id\" value=\"".$mail->getId()."\">"."</p>";             echo "</td>";             $_SESSION["id"] = $_POST["id"];             if($result->read($_SESSION["id"])==true) {             echo "<td>" . "Bonjour " . $_SESSION["email"] . '<br>' . "</li>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";             echo "</td>";             }         }      }     /*      //Condition stipulant que si on clique sur le bouton "supprimer" et que si le contenu des champs n'est pas vide, on affiche les messages suivants :     if (isset($_POST["supprimer"])) {         var_dump($result->delete($_SESSION["id"]));         if ($result->delete($_SESSION["id"]) == true) {             echo "<div class=\"alert alert-success\" role=\"alert\">             L'email supprimé avec succès et dévotion !         </div>";         } else {             echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'est pas supprimer avec échec et déception !         </div>";         }     }*/     ?>     </tbody> </table> <table class="table">     <thead>     <tr>         <th scope="col">#</th>         <th scope="col">Email</th>         <th scope="col"></th>     </tr>     </thead>      <tbody>     <?php     //$email = new email($_POST['email'], $_POST['password']);     $donnees = $result->readAll();     //Récupération des email venant de la base de données     foreach ($donnees as $donnee) {         //$id = $donnee["idemail"];         echo "<tr>";         echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";         echo "</td>";         echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";         echo "</td>";         echo "<td>";         //echo "<a href='modification.php?id=$id'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";         echo "</td>";         echo "<td>";         echo "<a href='suppression.php'>";         echo "</a>";         echo "</td>";         echo "</tr>";         echo "</form>";     }      ?>     </tbody> </table>  <a href='creation.php'>     <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button> </a> </body> <?php include('_piedpage.php'); ?>   


Dans mon formulaire de connexion, j'ai un champ caché faisant référence à l'id auto incrémenté dans ma base de données et en faisant mes tests, je constate que ma méthode "read", récupère bien l'email et le mot de passe renseigné dans les champ mais pas l'id.

Pouvez-vous m'aider à récupérer l'id de l'email dans la table "email" de ma base dans le champ caché ?

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bon les choses ont évolué depuis mon dernier post. Pour la méthode "read" j'ai abandonné la récupération par l'id au profit de l'email vu que l'email est un identifiant en soi (il est unique à chaque utilisateur). Néanmoins, un problème se pose pour la méthode "update". Car pour changer un email par exemple, il faut se reférer sur un autre champ qui est unique en l'occurence l'id de l'email. Donc mon problème actuel, c'est la méthode "update" dont j'aimerai récupérer l'id pour pouvoir appliquer la mise à jour d'un l'email.

Voici mon code changé depuis. Voici mon formulaire de connexion :

<?php //Mon formulaire de connextion au back-office  //Définition de l'espace de travail du projet namespace app;  //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include('../app/config/identifiantsbdd.php'); include('../app/config/DatabaseAccess.php'); include('../app/managers/EmailManager.php'); include('../app/entities/email.php');  use app\email;  //$_POST["id"] = NULL; $_POST["email"] = NULL; $_POST["password"] = NULL; //$_SESSION["id"] = $_POST["id"]; $mail = new email($_POST["email"], $_POST["password"]); ?> <form action="traitement.php" method="POST">     <div class="form-group">         <label for="exampleInputEmail1">Mon adresse email</label>         <input type="email" class="form-control" name="email" id="exampleInputEmail1" aria-describedby="emailHelp"                placeholder="Entrer votre adresse Email">     </div>     <div class=\"form-group\">         <label for="exampleInputPassword1">Mot de passe</label>         <input type="password" class="form-control" name="password" id="exampleInputPassword1"                placeholder="Entrer votre mot de passe">     </div>     <div class="form-group form-check">         <input type="checkbox" class="form-check-input" id="exampleCheck1"></p>         <label class="form-check-label" for="exampleCheck1">Se souvenir de moi</label>     </div>     <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Envoyer</button>     <div class="form-group">         <input type="hidden" name="id" value=""></p>     </div>     <!-- on cache ID mais on en a besoin pour récupérer les données --> </form> <br> <a href='creation.php'>     <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button> </a> </div>  </body> <?php include('_piedpage.php'); ?> 


Quand l'utilisateur est connecté il tombe sur la page traitement.php avec un message personnalisé pour l'email présent dans la base de données :
<?php //Déclaration de l'espace de travail du projet namespace app; //Démarrage de la session session_start();  //Condition qui doit vérifié si l'utilisateur est authentifié /* if (empty($_SESSION["email"])) {     header('location:formulaire.php');     exit(); }*/  //Inclusion des scripts nécessaire au traitement des données venant de la base de données include("_entete.php"); include("../app/config/identifiantsbdd.php"); include("../app/config/DatabaseAccess.php"); include("../app/entities/email.php"); include("../app/managers/EmailManager.php");  //Activation des erreurs PDO error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  //Création des objets pour l'email et leur traitement  $result = new EmailManager();  $mail = new email($_POST['email'], $_POST['password']); //Récupération des valeurs passé dans le formulaire et affectation dans la session $mailpersonne = $_POST["email"]; $pass = $_POST["password"]; $_SESSION["id"] = $_POST["id"];   ?> <table class="table">     <thead>     <tr>         <th scope="col">Session</th>         <th scope="col"></th>     </tr>     </thead>      <tbody>      <?php      //var_dump($_SESSION["id"]);     //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"      if (isset($mailpersonne) && isset($pass) && isset($_POST["envoyer"])) {         //$mail = new email($_POST["id"], $_POST["email"], $_POST["password"]);          $_SESSION["email"] = $mailpersonne;         $_SESSION["password"] = $pass;         var_dump($_SESSION);         var_dump($result->read($_SESSION["email"]));         echo "<tr>";         echo "<td>";         echo "</td>";         if ($result->read($_SESSION["email"]) == true) {             $_SESSION["id"] = $mail->getId();             echo "<input type=\"hidden\" name=\"id\" value=\"" . $_SESSION["id"] . "\">" . "</p>";             echo "<td>" . "Bonjour " . $_SESSION["email"] . '<br>' . "</li>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";             echo "</td>";         }      }     /*      //Condition stipulant que si on clique sur le bouton "supprimer" et que si le contenu des champs n'est pas vide, on affiche les messages suivants :     if (isset($_POST["supprimer"])) {         var_dump($result->delete($_SESSION["id"]));         if ($result->delete($_SESSION["id"]) == true) {             echo "<div class=\"alert alert-success\" role=\"alert\">             L'email supprimé avec succès et dévotion !         </div>";         } else {             echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'est pas supprimer avec échec et déception !         </div>";         }     }*/     ?>     </tbody> </table> <table class="table">     <thead>     <tr>         <th scope="col">#</th>         <th scope="col">Email</th>         <th scope="col"></th>     </tr>     </thead>      <tbody>     <?php     //$email = new email($_POST['email'], $_POST['password']);     $donnees = $result->readAll();     //Récupération des email venant de la base de données     foreach ($donnees as $donnee) {         //$id = $donnee["idemail"];         echo "<tr>";         echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";         echo "</td>";         echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";         echo "</td>";         echo "<td>";         //echo "<a href='modification.php?id=$id'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";         echo "</td>";         echo "<td>";         echo "<a href='suppression.php'>";         echo "</a>";         echo "</td>";         echo "</tr>";         echo "</form>";     }      ?>     </tbody> </table> <br> <p>     <a href="index.php">         <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Formulaire de connexion</button>     </a> </p> <a href='creation.php'>     <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button> </a> </body> <?php include('_piedpage.php'); ?>   


A côté de l'email connecté, il y a deux boutons modifier et supprimer. Et quand je clique à côté du bouton "modifier", je tombe sur le formulaire de modification avec les champ prérempli (l'email et le mot de passe notamment) :
<?php //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace app; session_start(); //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include("../app/config/identifiantsbdd.php"); include('../app/config/DatabaseAccess.php'); include('../app/entities/email.php'); include("../app/managers/EmailManager.php");  error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);   $_POST["email"] = $_SESSION["email"]; $_POST["password"] = $_SESSION["password"]; $mail = new email($_POST["email"], $_POST["password"]); $_SESSION["id"] = $mail->getId();  ?>      <form action="modifok.php" method="POST">         <div class="form-group">              <input type="hidden" name="id" value="<?php echo $_SESSION["id"]; ?>" </p>             <!-- on cache ID mais on en a besoin pour récupérer les données -->         </div>         <div class="form-group">             <label for="exampleInputEmail1">Modification de adresse email</label>             <input type="email" class="form-control" name="email" id="exampleInputEmail1" aria-describedby=\"emailHelp"                    value="<?php echo $_POST["email"]; ?> ">             <div class="form-group">                 <label for="exampleInputPassword1">Mot de passe</label>                 <input type="password" class="form-control" name="password" id="exampleInputPassword1"                        value="<?php echo $_POST["password"]; ?>">             </div>         </div>         <button type="submit" name="renvoyer" class="btn btn-success">Renvoyer</button>         <button type="submit" name="supprimer" class="btn btn-warning">Supprimer</button>     </form>     <br>     <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     <?php include('_piedpage.php'); ?>

En dessous il y a un bouton "renvoyer" et quand je change ou je modifie l'email et/ou le mot de passe et que je clique sur "renvoyer", l'email et le mot de passe sont changé dans la session mais pas en base de données. Car en faisant un var_dump de ma variable superglobale $_SESSION, il manque l'id qui n'a pas été récupéré d'où le fait que les changements n’interagissent pas avec la base de données. Voici mon entité email :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:18  */  //Class entité d'un Email faisant référence au colonne de la table Email  namespace app;  //include_once('../config/autoload.php'); class email {     //Les colonnes de la table défini comme attribut de la classe     private $id;     private $email;     private $password;      /**      * email constructor.      * @param $id      * @param $email      * @param $password      */     public function __construct($email, $password)     {         //$this->id = $id;         $this->email = $email;         $this->password = $password;      }      //Ensuite les assesseurs et mutateurs permettant de récuperer les enregistrements de la table      /**      * @return mixed      */     public function getId()     {         return $this->id;     }      /**      * @param mixed $id      */     public function setId($id)     {         $this->id = $id;         return $this;     }        /**      * @return mixed      */     public function getEmail()     {         return $this->email;     }      /**      * @param mixed $email      */     public function setEmail($email)     {         $this->email = $email;         return $this;     }      /**      * @return mixed      */     public function getPassword()     {         return $this->password;     }      /**      * @param mixed $password      */     public function setPassword($password)     {         $this->password = $password;         return $this;     }   }


Et voici le manager gérant la gestion avec la table email de ma base de données. Et c'est la méthode "update" qui gère les modifications de mes informations :
<?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:30  */ //Controller éffectuant les CRUD en base de données pour la table E-mail  //Utilisation de l'espace de travail namespace app;  //Utilisation de l'objet PDO pour interagir avec la base de données use PDO;  //Class permettant d'effectuer les requêtes CRUD en base de données dans la table E-mail, elle hérite de la classe de connexion en base de données class EmailManager extends DatabaseAccess {     protected $sql;  //Constructeur faisant appel au constructeur mère à savoir DatabaseAccess     public function __construct()     {         parent::__construct();     }  //Methode de création d'un courriel     public function create()     {         $email = new email($_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('INSERT INTO email (emailpersonne, password) VALUES (:emailpersonne, :password)');         $resultat = $sql->execute(array(":emailpersonne" => $email->getEmail(), ":password" => $email->getPassword()));         $sql->closeCursor();         return $resultat;     }  //Méthode permettant de sélectionner un courriel dans la base de données en fonction de ce qui est entré en base de données     public function read($emailpersonne)     {         $sql = $this->pdo->prepare('SELECT emailpersonne FROM email WHERE emailpersonne=:emailpersonne');         $sql->execute(array(":emailpersonne" => $emailpersonne));         $resultat = $sql->fetch();         $sql->closeCursor();         return $resultat;     }      //Méthode ayant comme signature le récupération de tous les email de la table     public function readAll()     {         $email = new email($_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('SELECT idemail, emailpersonne, password FROM email ORDER BY emailpersonne =:emailpersonne');         $sql->execute(array(":emailpersonne" => $email->getEmail()));         $resultat = $sql->fetchAll();         $sql->closeCursor();         return $resultat;     }      //Méthode permettant de mettre à jour un email     public function update($emailpersonne, $password)     {         $email = new email($_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE emailpersonne =:emailpersonne');         $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne, ":password" => $password, ":idemail"=>$email->getId()));         $sql->closeCursor();         return $resultat;     }      //Méthode de suppression un email     public function delete($emailpersonne)     {         $sql = $this->pdo->prepare('DELETE FROM email WHERE emailpersonne =:emailpersonne LIMIT 1');         $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne));         $sql->closeCursor();         return $resultat;     }  }


Pouvez-vous m'aider car j'ai tout essayé mais rien à faire aucune interaction avec la base de données pour la méthode "update". Les autres méthodes de mon manager marchent bien sauf la méthode "update".

PS : j'ai réappliqué la solution que j'avais posté précedemment c'est-à-dire appliqué la méthode "read" sur l'id dans la méthode "update"mais visiblement cela ne marche pas.

Reply
réponses:
  • auteur

  • yg_be

    la méthode update ne devrait-elle pas recevoir en paramètres l'ancien et le nouveau email?

  • Honomatopic

    Normalement c'est l'ancien email et ensuite on applique la méthode qui modifie l'ancien email dans la requete UPDATE nom_table SET nom_colonne = nouvelle_valeur_de_lemail WHERE condition. Pour la condition, je prends id de l'email.

  • yg_be

    "normalement", tu fais certaines chose, et, en réalité, tu en fais d'autres:
    moi je lis ceci:

    UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE emailpersonne =:emailpersonne

    je trouve que tes noms $email et $emailpersonne sont très confus: quel est l'ancien email, quel est le nouvel email?

  • Honomatopic

    Où tu vois dans ma méthode "update" un variable $email ? email correspond au nom de la table et $emailpersonne c'est l'email qui est sur le point de changer qui est en argument dans la méthode. Quand je fais appel à cette méthode et que je mets en argument $_POST["email"], il doit me changer le contenu. Mais si tu veux plus de clarté, j'ai modifié entre temps ma méthode "update" la voici :

        //Méthode permettant de mettre à jour un email     public function update($emailpersonne, $password)     {         $mail = new email($_POST["email"], $_POST["password"]);         $sql = $this->pdo->prepare('UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE idemail =:idemail');         $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne, ":password" => $password, ":idemail"=>$mail->getId()));         $sql->closeCursor();         return $resultat;     }


    Il y a un variable $mail par contre qui construit l'objet email par contre.

  • yg_be

    je vois une variable $email en ligne 61 du post #4. y vois-tu autre chose?
    je trouve que tes noms $mail et $emailpersonne sont très confus: quel est l'ancien email, quel est le nouvel email?

  • Honomatopic

    Non pour le post #4 oublie c'était l'ancien version de mon code. Celle qui est concerné par le bug est ce post ci.

  • yg_be

    je pense que tu ne devrais pas utiliser ainsi les variables $_POST.
    où appelles-tu la fonction update?

  • Honomatopic

    Ah oui j'ai oublié le fichier la méthode "update()" est appelé dans ce fichier que voici :

    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 07/06/2018  * Time: 18:58  */ //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace app; //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include("../app/config/identifiantsbdd.php"); include('../app/config/DatabaseAccess.php'); include('../app/entities/email.php'); include("../app/managers/EmailManager.php");   error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  $result = new EmailManager(); $_SESSION["id"] = $_POST["id"]; $_SESSION["email"] = $_POST["email"]; $_SESSION["password"] = $_POST["password"]; if (isset($_POST["renvoyer"])) {     if (isset($_POST["email"]) && $_POST["password"]) {         $email = new email($_POST["email"], $_POST["password"]);         $email->setEmail(htmlspecialchars($_POST["email"]))->setPassword(htmlspecialchars($_POST["password"]));         var_dump($_SESSION);         $result->update($_POST["email"], $_POST["password"]);         if ($result->update($_POST["email"], $_POST["password"]) == true) {             echo "<div class=\"alert alert-success\" role=\"alert\">             L'email modifié avec succès et dévotion !         </div>";         } else {             echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'a pas été modifié avec échec et déception !         </div>";         }     } }  //Condition stipulant que si on clique sur le bouton "supprimer" et que si le contenu des champs n'est pas vide, on affiche les messages suivants : if (isset($_POST["supprimer"])) {     var_dump($result->delete($_SESSION["email"]));     if ($result->delete($_SESSION["email"]) == true) {         echo "<div class=\"alert alert-success\" role=\"alert\">             L'email supprimé avec succès et dévotion !         </div>";     } else {         echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'est pas supprimer avec échec et déception !         </div>";     } } ?>     <table class="table">         <thead>         <tr>             <th scope="col">Session</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"         if (isset($_POST["renvoyer"])) {             if (isset($_POST["email"]) && isset($_POST["password"])) {                 $_SESSION["email"] = $email->getEmail();                 $result->read($_SESSION["email"]);                 echo "<tr>";                 echo "<td>";                 echo "</td>";                 echo "<input type=\"hidden\" name=\"id\" value=\"" . $_SESSION["id"] . "\">" . "</p>";                 echo "<td>" . "Bienvenue " . $_SESSION["email"] . '<br>' . "</li>";                 echo "</td>";                 echo "<td>";                 echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";                 echo "</td>";                 echo "<td>";                 echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";                 echo "</td>";             }          }         ?>         </tbody>     </table>     <table class="table">         <thead>         <tr>             <th scope="col">#</th>             <th scope="col">Email</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         $donnees = $result->readAll();         //Récupération des email venant de la base de données         foreach ($donnees as $donnee) {             echo "<tr>";             echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";             echo "</td>";             echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";             echo "</td>";             echo "<td>";             //echo "<a href='modification.php?id=$id'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";             echo "</td>";             echo "<td>";             echo "</a>";             echo "</td>";             echo "</tr>";             echo "</form>";         }          ?>         </tbody>     </table>     <br>     <p>         <a href="index.php">             <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Formulaire de connexion</button>         </a>     </p>     <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     </body>     <?php include('_piedpage.php'); ?>

  • yg_be

    tu appelles deux fois $result->update en lignes 34 et 35: je pense que c'est une erreur.
    je ne comprends pas à quoi sert la fonction update.

  • Honomatopic

    Quand ça soit les variables $_POST ou pas en argument de la méthode update lorsque je crée l'objet Email, ça ne marche pas... Mais le message est passé...

  • Honomatopic

    La méthode update sert à mettre à jour un email ou le mot de passe ou les deux.

  • Honomatopic

    @yg_be : non ça ne marche pas, comme je l'ai dis précédemment je crois que c'est au niveau de l'id que le bas blesse car dans ma méthode update il faut avoir l'id pour effectuer la modification de l'email et/ou du mot de passe. Et quand j'ai var_dump de $_SESSION il récupère les informations sauf l'id. Si le SGBD ne sait sur quel email se référer d'ou l'importance de l'id. L'objectif s'est de récupérer l'id de session pour effectuer la mise à jour des informations.

  • yg_be

    je vois des dizaines d'anomalies dans ton code en #12.
    commençons par une:
    en ligne 26, tu fais

    $_SESSION["id"] = $_POST["id"];
    .
    cela me semble bizarre d'ainsi accepter que l'utilisateur puisse specifier cette valeur, sans aucune vérification.

  • Honomatopic

    Bonjour. Comme tu me l'as dis @yg_be j'ai effectué des modifications à mon petit projet. Voici tout d'abord le formulaire de connexion :

    <?php //Mon formulaire de connextion au back-office  //Définition de l'espace de travail du projet namespace poo_test; session_start(); //Inclusion des script PHP nécessaire au bon déroulement du traitement include("_entete.php"); include("config/identifiantsbdd.php"); include("class/DatabaseAccess.php"); include("class/EmailManager.php"); include("class/email.php");   ?> <body> <div class="container">     <form action="traitement.php" method="POST">         <div class="form-group">             <input type="hidden" class="form-control" name="id" value="">         </div>         <div class="form-group">             <label for="adresseEmail">Mon adresse email</label>             <input type="email" class="form-control" name="email" placeholder="Entrer votre adresse Email">         </div>         <div class="form-group">             <label for="motPasse">Mot de passe</label>             <input type="password" class="form-control" name="password" placeholder="Entrer votre mot de passe">         </div>         <div class="form-group form-check">             <input type="checkbox" class="form-check-input" id="souvenir"></p>             <label class="form-check-label" for="souvenir">Se souvenir de moi</label>         </div>         <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Envoyer</button>          <!-- on cache ID mais on en a besoin pour récupérer les données -->     </form>     <br>     <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a> </div>  </body> <?php include('_piedpage.php'); ?> 


    Ensuite voilà la page de redirection si l'authentification se passe bien :

    <?php //Déclaration de l'espace de travail du projet namespace poo_test; //Démarrage de la session session_start();  //Condition qui doit vérifié si l'utilisateur est authentifié /* if (empty($_SESSION["email"])) {     header('location:formulaire.php');     exit(); }*/  //Inclusion des scripts nécessaire au traitement des données venant de la base de données include("_entete.php"); include("config/identifiantsbdd.php"); include("class/DatabaseAccess.php"); include("class/email.php"); include("class/EmailManager.php");  //Activation des erreurs PDO error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  //Création des objets pour l'email et leur traitement  $result = new EmailManager();   ?> <body> <table class="table">     <thead>     <tr>         <th scope="col">Session</th>         <th scope="col"></th>     </tr>     </thead>      <tbody>     <?php      //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"      if (isset($_POST["envoyer"], $_POST["email"], $_POST["password"])) {         if ($result->read($_POST["email"]) == true) {             $_SESSION["id"] = $_POST["id"];             $_SESSION["email"] = $_POST["email"];             $_SESSION["password"] = $_POST["password"];             var_dump($_SESSION);             echo "<tr>";             echo "<td>";             echo "</td>";             echo "<td>" . "Bienvenue " . $_SESSION["email"] . '<br>' . "</li>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";             echo "</td>";             echo "<td>";             echo "<a href='modification.php'.><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";             echo "</td>";         } else {             header("location:index.php");             exit();         }      }      ?>     </tbody> </table> <table class="table">     <thead>     <tr>         <th scope="col">#</th>         <th scope="col">Email</th>         <th scope="col"></th>     </tr>     </thead>       <tbody>     <?php     $donnees = $result->readAll($_POST["email"], $_POST["password"]);     //Récupération des email venant de la base de données     foreach ($donnees as $donnee) {         echo "<tr>";         echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";         echo "</td>";         echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";         echo "</td>";         echo "<td>";         echo "</td>";         echo "</tr>";         echo "</form>";     }     ?>     </tbody> </table> <br>  <a href='creation.php'>     <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button> </a> <p>     <a href="index.php">         <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Formulaire de connexion</button>     </a> </p> </body> <?php include('_piedpage.php'); ?>   


    Pour la modification d'un emaill, la page qui suit est la suivante :

    <?php //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace poo_test; session_start(); //Inclusion des script PHP nécessaire au bon déroulement du traitement include('_entete.php'); include("config/identifiantsbdd.php"); include('class/DatabaseAccess.php'); include('class/email.php'); include("class/EmailManager.php");  error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  $_POST["id"] = $_SESSION["id"]; $_POST["email"] = $_SESSION["email"]; $_POST["password"] = $_SESSION["password"];   ?>     <body>     <form action="traitementmodif.php" method="POST">         <div class="form-group">              <input type="hidden" name="id" value="<?php echo $_POST["id"] ;?>" </p>             <!-- on cache ID mais on en a besoin pour récupérer les données -->         </div>         <div class="form-group">             <label for="modifEmail">Modification de adresse email</label>             <input type="email" class="form-control" name="email" value="<?php echo $_POST["email"]; ?> ">             <div class="form-group">                 <label for="modifMotPasse">Mot de passe</label>                 <input type="password" class="form-control" name="password" value="<?php echo $_POST["password"]; ?>">             </div>         </div>         <button type="submit" name="renvoyer" class="btn btn-success">Renvoyer</button>         <button type="submit" name="supprimer" class="btn btn-warning">Supprimer</button>     </form>     <br>     <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     </body>     <?php include('_piedpage.php'); ?>


    Et si la modification a été effectué et renvoyé, voici la page :
    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 07/06/2018  * Time: 18:58  */ //Mon formulaire de modification au back-office   //Définition de l'espace de travail du projet namespace poo_test; //Inclusion des script PHP nécessaire au bon déroulement du traitement include("_entete.php"); include("config/identifiantsbdd.php"); include("class/DatabaseAccess.php"); include("class/email.php"); include("class/EmailManager.php");   error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);  $result = new EmailManager();   if (isset($_POST["renvoyer"], $_POST["id"], $_POST["email"], $_POST["password"])) {     if ($result->update($_POST["email"], $_POST["password"]) == true) {         $mail = new email($_POST["email"], $_POST["password"]);         $mail->setEmail(htmlspecialchars($_POST["email"]))->setPassword(htmlspecialchars($_POST["password"]));         var_dump($_POST);         echo "<div class=\"alert alert-success\" role=\"alert\">             L'email modifié avec succès et dévotion !         </div>";     } else {         echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'a pas été modifié avec échec et déception !         </div>";     } }  //Condition stipulant que si on clique sur le bouton "supprimer" et que si le contenu des champs n'est pas vide, on affiche les messages suivants : if (isset($_POST["supprimer"], $_POST["email"], $_POST["password"])) {     if ($result->delete($_POST["email"]) == true) {         echo "<div class=\"alert alert-success\" role=\"alert\">             L'email supprimé avec succès et dévotion !         </div>";     } else {         echo "<div class=\"alert alert-warning\" role=\"alert\">             L'email n'est pas supprimer avec échec et déception !         </div>";     } } ?>     <body>     <table class="table">         <thead>         <tr>             <th scope="col">Session</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         //Condition stipulant que si on clique sur le bouton "envoyer" et que si le contenu des champs n'est pas vide, on affiche le "Bonjour $_SESSION"         if (isset($_POST["renvoyer"], $_POST["email"], $_POST["password"])) {             if ($result->update($_POST["email"], $_POST["password"]) == true) {                 $_SESSION["id"] = $_POST["id"];                 $_SESSION["email"] = $_POST["email"];                 $_SESSION["password"] = $_POST["password"];                 var_dump($_SESSION);                 echo "<tr>";                 echo "<td>";                 echo "</td>";                 echo "<td>" . "Bienvenue " . $_SESSION["email"] . '<br>' . "</li>";                 echo "</td>";                 echo "<td>";                 echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-success \">Modifier</button></a>";                 echo "</td>";                 echo "<td>";                 echo "<a href='modification.php'><button type=\"button\" class=\"btn btn-warning \" name=\"supprimer\">Supprimer</button></a>";                 echo "</td>";             }         }         ?>         </tbody>     </table>     <table class="table">         <thead>         <tr>             <th scope="col">#</th>             <th scope="col">Email</th>             <th scope="col"></th>         </tr>         </thead>          <tbody>         <?php         $donnees = $result->readAll($_POST["email"], $_POST["password"]);         //Récupération des email venant de la base de données         foreach ($donnees as $donnee) {             echo "<tr>";             echo "<td>" . "<li name='id'>" . $donnee["idemail"] . "</li>";             echo "</td>";             echo "<td>" . "<li name='email'>" . $donnee["emailpersonne"] . "</li>";             echo "</td>";             echo "<td>";             echo "</td>";             echo "<td>";             echo "</a>";             echo "</td>";             echo "</tr>";             echo "</form>";         }          ?>         </tbody>     </table>     <br>      <a href='creation.php'>         <button type="button" class="btn btn-info btn-lg">Ajouter un Email</button>     </a>     <p>         <a href="index.php">             <button type="submit" name="envoyer" class="btn btn-primary btn-lg">Formulaire de connexion</button>         </a>     </p>     </body>     <?php include('_piedpage.php'); ?>


    Et toujours le même problème, j'arrive à mettre à jour mon email dans la session mais pas dans la base de données car je n'ai pas récupéré l'id de la session de mon email. Et je galère toujours.

    Comme j'ai refactorisé mon projet, je vous donne les classes que j'ai réimplémenté. Voici la classe se connectant à la base de données :

    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 20:28  */  namespace poo_test;  use PDO;  class DatabaseAccess {      private $dbname = DBNAME;     private $dbhost = DBHOST;     private $dbuser = DBUSER;     private $dbpass = DBPASS;     protected $pdo;       public function __construct()     {         try {             $this->pdo = new \PDO("mysql:host=" . $this->dbhost . ";dbname=" . $this->dbname, $this->dbuser, $this->dbpass);             // Activation des erreurs PDO             $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);             // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH             $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);         } catch (PDOException $e) {             echo 'La connexion a échouée : ' . $e->getMessage();         }     } }


    Voici l'entité email :
    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:18  */  //Class entité d'un Email faisant référence au colonne de la table Email  namespace poo_test;  //include_once('../config/autoload.php'); class email {     //Les colonnes de la table défini comme attribut de la classe     private $id;     private $email;     private $password;      /**      * email constructor.      * @param $id      * @param $email      * @param $password      */     public function __construct($email, $password)     {         //$this->id = $id;         $this->email = $email;         $this->password = $password;      }      //Ensuite les assesseurs et mutateurs permettant de récuperer les enregistrements de la table      /**      * @return mixed      */     public function getId()     {         return $this->id;     }      /**      * @param mixed $id      */     public function setId($id)     {         $this->id = $id;         return $this;     }        /**      * @return mixed      */     public function getEmail()     {         return $this->email;     }      /**      * @param mixed $email      */     public function setEmail($email)     {         $this->email = $email;         return $this;     }      /**      * @return mixed      */     public function getPassword()     {         return $this->password;     }      /**      * @param mixed $password      */     public function setPassword($password)     {         $this->password = $password;         return $this;     }   }


    Voici mon manager EmailManager :
    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 13/05/2018  * Time: 21:30  */ //Controller éffectuant les CRUD en base de données pour la table E-mail  //Utilisation de l'espace de travail namespace poo_test;  //Utilisation de l'objet PDO pour interagir avec la base de données use PDO;  //Class permettant d'effectuer les requêtes CRUD en base de données dans la table E-mail, elle hérite de la classe de connexion en base de données class EmailManager extends DatabaseAccess {     private $sql;  //Constructeur faisant appel au constructeur mère à savoir DatabaseAccess     public function __construct()     {         parent::__construct();     }  //Methode de création d'un courriel     public function create($emailpersonne, $password)     {         $email = new email($emailpersonne, $password);         $sql = $this->pdo->prepare('INSERT INTO email (emailpersonne, password) VALUES (:emailpersonne, :password)');         $resultat = $sql->execute(array(":emailpersonne" => $email->getEmail(), ":password" => $email->getPassword()));         $sql->closeCursor();         return $resultat;     }  //Méthode permettant de sélectionner un courriel dans la base de données en fonction de ce qui est entré en base de données     public function read($emailpersonne)     {         $sql = $this->pdo->prepare('SELECT emailpersonne FROM email WHERE emailpersonne=:emailpersonne');         $sql->execute(array(":emailpersonne" => $emailpersonne));         $resultat = $sql->fetch();         $sql->closeCursor();         return $resultat;     }      //Méthode ayant comme signature le récupération de tous les email de la table     public function readAll($emailpersonne, $password)     {         $email = new email($emailpersonne, $password);         $sql = $this->pdo->prepare('SELECT idemail, emailpersonne, password FROM email ORDER BY idemail =:idemail');         $sql->execute(array(":idemail" => $email->getId()));         $resultat = $sql->fetchAll();         $sql->closeCursor();         return $resultat;     }      //Méthode permettant de mettre à jour un email     public function update($emailpersonne, $password)     {         $mail = new email($emailpersonne, $password);         $sql = $this->pdo->prepare('UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE idemail =:idemail');         $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne, ":password" => $password, ":idemail"=>$mail->getId()));         $sql->closeCursor();         return $resultat;     }      //Méthode de suppression un email     public function delete($emailpersonne)     {         $sql = $this->pdo->prepare('DELETE FROM email WHERE emailpersonne =:emailpersonne LIMIT 1');         $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne));         $sql->closeCursor();         return $resultat;     }  }

    Et voici mes identifiants de connexion :
    <?php /**  * Created by PhpStorm.  * User: Honoré  * Date: 14/05/2018  * Time: 21:28  */ namespace poo_test; define('DBHOST', '127.0.0.1'); define('DBNAME', 'poo'); define('DBUSER', 'root'); define('DBPASS', '');  

    Donc par conséquent, ne pas prendre en considération les autres posts. Pour résolver le problème, il faut se base sur ce post là et pas les autres maintenant.

  • yg_be

    j'ai lu ton code #18.

    où se fait l'authentification?

    je suggère de ne jamais faire

    $_POST["..."] =
    , et de n'utiliser $_POST que pour les données venant de l'utilisateur.

    merci de donner les noms de chaque page, sinon impossible de comprendre les interactions entre les pages.

    le moment sera bientôt venu de se réfléchir à ta gestion de "id".

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonsoir. J'ai changé mon application entre temps en la transformant en gestion de personnes au lieu de la gestion d'emails. Et en lisant quelques bouquins de PHP, j'ai pu résoudre l'erreur de ma méthode update. Car il fallait d'abord que je lise l'id dans le formulaire de modification avec la méthode "read" de mon manager et que j'applique la méthode "update".

Merci pour votre aide mon application de gestion de personne est fonctionnel.

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed