Modifier seulement un champ email dans un formulaire.

Résolu
ameb2908 Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   -  
ameb2908 Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour, j'aimerais seulement modifier une valeur d'un champ email, malheureusement çà coince & j'ai même pas les messages d'erreurs.

Voici mon code :

class/Utilisateur.php

<?php

class Utilisateur {
    protected $id;
    protected $pseudo;
    protected $mail;
    protected $mdp;

    protected static $error;

    const MSG_ERROR_ID   = 'ID doit être un entier.';
    const MSG_ERROR_PSEUDO = 'PSEUDO doit être une chaîne de caractères.';
    const MSG_ERROR_MAIL = 'MAIL doit être une chaîne de caractères.';
    const MSG_ERROR_MDP   = 'MDP doit être une chaîne de caractères.';
    const MSG_ERROR_END = 'L\'objet ne peut pas être créé';

    public function __construct(array $data) {
        $this->setId($data['id']);
        $this->setPseudo($data['pseudo']);
        $this->setMail($data['mail']);
        $this->setMdp($data['mdp']);

        if(!empty(self::$error)) {
            throw new Exception(self::$error . self::MSG_ERROR_END);
        }
    }

    public function setError($msg) {
        self::$error = $msg;
    }

    public function getError() {
        return self::$error;
    }

    public function setId($id) {

        if((is_int($id)) AND ($id > 0)) {
            $this->id = $id;
        }
        else {
            $this->setError(self::MSG_ERROR_ID);
        }
    }

    public function setPseudo($pseudo) {

        if(is_string($pseudo)) {
            $this->pseudo = $pseudo;
        }
        else {
            $this->setError(self::MSG_ERROR_PSEUDO);
        }
    }

    public function setMail($mail) {

        if(is_string($mail)) {
            $this->mail = $mail;
        }
        else {
            $this->setError(self::MSG_ERROR_MAIL);
        }
    }

    public function setMdp($mdp) {

        if(is_string($mdp)) {
            $this->mdp = $mdp;
        }
        else {
            $this->setError(self::MSG_ERROR_MDP);
        }
    }

    public function getId() {
        return $this->id;
    }

    public function getPseudo() {
        return $this->pseudo;
    }

    public function getMail() {
        return $this->mail;
    }

    public function getMdp() {
        return $this->mdp;
    }
}

class Breve extends Utilisateur {
    const PSEUDO = NULL;
    const MDP = NULL;
    
    public function __construct(array $data) {
        $this->setId($data['id']);
        $this->setMail($data['mail']);

        if(!empty(parent::$error)) {
            throw new Exception(parent::$error . parent::MSG_ERROR_END);
        }
    }

    public function setPseudo($pseudo) {
        $this->pseudo = self::PSEUDO;
    }

    public function setMdp($mdp) {
        $this->mdp = self::MDP;
    }
}

class/utilisateurManager.php

<?php

class utilisateurManager {
    private $_db;
 
    public function __construct($db) {
        $this->setDb($db);
    }

    public function setDb(PDO $dbh) {
        $this->_db = $dbh;
    }
    
    public function updateUserData(Breve $user) {
        try {
            $sql = 'UPDATE utilisateur SET mail = :mail WHERE id = :id';
            
            $rs_update = $this->_db->prepare($sql);
            
            $id = $user->getId();
            $mail = $user->getMail();
            
            $rs_update->bindParam(':id', $id);
            $rs_update->bindParam(':mail', $mail);

            $rs_update->execute();
        }
        catch(PDOException $e) {
            echo 'Une erreur est survenue lors de la requête de mise à jour !';
            echo '<br>';
            echo 'Message d\'erreur : ' . $e->getMessage();
        }
    }

    public function readUserMail($mail) {
        try {
            $sql = 'SELECT id, mail FROM utilisateur WHERE mail = :mail';
            
            $rs_select = $this->_db->prepare($sql);
            
            $rs_select->execute(array(
                ':mail' => $mail
            ));
            
            $count = $rs_select->rowCount();

            if($count > 0) {
                return true;
            }
            else {
                return false;
            }
        }
        catch(PDOException $e) {
            echo 'Une erreur est survenue lors de la requête de sélection !';
            echo '<br>';
            echo 'Message d\'erreur : ' . $e->getMessage();
        }
    }

