Editer le profile

Fermé
Christiana974 - 29 oct. 2021 à 10:02
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 29 oct. 2021 à 14:03
Bonjour, je n'arrive pas à modifier le profil où on se connecte. Par exemple lorsque je me connecte avec un compte A, et je me dirige vers modifier le profile, il affiche les donées du compte B/ de l'user le plus récent

Voici le code pour créer, se connecter, modifier un utilisateur model.php :

<?php 
    class model{

        private $server = "localhost";
        private $username = "root";
        private $password = "";
        private $db = "formation_db";
        private $conn;

        public function __construct()
        { 
            try {
                $this->conn = new mysqli(
                                $this->server, 
                                $this->username, 
                                $this->password,
                                $this->db 
                            );
        }   catch(Exception $e) 
        {
            echo "Erreur de connexion" . $e->getMessage();
        }
    }
function connexionUser(){
    session_start();
    if(isset($_POST['email']) && isset($_POST['userPassword'])) {
        $email = $_POST['email'];
        $userPassword = $_POST['userPassword'];

        if(empty($email)){
            header("Location: index.php?error=Email requis");
            exit();
        } else if(empty($userPassword)) {
            header("Location: index.php?error=Mot de passe requis");
            exit();
        } else {
            $query = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'";
            $sql = $this->conn->query($query);

            if(mysqli_num_rows($sql) === 1) {
                $row = mysqli_fetch_assoc($sql);
                if($row['email'] === $email && $row['userPassword'] === $userPassword) {
                            // SI l'admin se connecte
                    if($row['adminRole'] == 1) {
                        header("Location: admin/index_admin.php");
                        exit();
                    }else{
                        header("Location: demandeur/index_demandeur.php");
                    exit();
                    }
                    $_SESSION['email'] = $row['email'];
                    $_SESSION['nom'] = $row['nom'];
                    $_SESSION['prenom'] = $row['prenom'];
                    $_SESSION['userService'] = $row['userService'];
                    $_SESSION['userFonction'] = $row['userFonction'];
                    $_SESSION['userID'] = $row['userID'];
                    exit();
                }
                
                else {
                    header("Location: index.php?error=Email ou mot de passe incorrect.");
                    exit();
                }

               
            }
            else {
                header("Location: index.php?error=Email ou mot de passe incorrect.");
                exit();
            }
           
            
        }
    }
    if(isset($_POST['adminRole']) && $_POST['adminRole'] == 1) {
        header('Location: index_admin.php');
    }
    
}   

function registerUser(){
    session_start();
    if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])){
        $nom = $_POST['nom'];
        $prenom = $_POST['prenom'];
        $email = $_POST['email'];
        $userService = $_POST['userService'];
        $userFonction = $_POST['userFonction'];
        $adminRole = $_POST['adminRole'];
        $userPassword = $_POST['userPassword'];

        if(empty($nom)) {
            echo("Nom requis");
            exit();
        } else if(empty($email)) {
            echo("Adresse mail requis");
            exit();
        }
        else if(empty($userPassword)) {
            echo("Mot de passe requis");
            exit();
        }
        else {
            $verifyQuery = "SELECT * FROM users WHERE email = '$email'";
            
            $sql = $this->conn->query($verifyQuery);
            if(mysqli_num_rows($sql) === 1) {
                $row = mysqli_fetch_assoc($sql);
                if($row['email'] === $email) {
                    echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'>
                    <h5 style='text-align:center'>
                    <i class='fas fa-exclamation-triangle'></i>  <b>L'adresse mail ". $_POST['email']. " </q> a déjà été utilisé</b></h5>
                    <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a>
                    </div>";
                    exit();
                }
                else { 
                    $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')";
                    if($sql = $this->conn->query($insertQuery)) {
                    echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'>
                            <h5 style='text-align:center'>
                            <i class='fas fa-check-circle'></i>  <b><q>". $_POST['nom']. " ". $_POST['prennom']. "</q> a été ajouté</b></h5>
                            <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a>
                            </div> <br><br>"; 
                    } else {
                        echo "err";
                    }
                }
                
            }
            else { 
                $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')";
                if($sql = $this->conn->query($insertQuery)) {
                    echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'>
                            <h5 style='text-align:center'>
                            <i class='fas fa-check-circle'></i>  <b> <q>". $_POST['nom']. " ". $_POST['prenom']. " </q> a été ajouté</b></h5>
                            <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a>
                            </div>"; 
                }else {
                        echo "err";
                }
            }
        }

    }
}    
function edit(){
    $data = null;
    $query = "SELECT userID, nom, prenom, email, userService, userFonction FROM users WHERE userID = " . $_SESSION['userID'];
    if($sql = $this->conn->query($query)) {
        while($row = mysqli_fetch_assoc($sql)) {
            $data = $row;
        }
    }
    return $data;
}

