Je suis actuellement en train de créer un système d'inscription mais j'ai un problème, lorsque j'essaye d'afficher "l'erreur" lors de l'inscription (ex: adresse mail incorrecte...), elle ne s'affiche pas, je vous montre mon code:
if(isset($_POST['submit'])){
if(isset($_POST['username']) AND isset($_POST['email']) AND isset($_POST['password']) AND isset($_POST['password_confirm'])){
if(!empty($_POST['username']) AND !empty($_POST['email']) AND !empty($_POST['password']) AND !empty($_POST['password_confirm'])){
$username = trim(htmlspecialchars($_POST['username']));
$email = trim(htmlspecialchars($_POST['email']));
$password = trim(htmlspecialchars($_POST['password']));
$password_confirm = trim(htmlspecialchars($_POST['password_confirm']));
if(strlen($email) <= 255){
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
if(strlen($username) >= 3 AND strlen($username) <= 255){
if(strlen($password) >= 4 AND strlen($password) <= 100){
if($password == $password_confirm){
$req = $db->prepare("INSERT INTO users (username, email, password) VALUES (?,?,?)");
$req->execute(array($username,$email,$password));
$error = "Inscription validée !";
} else {
$error = "Vos mots de passes de correspondent pas.";
}
} else {
$error = "Votre mot de passe doit contenir au moins 4 caractères.";
}
} else {
$error = "Votre pseudonyme doit entre 3 et 255 caractères.";
}
} else {
$error = "Veuillez saisir une adresse e-mail correcte.";
}
} else {
$error = "Veuillez saisir une adresse e-mail correcte.";
}
}
}
}
Et la ligne qui permet d'afficher l'erreur:
<p><?php if(isset($error)){echo $error;} ?></p>
J'utilise une architecture MVC, c'est-à-dire que les fichiers sont reliés (permet d'optimiser le code et sépare le html du php..), même si je suppose que cela n'a rien à voir car j'ai fais plusieurs test, j'ai déclaré une variable puis ai essayé de l'afficher, et là , cela fonctionnait.. Quelqu'un aurait-il une idée du problème et saurait comment le résoudre ? Merci d'avance, bonne soirée !
Tous tes strlen sont tous faux, les ) sont mal placées.
Et si le if comme le else n'ont pas de corps, alors tous deux ne servent à rien.
PS : j'ai oublié de dire que strlen c'est le nombre d'octets, pas forcément de caractères (exemple : é c'est un caractère mais il est codé sur 2 octets en UTF-8)
Tu dis utiliser le principe MVC mais comment ? Parce que si ça implique des fonctions/méthodes, il y a peut être la question du scope de $error qui se pose.
Tous simplement par ce que votre formulaire ne contient pas une input au nom de submit c'est bouton de type submit il n'ya pas de variable en post qui s'appel submit dans votre formulaire veuillez enlevé la condition
if (isset($_POST['submit']))
ou ajouté a votre formulaire une input
<input type="hidden" name="submit" />
NB: vou avez pas vu d'erreur par ce que vous vous avez pas mis le else de la première if qui recherche le submit
if (isset($_POST['submit'])){ .... }
else {
$error ="pas de submit";
}
Si jamais, le bouton possède bien un attribut name et si on utilise ledit bouton pour soumettre le formulaire, c'est la valeur entre les balises qui est envoyée comme si le bouton était une saisie.
Mais si on soumet le formulaire avec ENTER, par exemple, vu que le bouton n'a pas été cliqué, effectivement l'index submit n'existe pas.
je viens de vérifier en local, et si si si, en tout cas avec Firefox, l'index "submit" ainsi que sa valeur sont bien envoyées après l'appui sur la touche Entrée.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Non, le problème n'est pas entre des OR ou des AND, parce que du coup, alors qu'il regardait si les valeurs étaient comprises entre deux limites, avec des OR si l'une d'entre elles est respectée, l'autre devient inutile donc tout devient possible — exemples : un mot de passe de 200 caractères est plus long que 5, et avec OR vu que cette seule limite est respectée, on se contrefiche désormais qu'il devrait être de 50 maximum. Un mot de passe d'un seul (ou de zéro, même) caractère est plus petit que 50, une limite est respectée, on s'en fiche que l'on doive mettre 3 caractères minimum.
> (et sinon, limiter la longueur maximale d'un mot de passe, c'est à éviter, hein)
Ca pourrait être discutable dans le cas particulier de bcrypt qui ne considère que les 72 premiers octets * de la clé (mot de passe ici). Un utilisateur qui aurait un mot de passe plus long n'augmenterait pas la sécurité de son compte, ça pourrait être utile de l'en "informer".
Mais dans le cadre de ce sujet, encore faudrait-il que le mot de passe soit haché pour commencer.
* j'ai bien écrit "octet" car autre particularité de bcrypt, c'est que les chaînes hachées sont censées être encodées en UTF-8 sauf que 1) ce n'est pas vérifié donc ce serait plus une convention qu'autre chose et 2) en UTF-8 un point de code pouvant être codé sur jusqu'à 4 octets, finalement, tu peux n'avoir qu'une partie d'un caractère (celui qui tombe sur cette limite de 72 octets) qui sera réellement intégré dans le calcul du hash.
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli