[EDITION PROFIL] Besoin d'aide pour ma page d'édition de profil

Valfunde

Valfunde Le 3 août 2016 à 16:49 (Édité le 25 janvier 2019 à 17:52)

Bonjour  !

Comme j'ai besoin d'un espace membre pour mon site, j'ai suivi CE TUTO, mais j'ai un petit problème.

Imaginons que j'ai 2 membres   ( Valfunde & Valfunde1)
avec comme mail  : Valfunde -> valfunde@valfunde.fr
: Valfunde1->valfunde1@valfunde.fr

Et si je suis connecté en tant que Valfunde et que je veux modifier mon profil pour changer mon pseudo en tant que Valfunde1, sa me met aucune erreur et donc j'ai 2 utilisateurs nommé Valfunde1, même problème avec le mail, il faudrait donc que si je veux modifier mon profil, je puisse saisir une adresse mail et pseudo qui n'on jamais été utlisé.

Images de la bdd :

Avant l'édition du  profil :


Après l'édition du profil :


Et voici mon code :  
CODE 

Merci beaucoup de votre aide.
A bientôt !
TheFlameflo

TheFlameflo Le 3 août 2016 à 17:23

Salut !

Tu dois sûrement avoir le script de l'inscription quelque part.
Si on regarde bien, il y a une requête qui cherche tous les membres avec le pseudo qu'on donne à l'inscription, qu'il y a ensuite un rowCount() et on teste le retour du rowCount pour savoir s'il équivaut à 0 (donc, il n'y a personne avec le pseudo ou l'email) ou s'il équivaut à un et que quelqu'un a déjà le pseudo ou l'email.
Ça ressemble à ceci pour le pseudo:
                $reqpseudo = $bdd->prepare('SELECT * FROM espace_membre WHERE pseudo = ?');
                $reqpseudo->execute(array($pseudo));
                $pseudoexist = $reqpseudo->rowCount();

Personnellement, le code après la connexion à la BDD et le session_start est celui-ci :
if(isset($_SESSION['id']))
{
    $requser = $bdd->prepare('SELECT * FROM espace_membre WHERE id = ?');
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();
    
    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo'])
        {   
            $newpseudo = htmlspecialchars($_POST['newpseudo']);
            $pseudolength = strlen($newpseudo);
            if($pseudolength <= 255)
            {
                $reqpseudo = $bdd->prepare('SELECT * FROM espace_membre WHERE pseudo = ?');
                $reqpseudo->execute(array($pseudo));
                $pseudoexist = $reqpseudo->rowCount();
                        
                if($pseudoexist == 0)
                {
                $insertpseudo = $bdd->prepare('UPDATE espace_membre SET pseudo = ? WHERE id = ?');
                $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Ce pseudo est déjà pris .";
                }
            }
            else
            {
                $msg = "Votre pseudo ne doit pas dépasser 255 caractères.";
            }
        }
    
        if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);
            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $reqmail = $bdd->prepare('SELECT * FROM espace_membre WHERE mail = ?');
                $reqmail->execute(array($newmail));
                $mailexist = $reqmail->rowCount();
                if($mailexist == 0)
                {
                $insertmail = $bdd->prepare('UPDATE espace_membre SET mail = ? WHERE id = ?');
                $insertmail->execute(array($newmail, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Cette adresse mail est déjà utilisée !";
                }
            }
            else
            {
            $msg = "Votre email n'est pas valide.";    
            }
        }
    
            if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2']))
            {
                $mdp1 = sha1($_POST['newmdp1']);
                $mdp2 = sha2($_POST['newmdp2']);
                    if($mdp1 == $mdp2)
                    {
                        $insertmdp = $bdd->prepare("UPDATE espace_membre SET motdepasse = ? WHERE id = ?");
                        $insertmdp->execute(array($mdp1, $_SESSION['id']));
                        header('Location: profil.php?id='.$_SESSION['id']);
                    }
                    else
                    {
                    $msg = "Vos deux mots de passe ne correspondent pas !";
                    }
            }
                if(isset($_POST['newpseudo']) AND $_POST['newpseudo'] == $user['pseudo'])
               {
               header('Location: profil.php?id='.$_SESSION['id']);

               }
