Mise à jour d'un email en base de données

Résolu/Fermé
Utilisateur anonyme - 7 juin 2018 à 22:16
 Utilisateur anonyme - 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.
A voir également:

5 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
7 juin 2018 à 22:54
0
Utilisateur anonyme
8 juin 2018 à 09:33
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.
0
Utilisateur anonyme
8 juin 2018 à 19:15
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é ?
0
Utilisateur anonyme
9 juin 2018 à 19:24
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.
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
9 juin 2018 à 19:55
la méthode update ne devrait-elle pas recevoir en paramètres l'ancien et le nouveau email?
0
Utilisateur anonyme
9 juin 2018 à 20:16
Normalement c'est l'ancien email et ensuite on applique la méthode qui modifie l'ancien email dans la requete UPDATE nom_table SET nom_colonne = nouvelle_valeur_de_lemail WHERE condition. Pour la condition, je prends id de l'email.
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Utilisateur anonyme
9 juin 2018 à 21:18
"normalement", tu fais certaines chose, et, en réalité, tu en fais d'autres:
moi je lis ceci:
UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE emailpersonne =:emailpersonne

je trouve que tes noms $email et $emailpersonne sont très confus: quel est l'ancien email, quel est le nouvel email?
0
Utilisateur anonyme
Modifié le 9 juin 2018 à 21:27
Où tu vois dans ma méthode "update" un variable $email ? email correspond au nom de la table et $emailpersonne c'est l'email qui est sur le point de changer qui est en argument dans la méthode. Quand je fais appel à cette méthode et que je mets en argument $_POST["email"], il doit me changer le contenu. Mais si tu veux plus de clarté, j'ai modifié entre temps ma méthode "update" la voici :
    //Méthode permettant de mettre à jour un email
    public function update($emailpersonne, $password)
    {
        $mail = new email($_POST["email"], $_POST["password"]);
        $sql = $this->pdo->prepare('UPDATE email SET emailpersonne=:emailpersonne, password=:password WHERE idemail =:idemail');
        $resultat = $sql->execute(array(":emailpersonne" => $emailpersonne, ":password" => $password, ":idemail"=>$mail->getId()));
        $sql->closeCursor();
        return $resultat;
    }


Il y a un variable $mail par contre qui construit l'objet email par contre.
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Utilisateur anonyme
9 juin 2018 à 22:10
je vois une variable $email en ligne 61 du post #4. y vois-tu autre chose?
je trouve que tes noms $mail et $emailpersonne sont très confus: quel est l'ancien email, quel est le nouvel email?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
12 juin 2018 à 22:22
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.
0