Besoin d une correction pour la page d inscription
53pierre
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
53pierre Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
53pierre Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
bonjour
n'étant pas un spécialiste de php
j'essaye de me débrouiller
que pensez vous de ma page d'inscription
pouvez vous me dire ce que je dois modifier merci
la page de traitement
n'étant pas un spécialiste de php
j'essaye de me débrouiller
que pensez vous de ma page d'inscription
pouvez vous me dire ce que je dois modifier merci
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content="NoS1gnal"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css" rel="stylesheet" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <title>Connexion</title> </head> <body> <div class="login-form"> <?php if(isset($_GET['reg_err'])) { $err = htmlspecialchars($_GET['reg_err']); switch($err) { case 'success': ?> <div class="alert alert-success"> <strong>Succès</strong> inscription réussie ! </div> <?php break; case 'password': ?> <div class="alert alert-danger"> <strong>Erreur</strong> mot de passe différent </div> <?php break; case 'email': ?> <div class="alert alert-danger"> <strong>Erreur</strong> email non valide </div> <?php break; case 'email_length': ?> <div class="alert alert-danger"> <strong>Erreur</strong> email trop long </div> <?php break; case 'pseudo_length': ?> <div class="alert alert-danger"> <strong>Erreur</strong> pseudo trop long </div> <?php case 'already': ?> <div class="alert alert-danger"> <strong>Erreur</strong> compte deja existant </div> <?php } } ?> <form action="inscription_traitement.php" method="post"> <h2 class="text-center">Inscription</h2> <div class="form-group"> <input type="text" name="pseudo" class="form-control" placeholder="Pseudo" required="required" autocomplete="off"> </div> <div class="form-group"> <input type="email" name="email" class="form-control" placeholder="Email" required="required" autocomplete="off"> </div> <div class="form-group"> <input type="password" name="password" class="form-control" placeholder="Mot de passe" required="required" autocomplete="off"> </div> <div class="form-group"> <input type="password" name="password_retype" class="form-control" placeholder="Re-tapez le mot de passe" required="required" autocomplete="off"> </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-block">Inscription</button> </div> </form> </div> <style> .login-form { width: 340px; margin: 50px auto; } .login-form form { margin-bottom: 15px; background: #f7f7f7; box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); padding: 30px; } .login-form h2 { margin: 0 0 15px; } .form-control, .btn { min-height: 38px; border-radius: 2px; } .btn { font-size: 15px; font-weight: bold; } </style> </body> </html>
la page de traitement
<?php require_once 'config.php'; if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = htmlspecialchars($_POST['pseudo']); $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); $password_retype = htmlspecialchars($_POST['password_retype']); $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'); $check->execute(array($email)); $data = $check->fetch(); $row = $check->rowCount(); if($row == 0){ if(strlen($pseudo) <= 100){ if(strlen($email) <= 100){ if(filter_var($email, FILTER_VALIDATE_EMAIL)){ if($password == $password_retype){ $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; $insert = $bdd->prepare('INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'); $insert->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)) )); header('Location:inscription.php?reg_err=success'); die(); }else{ header('Location: inscription.php?reg_err=password'); die();} }else{ header('Location: inscription.php?reg_err=email'); die();} }else{ header('Location: inscription.php?reg_err=email_length'); die();} }else{ header('Location: inscription.php?reg_err=pseudo_length'); die();} }else{ header('Location: inscription.php?reg_err=already'); die();} }
A voir également:
- Besoin d une correction pour la page d inscription
- Supprimer une page word - Guide
- Page d accueil - Guide
- Twitter inscription - Guide
- Imprimer tableau excel sur une page - Guide
- Paypal inscription - Guide
23 réponses
Bonjour,
Tu sembles utiliser PDO .. donc
- Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- L'instruction rowCount, en PDO, ne doit jamais s'utiliser sur une requête SELECT...
A la place, fait un FETCHALL du résultat de ta requête et un COUNT dessus.
- L'instruction htmlspecialchars ne doit jamais s'utiliser pour l'insertion des données en BDD.. elle ne doit servir que pour l'affichage des données sur une page .
Et pour finir, je t'invite à appliquer également les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.
Tu sembles utiliser PDO .. donc
- Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- L'instruction rowCount, en PDO, ne doit jamais s'utiliser sur une requête SELECT...
A la place, fait un FETCHALL du résultat de ta requête et un COUNT dessus.
- L'instruction htmlspecialchars ne doit jamais s'utiliser pour l'insertion des données en BDD.. elle ne doit servir que pour l'affichage des données sur une page .
Et pour finir, je t'invite à appliquer également les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.
bonjour
Merci pour la réponse
donc je dois insérer le code pour les erreurs dans mon fichier confi.sys
puisque la connexion a ma base ce trouve dans ce fichier
Merci pour la réponse
donc je dois insérer le code pour les erreurs dans mon fichier confi.sys
puisque la connexion a ma base ce trouve dans ce fichier
merci pour les renseignements de cette facon alors
try{ $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
Relis bien le contenu du lien que je t'ai donné.
d'une part tu dois activer les erreurs PDO dans la connexion à ta base de données.
Et d'autre part tu dois exécuter des requêtes chacune dans un bloc try catch
Si tu regardes les exemples de code qui se trouve dans le lien tu verras que ce que tu as écrit n'est pas la même chose...
d'une part tu dois activer les erreurs PDO dans la connexion à ta base de données.
Et d'autre part tu dois exécuter des requêtes chacune dans un bloc try catch
Si tu regardes les exemples de code qui se trouve dans le lien tu verras que ce que tu as écrit n'est pas la même chose...
merci pour le rappel
donc si je reprends l exemple
c est comme ceci
donc si je reprends l exemple
c est comme ceci
//Execution de la requete try{ //Execution de la requete try{ $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'); $check->execute(array($email)); $data = $check->fetch(); $row = $check->rowCount(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " email : " ; print_r($email); }
Toujours pas....
Essaye ça
A noter que le ROWCOUNT ne s'utilise PAS sur une requête SELECT !
En plus, vu que tu ne cherches à récupérer qu'une seule ligne.. ça serait, de toutes façons, inutile.
Si tu veux juste vérifier si ta requête a retournée un résultat, il suffit de regarder si $row n'est pas vide
Essaye ça
$sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try{ $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $check->fetch(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " datas : " ; print_r($datas); }
A noter que le ROWCOUNT ne s'utilise PAS sur une requête SELECT !
En plus, vu que tu ne cherches à récupérer qu'une seule ligne.. ça serait, de toutes façons, inutile.
Si tu veux juste vérifier si ta requête a retournée un résultat, il suffit de regarder si $row n'est pas vide
if(!empty($row)){ // ici.. $row contient les données issues de ta requête }else{ // ici.. ben.. ta requête n'a rien retourné }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour la solution , je vais essayer le tout par la suite
je tente la deuxième requete
je tente la deuxième requete
Visiblement... tu vois presque bien... mais pas tout à fait ...
J'espère qu'avec les commentaires ça sera plus clair ....
// la requête SQL a executer : $sql = 'INSERT INTO utilisateurs (pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'; //les données qu'il faut passer en paramètres de la requêtes $datas = array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)) ); // L'exécution de la requete DANS un try/catch try{ $prep = $bdd->prepare($sql); $prep->execute($datas); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les paramètres envoyés à la requete : " ; print_r($datas); }
J'espère qu'avec les commentaires ça sera plus clair ....
ouppsss
je venais juste de m apercevoir que j avais pas bon
j'ai été pris de court
j'étais en train de corriger
voici ce que je voulais poster
je venais juste de m apercevoir que j avais pas bon
j'ai été pris de court
j'étais en train de corriger
voici ce que je voulais poster
$sql = 'INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'; $datas = (array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)) )); //Execution de la requete try{ $prep = $bdd -> prepare($sql) ; $prep->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
et donc sauf erreur le code ressemble a ceci au final
<?php require_once 'config.php'; if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = ($_POST['pseudo']); $email = ($_POST['email']); $password = ($_POST['password']); $password_retype = ($_POST['password_retype']); $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try { $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $check->fetch(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " datas : "; print_r($datas); } if ($row == 0) { if (strlen($pseudo) <= 100) { if (strlen($email) <= 100) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($password == $password_retype) { $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; // la requête SQL a executer : $sql = 'INSERT INTO utilisateurs (pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'; //les données qu'il faut passer en paramètres de la requêtes $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24))); // L'exécution de la requete DANS un try/catch try { $prep = $bdd->prepare($sql); $prep->execute($datas); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les paramètres envoyés à la requete : "; print_r($datas); } header('Location:inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); } }
ah oui j'avais oublie cela
j'en aurais appris des choses ce jour
donc voici alors
j'en aurais appris des choses ce jour
donc voici alors
<?php require_once 'config.php'; if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = ($_POST['pseudo']); $email = ($_POST['email']); $password = ($_POST['password']); $password_retype = ($_POST['password_retype']); $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try { $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $check->fetch(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " datas : "; print_r($datas); } if(!empty($row)) { if (strlen($pseudo) <= 100) { if (strlen($email) <= 100) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($password == $password_retype) { $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; // la requête SQL a executer : $sql = 'INSERT INTO utilisateurs (pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'; //les données qu'il faut passer en paramètres de la requêtes $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24))); // L'exécution de la requete DANS un try/catch try { $prep = $bdd->prepare($sql); $prep->execute($datas); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les paramètres envoyés à la requete : "; print_r($datas); } header('Location:inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); } }
je viens d'essayer ce nouveau code
mais j'ai une erreur qui est retournée
lors de la finalisation de l'inscription
Cette page ne fonctionne pasImpossible de traiter cette demande via accessible-preparat.000webhostapp.com à l'heure actuelle.
HTTP ERROR 500
mais j'ai une erreur qui est retournée
lors de la finalisation de l'inscription
Cette page ne fonctionne pasImpossible de traiter cette demande via accessible-preparat.000webhostapp.com à l'heure actuelle.
HTTP ERROR 500
ah ben oui ...
merci encore une fois
tiens c'est bizarre il y a une erreur lorsque je rentre un nouvel utilisateur qui n'est pas encore inscrit
il me dit qu'il existe déjà
pourtant je ne vois pas ce qui cloche
merci encore une fois
tiens c'est bizarre il y a une erreur lorsque je rentre un nouvel utilisateur qui n'est pas encore inscrit
il me dit qu'il existe déjà
pourtant je ne vois pas ce qui cloche
merci pour l'astuce
voila j'en ai mis deux de cette façon
mais rien ne s'affiche
voila j'en ai mis deux de cette façon
mais rien ne s'affiche
<?php require_once 'config.php'; print_r( $row); if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) { $pseudo = ($_POST['pseudo']); $email = ($_POST['email']); $password = ($_POST['password']); $password_retype = ($_POST['password_retype']); $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try { $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $prep->fetch(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " datas : "; print_r($datas); } print_r( $row); if(!empty($row)) { if (strlen($pseudo) <= 100) { if (strlen($email) <= 100) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { if ($password == $password_retype) { $cost = ['cost' => 12]; $password = password_hash($password, PASSWORD_BCRYPT, $cost); $ip = $_SERVER['REMOTE_ADDR']; // la requête SQL a executer : $sql = 'INSERT INTO utilisateurs (pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)'; //les données qu'il faut passer en paramètres de la requêtes $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24))); // L'exécution de la requete DANS un try/catch try { $prep = $bdd->prepare($sql); $prep->execute($datas); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les paramètres envoyés à la requete : "; print_r($datas); } header('Location:inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); } }
oui je me doutais bien que le premier ne servait a rien mais bon
j enlève donc cette partie
j enlève donc cette partie
header('Location:inscription.php?reg_err=success'); die(); } else { header('Location: inscription.php?reg_err=password'); die(); } } else { header('Location: inscription.php?reg_err=email'); die(); } } else { header('Location: inscription.php?reg_err=email_length'); die(); } } else { header('Location: inscription.php?reg_err=pseudo_length'); die(); } } else { header('Location: inscription.php?reg_err=already'); die(); }
merci
voila je viens de refaire l'essai
j'ai une page blanche a présent
voila je viens de refaire l'essai
j'ai une page blanche a présent
Je viens de voir ton erreur...
Je t'avais donné un code avec un IF et un ELSE....
Dans le cas qui te concerne tu dois vérifier que la variable Row est vide ....
La toi tu testes si elle n'est pas vide....
Comprends-tu le mot empty ?
Sais-tu à quoi sert le point d'exclamation ?
C'est un minimum à connaître quand on commence à coder en PHP...
Je t'avais donné un code avec un IF et un ELSE....
Dans le cas qui te concerne tu dois vérifier que la variable Row est vide ....
La toi tu testes si elle n'est pas vide....
Comprends-tu le mot empty ?
Sais-tu à quoi sert le point d'exclamation ?
C'est un minimum à connaître quand on commence à coder en PHP...
ah ben voila cela a fonctionner
un grand merci
pour la connexion c'est pareil avec la gestion des erreurs
et donc est ok dans ce cas reste comme ca ou alors on fait cette fois un !empty
un grand merci
pour la connexion c'est pareil avec la gestion des erreurs
<?php session_start(); require_once 'config.php'; if(!empty($_POST['email']) && !empty($_POST['password'])) { $email = htmlspecialchars($_POST['email']); $password = htmlspecialchars($_POST['password']); $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try{ $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $check->fetch(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " datas : " ; print_r($datas); } if($row == 1) { if(filter_var($email, FILTER_VALIDATE_EMAIL)) { if(password_verify($password, $data['password'])) { $_SESSION['user'] = $data['email']; header('Location: accueil-.php'); die(); }else{ header('Location: index.php?login_err=password'); die(); } }else{ header('Location: index.php?login_err=email'); die(); } }else{ header('Location: index.php?login_err=already'); die(); } }
et donc est ok dans ce cas reste comme ca ou alors on fait cette fois un !empty
if($row == 1)
Dans ma première réponse je t'ai indiqué
Tu as encore une erreur de variable à la ligne 17
A corriger par
Et pour ton if, là c'est
- L'instruction htmlspecialchars ne doit jamais s'utiliser pour l'insertion des données en BDD.. elle ne doit servir que pour l'affichage des données sur une page .
Tu as encore une erreur de variable à la ligne 17
A corriger par
$prep = $bdd->prepare($sql); $prep->execute($datas); $row = $prep->fetch();
Et pour ton if, là c'est
if(!empty($row ))
merci de la réaction
oui le membre est bien inscrit
voici le code
oui le membre est bien inscrit
voici le code
<?php session_start(); require_once 'config.php'; if(!empty($_POST['email']) && !empty($_POST['password'])) { $email = ($_POST['email']); $password = $_POST['password']); $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?'; $datas = array($email); //Execution de la requete try{ $prep = $bdd->prepare($sql); $prep->execute($datas); $row = $prep->fetch(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " datas : " ; print_r($datas); } if(!empty($row )) { if(filter_var($email, FILTER_VALIDATE_EMAIL)) { if(password_verify($password, $data['password'])) { $_SESSION['user'] = $data['email']; header('Location: accueil.php'); die(); }else{ header('Location: index.php?login_err=password'); die(); } }else{ header('Location: index.php?login_err=email'); die(); } }else{ header('Location: index.php?login_err=already'); die(); } }
Tu ne te relis pas assez....
Ce n'est pas data... mais row..
Si tu penses à activer les erreurs PHP au début de tes script et que tu mets en commentaire les redirection pour vérifier ce qui se passe quand ça ne fonctionne pas tu n'aurais pas besoin que je te relise ton code.
if(password_verify($password, $data['password']
Ce n'est pas data... mais row..
Si tu penses à activer les erreurs PHP au début de tes script et que tu mets en commentaire les redirection pour vérifier ce qui se passe quand ça ne fonctionne pas tu n'aurais pas besoin que je te relise ton code.
en effet c'est vrai que je ne me relis pas assez
pourtant c est de la logique
faut absolument que je comprenne ces choses toutes simple
pour protéger mes pages de mon espace membre seul ceci suffit alors
pourtant c est de la logique
faut absolument que je comprenne ces choses toutes simple
pour protéger mes pages de mon espace membre seul ceci suffit alors
<?php session_start(); if(!isset($_SESSION['user'])){ header('Location:test.php'); die(); } ?>