[EDITION PROFIL] Besoin d'aide pour ma page d'édition de profil
- Accueil
- Forum
- Programmation
- PHP
- [EDITION PROFIL] Besoin d'aide pour ma page d'édition de profil
Valfunde Le 3 août 2016 à 16:49 (Édité le 25 janvier 2019 à 17:52)
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 Le 3 août 2016 à 17:23 (Édité le 1 janvier 1970 à 01:00)
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 Le 3 août 2016 à 17:53 (Édité le 1 janvier 1970 à 01:00)
TheFlameflo Le 3 août 2016 à 18:25 (Édité le 3 août 2016 à 18:26)
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 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 Le 3 août 2016 à 19:34 (Édité le 1 janvier 1970 à 01:00)
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 Le 3 août 2016 à 21:29 (Édité le 1 janvier 1970 à 01:00)
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 Le 3 août 2016 à 22:43 (Édité le 1 janvier 1970 à 01:00)
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 Le 3 août 2016 à 23:30 (Édité le 1 janvier 1970 à 01:00)
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 Le 4 août 2016 à 11:23 (Édité le 1 janvier 1970 à 01:00)
TheFlameflo Le 4 août 2016 à 16:28 (Édité le 1 janvier 1970 à 01:00)
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 Le 6 août 2016 à 15:39 (Édité le 1 janvier 1970 à 01:00)
Valfunde Le 6 août 2016 à 16:09 (Édité le 1 janvier 1970 à 01:00)
$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 Le 6 août 2016 à 17:35 (Édité le 1 janvier 1970 à 01:00)
Pour le second, je ne sais pas, désolé ! :|
Valfunde Le 6 août 2016 à 18:29 (Édité le 1 janvier 1970 à 01:00)
Nickel, pour le pseudo sa marche et l'erreur s'affiche bien ! 😀
Je vais essayer de voir pour le message erreur du mail.
TheFlameflo Le 6 août 2016 à 19:33 (Édité le 1 janvier 1970 à 01:00)
Peux-tu poster le code complet, pour voir s'il y a quelque chose d'autre qui pourrait causer l'erreur ?
Valfunde Le 6 août 2016 à 22:39 (Édité le 7 août 2016 à 14:08)
<?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 Le 7 août 2016 à 01:49 (Édité le 1 janvier 1970 à 01:00)
Valfunde Le 7 août 2016 à 12:48 (Édité le 1 janvier 1970 à 01:00)
Valfunde Le 7 août 2016 à 13:54 (Édité le 7 août 2016 à 14:07)
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 Le 13 juin 2017 à 07:59 (Édité le 13 juin 2017 à 08:01)
Napster Le 19 juin 2017 à 16:21 (Édité le 19 juin 2017 à 16:22)
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 Le 28 décembre 2017 à 18:01 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 30 décembre 2017 à 19:42 (Édité le 1 janvier 1970 à 01:00)