Menu

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

Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 7 juin 2018 à 22:16 - Dernière réponse : Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention
- 12 juin 2018 à 22:22
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.
Afficher la suite 

Votre réponse

20 réponses

jordane45 22941 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 octobre 2018 Dernière intervention - 7 juin 2018 à 22:54
Commenter la réponse de jordane45
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 8 juin 2018 à 09:33
0
Merci
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.
Commenter la réponse de Honomatopic
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 8 juin 2018 à 19:15
0
Merci
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é ?
Commenter la réponse de Honomatopic
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 9 juin 2018 à 19:24
0
Merci
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.
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 9 juin 2018 à 22:41
La méthode update sert à mettre à jour un email ou le mot de passe ou les deux.
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 9 juin 2018 à 22:47
@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 6700 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention > Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 10 juin 2018 à 10:59
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 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 10 juin 2018 à 13:04
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 6700 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 10 juin 2018 à 14:26
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".
Commenter la réponse de Honomatopic
Honomatopic 145 Messages postés dimanche 16 novembre 2014Date d'inscription 30 juin 2018 Dernière intervention - 12 juin 2018 à 22:22
0
Merci
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.
Commenter la réponse de Honomatopic