    public function readUserData($id) {
        try {
            $sql = 'SELECT id, pseudo, mail, date_creation, date_connexion, role FROM utilisateur WHERE id = :id';
            
            $rs_select = $this->_db->prepare($sql);
            
            $rs_select->execute(array(
				':id' => $id
			));
			
			$user_data = $rs_select->fetch(PDO::FETCH_ASSOC);
			
			if(isset($user_data)) {
				
				return $user_data;
			}
			else {
				
				return false;
			}
        }
        catch(PDOException $e) {
            echo 'Une erreur est survenue lors de la requête de sélection !';
            echo '<br>';
            echo 'Message d\'erreur : ' . $e->getMessage();
        }
    }
}

process/process-update-profil.php

<?php
session_start();

if(!isset($_SESSION['id'])) {
    header('Location: index.php');
	exit;
}

$manager = new utilisateurManager($db);
$user_mail = $manager->readUserData($_SESSION['id']);

$mail = $user_mail['mail'];

$regex_mail = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-z]{2,3}$/';

if(isset($_POST['submit_form'])) {
    $mail = trim($mail);

    if($mail == $_SESSION['mail_form']) {
        return false;
    }
    elseif(empty($mail)) {
        $error_mail = '<p class="error_msg">Ce champ ne peut pas être vide !</p>';
    }
    elseif(!preg_match($regex_mail, $mail)) {
        $error_mail = '<p class="error_msg">Format invalide pour ce mail !</p>';
    }
    elseif($manager->readUserMail($mail)) {
        $error_mail = '<p class="error_msg">Ce mail est déjà pris !</p>';
    }
    else {
        $current_user = $mail;

        $new_content = array('id' => (int) $current_user['id'], /*'pseudo' => $current_user['pseudo'], */'mail' => $current_user['mail']/*, 'mdp' => $current_user['mdp']*/);
 
        $user_to_update = new Breve($new_content);
 
        $user_to_update->setId($_SESSION['id']);
        $user_to_update->setMail($mail);
 
        if($manager->updateUserData($user_to_update)) {
            $error_mail = '<p class="success_msg">La mise à jour du mail ' . $mail . ' est effectuée.</p>';

            $_SESSION['mail_form'] = $mail;

            header('Location: modifier-profil.php');
            exit;
        }
        else {
            $error_mail = '<p class="error_msg">La mise à jour du mail ' . $mail . ' n\'est pas effectuée.</p>';
        }
    }
}

profil/modifier-profil.php

<?php

require('../include/inc-connexion.php');
require('../class/Utilisateur.php');
require('../class/utilisateurManager.php');
require('../process/process-update-profil.php');

?>

<!doctype html>
<html lang="fr">
<head>
    <title>Modifier mon compte</title>
    <meta charset="utf-8">
    <?php require('include/inc-meta.php'); ?>
    <?php require('include/inc-link.php'); ?>
</head>
<body>
    <?php require('../include/inc-menu.php'); ?>
    <div class="container">
        <div class="row">
            <div class="col-3"></div>
            <div class="col-6">
                <h1>Modifier mes informations</h1>
                <form method="post">
                    <div class="mb-3">
                        <input type="email" class="form-control" name="mail_form"
                        value="<?php echo $mail; ?>" placeholder="Mail">
                    </div>
                    <?php if(isset($error_mail)) echo $error_mail ?>
                    <div class="mb-3">
                        <input type="submit" class="btn btn-primary" name="submit_form"
                        value="Modifier">
                    </div>
                </form>
                <br>
                <form method="post">
                    <div class="mb-3">
                        <input type="password" class="form-control" name="pass_form"
                        value="" placeholder="Mot de passe actuel">
                    </div>
                    <div class="mb-3">
                        <input type="password" class="form-control" name="new_pass_form"
                        value="" placeholder="Nouveau mot de passe">
                    </div>
                    <div class="mb-3">
                        <input type="password" class="form-control" name="confirm_pass_form"
                        value="" placeholder="Confirmation du mot de passe">
                    </div>
                    <div class="mb-3">
                        <input type="submit" class="btn btn-primary" name="submit_form_two"
                        value="Modifier">
                    </div>
                </form>
            </div>
        </div>
    </div>
    <?php require('../include/inc-footer.php'); ?>

include/inc-connexion.php

<?php
$host = 'mysql:host=localhost; charset=utf8mb4; dbname=site2';
$user = 'root';
$pass = 'ameb@2908';