function update($data) {
    $query = "UPDATE users SET nom = '$data[nom]' ,
                                prenom = '$data[prenom]' ,
                                email = '$data[email]' , 
                                userService = '$data[userService]' , 
                                userFonction = '$data[userFonction]' , 
                                userPassword = '$data[userPassword]'
                                WHERE userID = '$data[userID]'";
            if($sql = $this->conn->query($query)) {
                echo "<br><br><div class='card w-25 text-warning' style='padding:20px; margin:auto;'>
                            <h5 style='text-align:center'>
                            <i class='fas fa-check-circle'></i>  <b> Vos informations ont bien été modifié</b></h5>
                            <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour vers la page d'accueil pour rafraichir</a>
                            </div>";
            } else {
                echo "<br><br>
                <div class='card w-25 text-danger' style='padding:20px; margin:auto;'>
                    <h5 style='text-align:center'>
                    <i class='fas fa-exclamation-triangle'></i>  <b>Vos données n'ont pas pu être modifiées</b></h5>
                    <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a>
                </div>";
            }
        
    
}

function viewProfile(){
    $data = null;
    $query = "SELECT * FROM users WHERE userID = " . $_SESSION['userID'];
    if($sql = $this->conn->query($query)) {
        while($row = mysqli_fetch_assoc($sql)){
            $data = $row;
        }
    }
    return $data;
}

}


?>


Et ce code qui permet d'aller vers la page de modif depuis la barre de nav :

<?php 
session_start();

include '../model/model.php';   
$model = new model;
$row = $model->viewProfile();


?>

<a style="text-decoration:none;color:white" href="../demandeur/editProfile.php?editUser=<?php echo $row['userID'];?>" class="header__navbar--menu-link">Mon compte</a>


Et editProfile.php :
<?php 
    include '../demandeur/header_demandeur.php';  
    $model = new model;
    $id = $_REQUEST['editUser'];
    $row = $model->edit();


    if(isset($_POST['update'])) {
        if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['userPassword'])) {
            $data['nom'] = $_POST['nom'];
            $data['prenom'] = $_POST['prenom'];
            $data['userService'] = $_POST['userService'];
            $data['userFonction'] = $_POST['userFonction'];
            $data['email'] = $_POST['email'];
            $data['userPassword'] = $_POST['userPassword'];
        
            $update = $model->update($data);        
        } 
        else {
            echo "<br><br>
                <div class='card w-25 text-danger' style='padding:20px; margin:auto;'>
                    <h5 style='text-align:center'>
                    <i class='fas fa-exclamation-triangle'></i>  <b>Vos données n'ont pas pu être modifiées</b></h5>
                    <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a>
                    </div>";
        }
    } 
?>