Je t'invite à lire les parties où j'utilise $pseudoexist et $mailexist ! 😀

Bonne chance  et j'espère t'avoir aidé ! 😀
Valfunde

Valfunde Le 3 août 2016 à 17:53

Ok, merci je vais regarder sa dès que je peux, mais ce que je ne comprend pas, c'est pourquoi mon code ne marche pas , alors que  j'ai bien mis le code pour check si il y a pas 2 fois le même nom ou mail xD
TheFlameflo

TheFlameflo Le 3 août 2016 à 18:25 (Édité le 3 août 2016 à 18:26)

Salut !

Peux-tu me montrer la vérification dans ton code, peut-être qu'il y a une erreur ?

EDIT : Si tu as pris directement dans mon code, penses à changer le nom des tables ! 😀
Valfunde

Valfunde Le 3 août 2016 à 19:33 (Édité le 3 août 2016 à 19:34)

if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
     $newpseudo = htmlspecialchars($_POST['newpseudo']);
      $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
      $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
Valfunde

Valfunde Le 3 août 2016 à 19:34

C'est pas sa la verification ? : 
if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
      $newpseudo = htmlspecialchars($_POST['newpseudo']);
      $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
      $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
TheFlameflo

TheFlameflo Le 3 août 2016 à 21:29

Je ne pense pas que c'est suffisant.
Tu testes uniquement si le pseudo du membre actuel (qui change ses informations) est le même que celui envoyé.
Donc, il peut prendre le pseudo de n'importe qui.
Valfunde

Valfunde Le 3 août 2016 à 21:32

Ha ok.
Valfunde

Valfunde Le 3 août 2016 à 22:43

J'ai pris ton code pour test, mais maintenant, il n'y a plus rien qui se change sur mon profil...
Voici le code  :
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']))
{
    $requser = $bdd->prepare('SELECT * FROM espace_membre WHERE id = ?');
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();
    
    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo'])
        {   
            $newpseudo = htmlspecialchars($_POST['newpseudo']);
            $pseudolength = strlen($newpseudo);
            if($pseudolength <= 255)
            {
                $reqpseudo = $bdd->prepare('SELECT * FROM espace_membre WHERE pseudo = ?');
                $reqpseudo->execute(array($pseudo));
                $pseudoexist = $reqpseudo->rowCount();
                        
                if($pseudoexist == 0)
                {
                $insertpseudo = $bdd->prepare('UPDATE espace_membre SET pseudo = ? WHERE id = ?');
                $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Ce pseudo est déjà pris .";
                }
            }
            else
            {
                $msg = "Votre pseudo ne doit pas dépasser 255 caractères.";
            }
        }
    
        if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);
            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $reqmail = $bdd->prepare('SELECT * FROM espace_membre WHERE mail = ?');
                $reqmail->execute(array($newmail));
                $mailexist = $reqmail->rowCount();
                if($mailexist == 0)
                {
                $insertmail = $bdd->prepare('UPDATE espace_membre SET mail = ? WHERE id = ?');
                $insertmail->execute(array($newmail, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Cette adresse mail est déjà utilisée !";
                }
            }
            else
            {
            $msg = "Votre email n'est pas valide.";    
            }
        }
    
            if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2']))
            {
                $mdp1 = sha1($_POST['newmdp1']);
                $mdp2 = sha2($_POST['newmdp2']);
                    if($mdp1 == $mdp2)
                    {
                        $insertmdp = $bdd->prepare("UPDATE espace_membre SET motdepasse = ? WHERE id = ?");
                        $insertmdp->execute(array($mdp1, $_SESSION['id']));
                        header('Location: profil.php?id='.$_SESSION['id']);
                    }
                    else
                    {
                    $msg = "Vos deux mots de passe ne correspondent pas !";
                    }
            }
                if(isset($_POST['newpseudo']) AND $_POST['newpseudo'] == $user['pseudo'])
               {
               header('Location: profil.php?id='.$_SESSION['id']);
               }
