Modifier seulement un champ email dans un formulaire.

Résolu
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 3 oct. 2023 à 18:13
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 11 oct. 2023 à 14:55

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

A voir également:

5 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 oct. 2023 à 18:42

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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 oct. 2023 à 18:44

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

0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
8 oct. 2023 à 14:19

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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 oct. 2023 à 15:47

Bonjour

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


0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
Modifié le 8 oct. 2023 à 16:01
<?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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
9 oct. 2023 à 11:27

Active l'affichage des erreurs PHP 

https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

et désactive ( le temps des tests) toutes les redirections 

header('Location .... 

et les éventuels  return false;  ( qui ne servent à rien si ils ne sont pas dans des fonctions de toutes façons !! )

0

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

Posez votre question
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
11 oct. 2023 à 14:55

Merci pour les réponses.

0