<?php
if(!empty($row)) { ?>

<div class="container-fluid">
    <h1 class="text-warning" style="text-align: center;margin-top:50px">Mon compte</h1>
        <div class="card" style="margin-top:50px;margin-bottom:50px; width:500px;margin-left:auto;margin-right:auto">
            <h3 style="text-align:center;margin-top:30px">Mes informations personnelles</h3>
            <div class="card-body" style="margin-top:20px">
                <form action="" method="post">
                    <div class="row">
                        <div class="col">
                            <div class="form-floating mb-3">
                                <input name="nom" type="text" class="form-control" id="floatingInput" required value="<?php echo $row['nom'];?>">
                                <label for="floatingInput">Nom</label>
                            </div>
                        </div>
                        <div class="col">
                            <div class="form-floating mb-3">
                                <input name="prenom" type="text" class="form-control" id="floatingInput" required value="<?php echo $row['prenom'];?>">
                                <label for="floatingInput">Prénom</label>
                            </div>
                        </div>
                    </div>

                    <div class="form-floating mb-3">
                        <input name="email" type="email" class="form-control" id="floatingInput" required value="<?php echo $row['email'];?>">
                        <label for="floatingInput">Adresse mail</label>
                    </div>

                    <div class="form-floating mb-3">
                        <input name="userService" type="text" class="form-control" id="floatingInput" required value="<?php echo $row['userService'];?>">
                        <label for="floatingInput">Service/Lieu</label>
                    </div>

                    <div class="form-floating mb-3">
                        <input name="userFonction" type="text" class="form-control" id="floatingInput" required value="<?php echo $row['userFonction'];?>">
                        <label for="floatingInput">Fonction</label>
                    </div>

                    <div class="form-floating mb-3">
                        <input name="userPassword" type="password" class="form-control" id="floatingInput" required>
                        <label for="floatingInput">Mot de passe</label>
                    </div>

                    <button type="submit" name="update" class="btn btn-warning" onclick="return confirm('Voulez-vous mettre à jour vos donées?')"
                    style="color:white">Modifier</button>
                </form>                
            </div>


        </div>
    </div>
</div>

<?php 
}
?>
A voir également:

3 réponses

yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 Ambassadeur 1 556
29 oct. 2021 à 11:35
bonjour,
la première chose à faire, je pense, est d'ajouter
session_start();
au début de la page
editProfile.php
.
0
Christiana974
29 oct. 2021 à 11:51
Il me dit que je l'ai déjà appelé dans la page header vu que le header j'ai inclut dans la page editProfile.php
0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > Christiana974
29 oct. 2021 à 11:55
Quel est précisément le message d'erreur?
Nous as-tu montré la page header_demandeur.php?
Merci d'indiquer le nom de chaque page dont tu nous montres le contenu.
0
Christiana974 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
29 oct. 2021 à 11:58
Header.php :
<?php 
session_start();

include '../model/model.php';   
$model = new model;
$row = $model->viewProfile();


?>

<html lang="fr">
    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Form&nou - Navigation</title>
        <!-- CSS only -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        <link href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css'>
        <script src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js'></script>
        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
        <script src="https://kit.fontawesome.com/6c1ecc43dd.js" crossorigin="anonymous"></script>
        <link rel="stylesheet" href="../Public/css/style.css">
        <link rel="stylesheet" href="../Public/css/style_admin.css">
        <link rel="stylesheet" href="../Public/css/header.css">
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">

        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400&display=swap" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500&display=swap" rel="stylesheet">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://cdn.jsdelivr.net/momentjs/2.14.1/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js">
        <link rel="stylesheet" href="../fonts/icomoon/style.css">
        <link rel="stylesheet" href="../Public/css/rome.css">
        <link rel="shortcut icon" type="image/png" href="../Public/img/bg.png"/>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker.min.css">

    </head>

    <!-- Header -->
        <div class="header__otherpage">
            <div class="header__texture"></div>
            <div class="container__1">
                <div class="header__navbar">
                    <div class="header__navbar--logo">
                        <a style="text-decoration:none" href="../demandeur/apropos_demandeur.php" class="header__navbar--logo-title">Form&Nou</a>
                    </div>
                    <div class="header__navbar--menu">
                        <a style="text-decoration:none;color:white" href="../demandeur/index_demandeur.php" class="header__navbar--menu-link"><i class="fas fa-home"></i> Accueil</a>
                        <a style="text-decoration:none;color:white" href="../demandeur/seFormer.php" class="header__navbar--menu-link">Se Former</a>
                        <a style="text-decoration:none;color:white" href="../demandeur/contact.php" class="header__navbar--menu-link">Contact</a>
                        <a style="text-decoration:none;color:white" href="../demandeur/editProfile.php?editUser=<?php echo $row[0]['userID'];?>" class="header__navbar--menu-link">Mon compte</a>
                        <a style="text-decoration:none;color:white" href="../logout.php" class="header__navbar--menu-link">Déconnexion</a>
                        
                    </div>

                    <div class="header__navbar-toggle">
                        <span class="header__navbar-toggle-icons"></span> 
                    </div>
                </div>

            </div>

        </div>