?>
<html>
   <head>
      <title>TUTO PHP</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Edition de mon profil</h2>
         <div align="center">
            <form method="POST" action="" enctype="multipart/form-data">
               <label>Pseudo :</label>
               <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br />
               <label>Mail :</label>
               <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br />
               <label>Mot de passe :</label>
               <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br />
               <label>Confirmation - Mot de passe :</label>
               <input type="password" name="newmdp2" placeholder="Confirmation du MDP" /><br /><br />
               <input type="submit" value="Mettre à jour mon profil !" />
            </form>
            <?php if(isset($msg)) { echo $msg; } ?>
         </div>
      </div>
   </body>
</html>
<?php   
}
else 
{
   header("Location: connexion.php");
}
?>
TheFlameflo

TheFlameflo Le 3 août 2016 à 23:30

J'ai vu plus haut que le nom de ta table est membres, quand je parlais d'adpater le nom des tables, il fallait mettre le nom de tes tables ! 😀

Donc, dans le code (pas la connexion à la BDD), tu dois remplacer le nom de ma table (espace_membre) par le nom de la tienne (membres, je crois).

Bonne chance ! 😀
Valfunde

Valfunde Le 4 août 2016 à 11:23

tu dois remplacer le nom de ma table (espace_membre) par le nom de la tienne (membres, je crois). 
Oui, c'est ce que j'ai fais quand j'ai adapté mon code mais c'est a ce moment que sa me sort une erreur du futur  : 

Alors que voici ma bdd :


:'(
TheFlameflo

TheFlameflo Le 4 août 2016 à 16:28

On me donne ici une erreur concernant la bdd et non la table.

Lors de ta connexion avec PDO, tu dois renseigner le nom de ta base, ici espace_membre, comme ceci :
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
Cependant, lors des requêtes, tu dois renseigner la tables, qui est membres, donc une requête se présente comme suit :
$insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
J'espère que le problème se réglera ! 😀
Valfunde

Valfunde Le 6 août 2016 à 15:39

Ha ouai, j'ai carrément pas fait gaffe a la liaison de ma bdd
Valfunde

Valfunde Le 6 août 2016 à 16:09

