[RESOLU] Gérer un mot de passe oublié pour un espace membre

Mammouth du PHP | 506 Messages

07 mars 2021, 00:16

merci pour l aide

voici donc le nouveau code es ce exact

Code : Tout sélectionner

{ if(strlen($_POST['mail'])<7 or strlen($_POST['mail'])>50){ echo "Le mail doit être d'une longueur minimum de 7 caractères et de 50 maximum."; } else { //tout est précisés correctement, on inscrit le membre dans la base de données si le pseudo n'est pas déjà utilisé par un autre utilisateur //d'abord il faut créer une connexion à la base de données dans laquelle on souhaite l'insérer: $mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base' if(!$mysqli) { echo "Erreur connexion BDD"; //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante: //echo "<br>Erreur retournée: ".mysqli_error($mysqli); } else { $Pseudo=htmlentities($_POST['pseudo'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format $Mdp=md5($_POST['mdp']);// la fonction md5() convertie une chaine de caractères en chaine de 32 caractères d'après un algorithme PHP, cf doc $Mail=htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8"); if(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'"))!=0){//si mysqli_num_rows retourne pas 0 echo "Ce pseudo est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } else{mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$mail'"))!=0){//si mysqli_num_rows retourne pas 0 echo "Ce mail est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } elseif { //insertion du membre dans la base de données: if(mysqli_query($mysqli,"INSERT INTO membres SET pseudo='$Pseudo', mdp='$Mdp', mail='$Mail'")){ echo "Inscrit avec succès! Vous pouvez vous connecter: <a href='connexion.php'>Cliquez ici</a>."; $TraitementFini=true;//pour cacher le formulaire } else { echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste."; //echo "<br>Erreur retournée: ".mysqli_error($mysqli); } } } } } }

Avatar du membre
Mammouth du PHP | 1564 Messages

07 mars 2021, 01:30

} else{mysqli_num... non

elseif(mysql... oui

La doc PHP est ici concernant les if/else: https://www.php.net/manual/fr/control-s ... elseif.php

Mammouth du PHP | 506 Messages

07 mars 2021, 11:21

merci pour la reponse

comme ceci alors

Code : Tout sélectionner

<?php if (mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'") {//si mysqli_num_rows retourne pas 0 echo "Ce pseudo est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } elseif (mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$mail'") {//si mysqli_num_rows retourne pas 0 echo "Ce mail est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } else { //insertion du membre dans la base de données: } ?>
car la documentation est ceci

Code : Tout sélectionner

<?php if ($a > $b) { echo "a est plus grand que b"; } elseif ($a == $b) { echo "a est égal à b"; } else { echo "a est plus petit que b"; } ?>

Avatar du membre
Mammouth du PHP | 1564 Messages

07 mars 2021, 12:16

pourquoi tu as enlevé les conditions ?
='$Pseudo'") ici tu as enlevé le !=0 {/
donc ta condition actuelle demande si la requête vaut true mais pas le !=

Là tu demande juste si le placard existe, demande aussi si il contient des choses, combien, quoi,... ici on demande si il yen a au moins 1 donc !=0 ou on aurait pu mettre aussi if(requete>0)

Après, attention aux parenthèses, comme les accolades, tu doit les refermer:

(mysqli_num_rows(mysqli_query( < ici tu as 3 parenthèses que tu ne referme pas avant d'ouvrir ton accolade

utilise notepad++ pour voir si elle se colore en rouge, si non c'est qu'il en manque, ou attend de voir les erreurs à l'écran :mrgreen:

Mammouth du PHP | 506 Messages

07 mars 2021, 12:36

merci pour l explication

je ne comprends pas pourquoi je n avais pas indique l histoire du 0

je pense que cette fois cela est bon

Code : Tout sélectionner

si je fais comme tu dis j ai <?php if(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'"))!=0) {//si mysqli_num_rows retourne pas 0 echo "Ce pseudo est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } elseif (mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$mail'"))!=0) {//si mysqli_num_rows retourne pas 0 echo "Ce mail est déjà utilisé par un autre membre, veuillez en choisir un autre svp."; } elseif { //insertion du membre dans la base de données: } ?>
la cose que je ne comprends pas c est que la documentaion de php

dis ceci

Code : Tout sélectionner

<?php if ($a > $b) { echo "a est plus grand que b"; } elseif ($a == $b) { echo "a est égal à b"; } else { echo "a est plus petit que b"; } ?>

Avatar du membre
Mammouth du PHP | 1564 Messages

07 mars 2021, 12:40

J'ai décomposé la requête pour que tu comprenne mieux:
//requete si $Pseudo existe dans la table membres
$requetePseudo=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'");
$combienPseudo=mysqli_num_rows($requetePseudo);

//requete si $Mail existe dans la table membres
$requeteMail=mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$Mail'");
$combienMail=mysqli_num_rows($requeteMail);


if($combienPseudo>0){//si mysqli_num_rows est plus grand que 0 (donc: si $Pseudo existe dans la base de données)
	echo "Ce pseudo est déjà utilisé par un autre membre, veuillez en choisir un autre svp.";
} elseif($combienMail>0){//si mysqli_num_rows est plus grand que 0 (donc: si $Mail existe dans la base de données)
	echo "Ce mail est déjà utilisé par un autre membre, veuillez en choisir un autre svp.";
} else {
	//OK, ni le pseudo ni le mail est dans la base de donnéezs, on l'insère
	//insertion du membre dans la base de données:
	///...
}

Mammouth du PHP | 506 Messages

07 mars 2021, 13:23

Merci pour la décomposition et les explications
du coup c est nettement mieux
j irais mettre un commentaire , cela peux aider a valoriser ton site
je vais faire des essais dans les prochains jours ...
je vois aussi que tu as le script de la récupération du mot de passe ,c est celui la que tu veux remettre a jour ?
Merci pour tout ces scripts
c est celui la que tu vas mettre a jour

Avatar du membre
Mammouth du PHP | 1564 Messages

07 mars 2021, 14:30

Non, en fait je ne me souvenais plus que j'avais déjà posté un système de récupération de mot de passe, il s'adapte parfaitement au script espace membre ;)

Mammouth du PHP | 506 Messages

07 mars 2021, 20:48

bonjour tw03d
j ai un soucis avec le script de récupération du mot de passe
je ne recois pas le mail pour le changer ni dans les spams
pourtant le mail existe
tu ne sais pas de quoi cela pourrait provenir
pourtant la table recup a bien ete remplie
merci

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2021, 00:03

quels sont tes outils de dev local ?

Mammouth du PHP | 506 Messages

08 mars 2021, 00:21

merci pour l aide
je suis sur un hébergeur en ligne

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2021, 00:39

Je te conseil de commencer par faire des tests sur un serveur local pour apprendre, c'est vraiment pas le top de faire des modifs sur un site en ligne car il peut même mettre tes pages en cache et tu ne verra même pas certaines modifications, tu risque de devenir fou!

Sur Windows tu as WAMP: https://www.wampserver.com/ (sur linux: LAMP et sur mac MAMP)
Ensuite utilise notepad++ pour éditer tes fichiers: https://notepad-plus-plus.org/ (tu en a d'autre si tu veux)

Mammouth du PHP | 506 Messages

08 mars 2021, 00:41

merci pour la reponse
et l astuce
je vais essayer de suite avec wampserver

Mammouth du PHP | 506 Messages

08 mars 2021, 00:54

je recois ce message d erreur avec wampserver
malgré le changement dans le fichier php.ini
SMTP = smtp.live.com
smtp_port = 587
sendmail_from =votremail@hotmail

c est pour cela que j effectue les tests sur l hébergeur

Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2021, 01:08

Mets y du tiens un minimum, analyse les erreurs, tu penses bien qu'avec le mail que tu as mis ça va fonctionner ?


Et l'erreur indique tu utilise le port 25, hors tu dis avoir modifié le ini, mais c'est pas le bon:
Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in
Tout le monde est passé par là, j'ai fait un tuto pour solutionner cette erreur ici: https://www.c2script.com/scripts/envoye ... e-s43.html
Modifié en dernier par two3d le 08 mars 2021, 01:14, modifié 1 fois.