</html>



Voici le message d'erreur :
Notice: session_start(): A session had already been started - ignoring in D:\wamp\wamp64\www\Projet formation\demandeur\header_demandeur.php on line 2
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > Christiana974
29 oct. 2021 à 12:26
Ton fichier Header.php ... si il est INCLUS dans le fichier header_demandeur.php ... en effet .. il ne faut pas remettre le session_start...
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
29 oct. 2021 à 12:22
Bonjour,

Pour accéder à la page d'édition tu passes par un lien
<a style="text-decoration:none;color:white" href="../demandeur/editProfile.php?editUser=<?php echo $row['userID'];?>" 

lien qui contient l'id du user à éditer dans la variable $_GET['editUser']

Sauf que, dans ton code ... tu vas chercher l'utilisateur en fonction de la variable que tu as mis en SESSION

0
Christiana974
29 oct. 2021 à 12:35
Comme ceci? editProfile.php :
<?php 

    include '../demandeur/header_demandeur.php';  
    $model = new model;
    $id = $_GET['editUser'];
    $row = $model->edit($id);


    if(isset($_POST['update'])) {
        if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['userPassword'])) {
            $data['nom'] = $_POST['nom'];
            $data['prenom'] = $_POST['prenom'];
            $data['userService'] = $_POST['userService'];
            $data['userFonction'] = $_POST['userFonction'];
            $data['email'] = $_POST['email'];
            $data['userPassword'] = $_POST['userPassword'];
        
            $update = $model->update($data, $id);        
        } 
        else {
            echo "<br><br>
                <div class='card w-25 text-danger' style='padding:20px; margin:auto;'>
                    <h5 style='text-align:center'>
                    <i class='fas fa-exclamation-triangle'></i>  <b>Vos données n'ont pas pu être modifiées</b></h5>
                    <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a>
                    </div>";
        }
    } 
?>
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
29 oct. 2021 à 12:43
Oui
Mais il faut également modifier ta fonction edit en conséquence
0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556
29 oct. 2021 à 12:55
Ne serait-il pas préférable d'utiliser partout la session, au lieu de faire confiance au GET?
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
29 oct. 2021 à 13:13
La session c'est pour éditer l'utilisateur en cours.
Si par contre, c'est pour éditer un utilisateur autre en tant qu'administrateur par exemple, là tu peux passer par le get
0
Christiana974 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
29 oct. 2021 à 13:52
Du coup dans mon editProfile.php je remplace REQUEST par GET?:
    include '../demandeur/header_demandeur.php';  
$model = new model;
$id = $_GET['editUser'];
$row = $model->edit($id);
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > Christiana974
29 oct. 2021 à 14:03
Tu veux éditer l'utilisateur qui est connecté ou un autre utilisateur ?
Il faudrait déjà qu'on sache ça...
0