try { 
    $db = new PDO($host, $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
    echo 'Une erreur est survenue lors de la connexion ' . $e->getMessage();
}

Merci pour votre aide.
Windows / Chrome 117.0.0.0

5 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    Bonjour,

    Tu veux modifier quel champ ? avec quelle(s) ligne(s) de code exactement ? ( la flemme de tout lire pour essayer de deviner ce que tu veux faire ! )


    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      Et à quel moment lis tu ce qui est envoyé par ton formulaire ( les variables $_POST ?  )

      0
  2. ameb2908 Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   1
     

    Bonjour, je reviens vers toi Jordan, malheureusement j'ai du m'absenter.

    Entretemps, j'ai travailler sur le sujet, le champ Mail se met bien à jour mais j'ai pas les messages de succès ou d'erreurs.

    Voici mon code :

    process/process-update-profil.php

    <?php
    
    $regex_mail = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-z]{2,3}$/';
    
    $manager = new utilisateurManager($db);
    
    if(isset($_POST['submit_form'])) {
        $mail_form = trim($_POST['mail_form']);
    
        if($mail_form == $_SESSION['mail_form']) {
            return false;
        }
        elseif(empty($mail_form)) {
            $error_mail = '<p class="error_msg">Ce champ ne peut pas être vide !</p>';
        }
        elseif(!preg_match($regex_mail, $mail_form)) {
            $error_mail = '<p class="error_msg">Format invalide pour ce mail !</p>';
        }
        elseif($manager->readUserMail($mail_form)) {
            $error_mail = '<p class="error_msg">Ce mail est déjà pris !</p>';
        }
        else {
            $current_user = $manager->readUserData($_SESSION['id']);
    
            $new_content = array('id' => (int) $current_user['id'],
                                 'pseudo' => $current_user['pseudo'],
                                 'mail' => $current_user['mail'],
                                 'mdp' => $current_user['mdp']);
     
            $user_to_update = new Utilisateur($new_content);
     
            $user_to_update->setId($_SESSION['id']);
            $user_to_update->setMail($mail_form);
     
            if(!$manager->updateUserData($user_to_update)) {
                $error_mail = '<p class="success_msg">La mise à jour du mail ' . $mail_form . ' n\'est pas effectuée.</p>';
    
                $_SESSION['mail_form'] = $mail_form;
    
                header('Location: modifier-profil.php');
                exit;
            }
            else {
                $error_mail = '<p class="error_msg">La mise à jour du mail ' . $mail_form . ' est effectuée.</p>';
            }
        }
    }
    
    0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    Bonjour

    Et tu fais un écho de ta variable error_mail quelque part ?


    0
  4. ameb2908 Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   1
     
    <?php
    session_start();
    
    require('../include/inc-connexion.php');
    require('../include/inc-config.php');
    require('../class/Utilisateur.php');
    require('../class/utilisateurManager.php');
    require('../process/process-update-profil.php');
    
    if(!isset($_SESSION['id'])) {
        header('Location: index.php');
    	exit;
    }
    
    $manager = new utilisateurManager($db);
    $user_mail = $manager->readUserData($_SESSION['id']);
    
    $mail = $user_mail['mail'];
    
    }
    ?>
    <!doctype html>
    <html lang="fr">
    <head>
        <title>Modifier mon compte</title>
        <?php require('../include/inc-meta.php'); ?>
        <?php require('../include/inc-link.php'); ?>
    </head>
    <body>
        <?php require('../include/inc-menu.php'); ?>
        <div class="container">
            <div class="row">
                <div class="col-3"></div>
                <div class="col-6">
                    <h1>Modifier mes informations</h1>
                    <form method="post">
                        <div class="mb-3">
                            <input type="email" class="form-control" name="mail_form"
                            value="<?php echo $mail; ?>" placeholder="Mail">
                        </div>
                        <?php if(isset($error_mail)) echo $error_mail ?>
                        <div class="mb-3">
                            <input type="submit" class="btn btn-primary" name="submit_form"
                            value="Modifier">
                        </div>
                    </form>
                    <br>
                    <form method="post">
                        <div class="mb-3">
                            <input type="password" class="form-control" name="pass_form"
                            value="" placeholder="Mot de passe actuel">
                        </div>
                        <div class="mb-3">
                            <input type="password" class="form-control" name="new_pass_form"
                            value="" placeholder="Nouveau mot de passe">
                        </div>
                        <div class="mb-3">
                            <input type="password" class="form-control" name="confirm_pass_form"
                            value="" placeholder="Confirmation du mot de passe">
                        </div>
                        <div class="mb-3">
                            <input type="submit" class="btn btn-primary" name="submit_form_two"
                            value="Modifier">
                        </div>
                    </form>
                </div>
            </div>
        </div>
        <?php require('../include/inc-footer.php'); ?>
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ameb2908 Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   1
     

    Merci pour les réponses.

    0