Effectivement, sa marche, mais j'ai encore des problemes 😋 Alors : Je peux toujours mettre le même pseudo sur plusieurs comptes en éditant le profile malgres cette verification :
 $newpseudo = htmlspecialchars($_POST['newpseudo']);
            $pseudolength = strlen($newpseudo);
            if($pseudolength <= 255)
            {
                $reqpseudo = $bdd->prepare('SELECT * FROM membres WHERE pseudo = ?');
                $reqpseudo->execute(array($pseudo));
                $pseudoexist = $reqpseudo->rowCount();
                        
                if($pseudoexist == 0)
                {
                $insertpseudo = $bdd->prepare('UPDATE membres SET pseudo = ? WHERE id = ?');
                $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Ce pseudo est déjà pris .";
                }
Je ne peux plus mettre 2 fois la même adresse mail sur 2 comptes, mais j'ai pas le message d'erreur, malgré sa : 
                if($mailexist == 0)
                {
                $insertmail = $bdd->prepare('UPDATE membres SET mail = ? WHERE id = ?');
                $insertmail->execute(array($newmail, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Cette adresse mail est déjà utilisée !";
                }
et sa   :
<?php if(isset($msg)) { echo $msg; } ?>
TheFlameflo

TheFlameflo Le 6 août 2016 à 17:35

Pour ton premier problème, essaye de changer $pseudo par $newpseudo à la ligne 6.

Pour le second, je ne sais pas, désolé ! :|

Valfunde

Valfunde Le 6 août 2016 à 18:29

Ok, je test sa et je te dis   😀
Nickel, pour le pseudo sa marche et l'erreur s'affiche bien ! 😀
Je vais essayer de voir pour le message erreur du mail.
TheFlameflo

TheFlameflo Le 6 août 2016 à 19:33

Heureux de savoir que ça fonctionne !

Peux-tu poster le code complet, pour voir s'il y a quelque chose d'autre qui pourrait causer l'erreur ?
Valfunde

Valfunde Le 6 août 2016 à 22:39 (Édité le 7 août 2016 à 14:08)

Voici le code :  
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']))
{
    $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();
    
    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo'])
        {   
            $newpseudo = htmlspecialchars($_POST['newpseudo']);
            $pseudolength = strlen($newpseudo);
            if($pseudolength <= 255)
            {
                $reqpseudo = $bdd->prepare('SELECT * FROM membres WHERE pseudo = ?');
                $reqpseudo->execute(array($newpseudo));
                $pseudoexist = $reqpseudo->rowCount();
                        
                if($pseudoexist == 0)
                {
                $insertpseudo = $bdd->prepare('UPDATE membres SET pseudo = ? WHERE id = ?');
                $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Ce pseudo est déjà pris .";
                }
            }
            else
            {
                $msg = "Votre pseudo ne doit pas dépasser 255 caractères.";
            }
        }
    
        if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);
            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $reqmail = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
                $reqmail->execute(array($newmail));
                $mailexist = $reqmail->rowCount();
                if($mailexist == 0)
                {
                $insertmail = $bdd->prepare('UPDATE membres SET mail = ? WHERE id = ?');
                $insertmail->execute(array($newmail, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Cette adresse mail est déjà utilisée !";
                }
            }
            else
            {
            $msg = "Votre email n'est pas valide.";    
            }
        }
    
            if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2']))
            {
                $mdp1 = sha1($_POST['newmdp1']);
                $mdp2 = sha1($_POST['newmdp2']);
                    if($mdp1 == $mdp2)
                    {
                        $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
                        $insertmdp->execute(array($mdp1, $_SESSION['id']));
                        header('Location: profil.php?id='.$_SESSION['id']);
                    }
                    else
                    {
                    $msg = "Vos deux mots de passe ne correspondent pas !";
                    }
            }
                if(isset($_POST['newpseudo']) AND $_POST['newpseudo'] == $user['pseudo'])
               {
               header('Location: profil.php?id='.$_SESSION['id']);
               }
?>
<html>
   <head>
      <title>Edition de profile - PHP</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Edition de mon profil</h2>
         <div align="center">
            <form method="POST" action="" enctype="multipart/form-data">
               <label>Pseudo :</label>
               <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br />
               <label>Mail :</label>
               <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br />
               <label>Mot de passe :</label>
               <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br />
               <label>Confirmation - Mot de passe :</label>
               <input type="password" name="newmdp2" placeholder="Confirmation du MDP" /><br /><br />
               <input type="submit" value="Mettre à jour mon profil !" />
            </form>
                     <?php
            if (isset($msg)) {
               echo '<h3><font color="red">'.$msg."</font></h3>";
            }
         ?>
         </div>
      </div>
   </body>
</html>
<?php   
}
else 
{
   header("Location: connexion.php");
}
?>

TheFlameflo

TheFlameflo Le 7 août 2016 à 01:49

Désolé, même avec le code complet, je ne trouve rien ! :|
Valfunde

Valfunde Le 7 août 2016 à 12:48

Moui, pas grave, merci quand même de ton aide   !    :=)
Valfunde

Valfunde Le 7 août 2016 à 13:54 (Édité le 7 août 2016 à 14:07)

Alors, je vais donc réécrire mes 2 autres erreurs. ( le code est au dessus )
 
Première erreur, lorsque je souhaite éditer mon profile pour changer mon adresse mail, si je met une adresse mail qui n'est pas prise par un autre compte, les changements sont faits, mais si je met une adresse mail déjà utlisé par un autre compte, je n'ai pas mon message d'erreur alors que  :  
        if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
        {
            $newmail = htmlspecialchars($_POST['newmail']);
            if(filter_var($newmail, FILTER_VALIDATE_EMAIL))
            {
                $reqmail = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
                $reqmail->execute(array($newmail));
                $mailexist = $reqmail->rowCount();
                if($mailexist == 0)
                {
                $insertmail = $bdd->prepare('UPDATE membres SET mail = ? WHERE id = ?');
                $insertmail->execute(array($newmail, $_SESSION['id']));
                header('Location: profil.php?id='.$_SESSION['id']);
                }
                else
                {
                    $msg = "Cette adresse mail est déjà utilisée !";
                }
            }
            else
            {
            $msg = "Votre email n'est pas valide.";    
            }
        }
---
Seconde erreur, quand je veux changer mon mot de passe, j'aimerais que sa me mette une erreur si le new mot de passe est le même que l'actuel.

Sa ne me met pas non plus d'erreur si les 2 mots de passe se correspondent pas... Si par exemple, je change de mdp et que dans le champs mot de passe je met 123 et que la confirmation je met 1234, sa ne me met aucune erreur, et sa me prend les changements en compte... Alors que j'ai une verification :/

Merci de m'aider 😀 
jeff

jeff Le 13 juin 2017 à 07:59 (Édité le 13 juin 2017 à 08:01)

hello; juste enlevé cette partie a la ligne 79 { header('Location: profil.php?id='.$_SESSION['id']); }et tout va bien je pense....... les messages d'erreur s’affichera...
Napster

Napster Le 19 juin 2017 à 16:21 (Édité le 19 juin 2017 à 16:22)

bonjour à tous!
j'ai besoin d'une aide.
chez moi le bouton "Mettre le profil à jour " ne me retourne pas à la page du "profil" . j'sais pas pourquoi!
merci 😀
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']))
{
$requser = $bdd->prepare("SELECT * FROM membres WHERE id= ?");
$requser->execute(array($_SESSION['id']));
$user = $requser->fetch();
if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo'])
{
$newpseudo = htmlspecialchars($_POST['newpseudo']);
$insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?"); 
$insertpseudo ->execute(array($newpseudo, $_SESSION['id']));
header("location:profil.php?id=".$_SESSION['id']);
}
if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
{
$newmail = htmlspecialchars($_POST['newpseudo']);
$insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?"); 
$insertmail ->execute(array($newmail, $_SESSION['id']));

}
if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND $_POST['newmdp2'] != $user['newmdp2'])
{
$mdp1 = sha1($_POST['newmdp1']);
$mdp2 = sha1($_POST['newmdp2']);
if($mdp1 == $mdp2)
{
$insermdp = $bdd->prepare("UPDATE membres SET motpasse = ? WHERE id = ?");
$insertmdp->execute(array($mdp1, $_SESSION['id']));
header("location:profil.php?id=".$_SESSION['id']);
}
else
{
$msg = "Vos deux mot de passe ne correspondent pas !";
}
}
if(isset($_POST['newpseudo']) AND $_POST['newpseudo'] == $user['pseudo'])
{
header("location:profil.php?id=".$_SESSION['id']);
}
?>
Clash

Clash Le 28 décembre 2017 à 18:01

Bonsoir tous le monde, j'aimerais savoir si quelqu'un a réussit à faire apparaitre le message d'erreur, merci d'avance pour votre aide . 😀
Balatharas

Balatharas Le 30 décembre 2017 à 19:42

@jeff @Napster et @Clash on arrête de déterrer merci, et Napster et Clash créez vos propres sujets si vous avez un problème !
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte