J'ai fait une page contenant un formulaire pour créer un espace membre. J'ai créé une seconde page qui enregistre les éléments dans la base de données. Je peux envoyer les éléments et ils s'enregistrent bien dans la base. J'ai ajouté ensuite des regex dans des conditions pour pouvoir contrôler ce qui est entré dans les champs pseudo, mot de passe (et resaisie) et email. J'ai utilisé htmlspecialchars, trim et demandé des mots de passe identiques. Cependant, je bloque à cause d'une erreur. PHP ne semble pas vouloir de mon premier else et je ne comprends pas pourquoi.... Ca fait un temps fou que je me creuse la tête mais je ne comprends pas où est l'erreur. Quelqu'un pourrait il m'aider svp ? Merci beaucoup. Ca me bloque complètement.
inscription_post.php
<?php
//connection bdd
try
{
$bdd=new PDO('mysql: host=localhost; dbname=test; charset=utf8', 'root', 'globetrotter2018', array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
die('Erreur ' .$e ->getMessage());
}
// vérification du fait que les champs ont été renseignés, contre les espaces vides et la faille xxs
if(!empty(trim($_POST['pseudo'])) AND !empty(trim($_POST['pass'])) AND !empty(trim($_POST['pass2'])) AND !empty(trim($_POST['email'])))
{
$pseudo = trim(htmlspecialchars($_POST['pseudo']));
$pass = trim(htmlspecialchars($_POST['pass']));
$pass2 = trim(htmlspecialchars($_POST['pass2']));
$email= trim(htmlspecialchars($_POST['email']));
//if else : pour vérifier que le pseudo est bien conforme aux attentes du site
if(preg_match('#^[a-zA-Z0-9]{1}[a-zA-Z0-9.-_]{4,9}$#',$_POST[['pseudo']]));
{
$req=$bdd->prepare('INSERT INTO membres(pseudo) VALUES(?)');
$req->execute(array(htmlspecialchars($_POST['pseudo'])));
echo'Pseudo validé';
}
else
{
echo 'Attention : un pseudo doit contenir un premier caractère alphanumérique puis peut contenir des caractère alphanumérique, points, tirets ou underscores. Il doit contenir entre 5 et 10 caractères. Aucun accent autorisé.';
}
// if else : pour vérifier le mot de passe numéro 1 : lettres chiffres, & - _ . / * + ? ! ; autorisés, entre 5 et 10 caractères
if(preg_match('#^[a-zA-Z0-9]{1}[a-zA-Z0-9.-_&/*+?!;,:%@#]{4,9}$#', $_POST['pass']))
{
$req=$bdd->prepare('INSERT INTO membres(pass) VALUES(?)');
$req->execute(array(htmlspecialchars($_POST['pass'])));
echo'Mot de passe validé';
}
else
{
echo 'Attention : un mot de passe doit contenir un premier caractère alphanumérique puis peut contenir des caractère alphanumérique ou les éléments suivants : .,:;@!?/*-+_&#%. Il doit contenir entre 5 et 10 caractères. Aucun accent autorisé.';
}
//if else : pour vérifier le deuxième password :
if($_POST['pass'] == $_POST['pass2'])
{
$req=$bdd->prepare('INSERT INTO membres(pass2) VALUES(?)');
$req->execute(array(htmlspecialchars($_POST['pass2'])));
echo 'Mot de passe validé';
}
else
{
echo 'Vos deux mots de passes ne sont pas identiques, veuillez les resaisir.';
}
//if else : pour vérifier la validité de l'adresse email :
if(preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',$_POST['email']));
{
$req=$bdd->prepare('INSERT INTO membres(email) VALUES(?)');
$req->execute(array(htmlspecialchars($_POST['email'])));
echo 'Adresse email validée';
}
else
{
echo 'Adresse email incorrecte.';
}
}
else
{
echo 'Attention : Vous n\'avez pas remplis tous les champs (obligatoires) ou vous avez saisi un ou des espaces (interdits)';
}
?>
déjà : pas de htmlspecialchars pour de la sauvegarde de données. Cette méthode est faite pour l'affichage. Ensuite : pas de trim ! Tu n'as pas le droit de modifier le pseudo ou, surtout, le mot de passe qu'on te fournit : le mot de passe peut très bien commencer ou finir par des espaces, et c'est valide ! (ça augmente même probablement sa sécurité, puisque 1) ça l'allonge, 2) ça utilise des caractères dits spéciaux et donc moins courants)
Pour comprendre où ça coince, fais un var_dump($_POST) à la ligne 16, afin qu'on sache ce qu'il y a dedans. Après tout, mieux vaut vérifier qu'on a un sac avant de chercher à piocher dedans
- Edité par Lamecarlate 14 février 2019 à 6:28:13
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Merci, j'ai supprimé mes htmlspecialchars et trim. Mais, je ne comprends pas comment mettre mon var_dump, je ne me suis jamais servie de cette fonction...
C'est incontournable quand on met au point un code d'avoir des traces à certains endroits pour savoir si le déroulement passe à cet endroit et la valeur des variables.
Le var_dump, le print_r et le classique echo sont des possibilités de traces basiques. Après l'on peut faire un système de log plus sophistiqué ...
Merci à toi et à Lamecarlate pour votre aide. J'ai trouvé l'erreur sans utiliser le var_dump, il y a avait un problème de point virgule que je n'avais pas trouvé après maintes lectures ! Je me pose sur le var_dump dès que possible, ça me sera certainement très utile ! @+
Merci, j'avais oublié.Je m'en occupe tout de suite. Bonne journée.
Problème de else
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Pas d'aide concernant le code par MP, le forum est là pour ça :)