Bonsoir,

Je développe en ce moment une petite application de gestion d'email en PHP orienté objet sans framework. Cette application est censée créer, lire, modifier et supprimer un mail. Or avec cette application, je peux bien créer, lire un mail, lire tous les mails de la base de données et supprimer un mail. Mais pour modifier un mail, j'arrive à le modifier dans la session mais pas dans la base de données. En effet, le problème vient de l'id. En faisant un var_dump de ma session, la session ne récupère pas l'id de l'email et j'en ai besoin afin de prendre dans ma requête SQL comme paramètre un champ non modifiable. Car l'id est auto incrémenté et génerer automatiquement par la base de données. Voici l'intégralité de mon code, d'abord ma page de 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');

?>
<form action="traitement.php" method="POST">
    <div class="form-group">
        <input type="hidden" class="form-control" name="id" id="exampleInputId1" aria-describedby="idHelp"
               placeholder="C'est l'id">
    </div>
    <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 on est authentifié dans le système et que mon email me permettant de me connecter est présent dans la base, un message de bienvenue et l'email reconnu apparait. De plus, il y a un bouton modifier et supprimer à côté. Voici la page :

<?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;
        //$id = $_SESSION["id"];
        var_dump($_SESSION);
        var_dump($result->read($_SESSION["email"]));
        //var_dump($id);
        echo "<tr>";
        echo "<td>";
        echo "</td>";
        if ($result->read($_SESSION["email"]) == true) {
            $id = $mail->getId();
            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 "</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'); ?>

Donc quand je clique sur "modifier", je tombe sur un formulaire de modification où s'affiche l'email et le mot de passe à modifier 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["email"] = $_SESSION["email"];
$_POST["password"] = $_SESSION["password"];
$mail = new email($_POST["email"], $_POST["password"]);

?>

    <form action="traitementmodif.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'); ?>

Ensuite en appuyant sur le bouton "renvoyer", il modifie dans la session mais pas dans la base de données comme je l'ai dis précédent. Car l'id n'est pas récupéré. Dans tous les cas, voici la page qui est redirigé après avoir cliqué sur "renvoyer" :

<?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>";
            }

        }
        /*
            //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
        $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'); ?>

D'ou ma demande aujourd'hui, modifier l'email à la fois dans la session et dans la base de données. Pour cela, j'ai crée un entité email faisant référence à ma table email que voici :

<?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 mon manager effectuant mes requête en base de données. la méthode concerné par le problème est la méthode "update", les autres méthodes de mon EmailManager marchent bien et interagissent bien avec la base de données sauf la méthode "update". Voici mon 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 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 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($_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;
    }

    //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;
    }

}

Ce manager étend une class DatabaseAccess effectuant une connexion à la base de données que voici :

<?php
/**
 * Created by PhpStorm.
 * User: Honoré
 * Date: 13/05/2018
 * Time: 20:28
 */

namespace app;
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();
        }
    }
}

Et j'ai aussi un fichier déclarant des identifiants pour me connecter à ma base que voici :

<?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', '');

Pouvez-vous m'aider, ce serait cool ?
Cordialement

5 réponses


honomatopic
Auteur
Réponse acceptée

Bonsoir. J'ai décidé de modifier mon appplication actuel de gestion d'emails en gestion de personnes. Et j'ai aussi résolvé mon problème sur la méthode "update" de mon manager. En lisant quelques bouquins de PHP, en fait, dans mon formulaire de modification, j'ai récupéré l'id dans le résultat de la méthode read() sous la forme d'un tableau indexé. Et ce tableau je l'ai rentré dans la variable de session. Et cette variable de session est en argument de la méthode update().

Merci pour votre aide.

Bonsoir.
Alors, premier problème, tu as deux input dans ton formulaire qui ont le même name (id), ensuite par rapport à ce problème, dans le premier de ces deux inputs, tu définies un placeholder ce qui est totalement inutile puisque qu'un placeholder sert à afficher une valeur alors que ton champ est de type hidden, il ne s'affichera donc pas à la vue de l'utilisateur.
Toujours concernant cet input, ton formulaire permet de connecter un utilisateur, sauf que tu ne peux pas savoir quel est l'utilisateur qui va se connecter, avant d'avoir récupéré les données du formulaire et d'avoir fait une requête SQL avec ces données, quel est donc l'intérêt de cet input ?
Ensuite, toujours dans cette page, pourquoi est-ce que tu permets aux visiteurs d'accéder à la page pour ajouter un email ?
Car dans ta page de connexion, la personne qui y accède n'est pas connecté, tu ne devrais afficher ce lien que lorsque la personne est un utilisateur et par conséquent connecté.

En effet, le problème vient de l'id. En faisant un var_dump de ma session, la session ne récupère pas l'id de l'email et j'en ai besoin

C'est tout à fait normal étant donné que l'input concernant l'email est de type hidden et que tu ne lui défini aucune valeur, donc forcément quand tu fais $_SESSION["id"] = $_POST["id"];, tu lui définies une valeur vide à la clé id de la session.

Tu as d'autres erreurs encore, notamment niveau HTML que je voulais te faire prendre connaissance, mais il y en a trop pour que je les cite.

Oui j'ai vu qu'il y a pas mal d'erreur en HTML. Mais ma priorité c'est de savoir comment récupérer l'id de mon email. Ou comment récupére l'id de mon email. Et quel valeur, méthodes permet de récupérer l'id de la base de données.

Comme je te l'ai dit, tant que la personne n'a pas encore soumis le formulaire avec les données, tu ne peux pas l'identifier, donc avant de vouloir définir une valeur pour la clé id dans la session, il faut d'abord que tu puisses l'identifier via la base de données afin de récupérer l'information.
Ton problème, c'est que tu ordonnes mal tes conditions, au lieu de vouloir stocker des données dans la session et après seulement vérifier si les données du formulaire ont bien été transmises, tu devrais faire l'inverse.
D'ailleurs au passage, avec la fonction isset(), il est inutile de faire if (isset($mailpersonne) && isset($pass) && isset($_POST["envoyer"])) {, il te suffit de faire if (isset($mailpersonne, $pass, $_POST["envoyer"])) {, car en fait c'est la même chose, sauf que la deuxième manière est plus courte et si un jour tu veux ajouter/supprimer un argument, ça te fera moins d'ajout/suppression à faire.

Si plusieurs paramètres sont fournis, alors la fonction isset() retournera TRUE seulement si tous les paramètres sont définis. L'évaluation s'effectue de gauche vers la droite et s'arrête dès qu'une variable non définie est rencontrée (Source).

Par contre, la fonction isset permet de vérifier si une variable est définie et n'est pas NULL (ou plusieurs), par contre si sa valeur est vide la condition sera quand même correcte.
Donc pour commencer à régler ton problème, tu dois commencer par faire ta condition :

// Avant cette partie de code, inutile de vouloir sauvegarder des données dans la session
if (isset($_POST["envoyer"], $_POST["email"], $_POST["password"])) {
    if (/* autre condition pour les vérifications */) {
        // Ici tout est bon, tu définies des variables, essaies d'identifier l'utilisateur
        // Si tout est bon, et que tu as récupéré toutes les données qui te sont nécessaire, tu remplies des données dans la session
    }
} else {
    // Là pas bon du tout, définition d'un message pour l'utilisateur et tu le redirige vers la page de connexion
}

Voilà grosso-modo comment tu dois faire.

Bonjour. Comme tu me l'as dis @Lartak 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', '');