Comment vérifier si le pseudo est déjà dans la base de donnée

flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -
bonjour a tous
je souhaiterais pouvoir vérifier si le pseudo est déjà présent dans la base de donnée avant l inscription

voici mon code mais cela ne semble pas etre bon et correct

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
?>
<?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']);
	
	//preparation des variables propres
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
$ $password= !empty($_POST[' $password']) ? $_POST[' $password'] : NULL;
$password_retype= !empty($_POST['password_retype']) ? $_POST['password_retype'] : NULL;
    //préparation de la requête et des variables
    $sql = "SELECT pseudo, email, password FROM users WHERE email, pseudo = ?, ?";

    $datas = array(
        $email,
        $pseudo
    );

    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }

    $data = $requete->fetch();
    $row = $requete->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 users(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:redirection-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();
    }
}

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    je ne vois aucun commentaire qui décrit ce que fait le code.
    as-quelle ligne essaies-tu de vérifier si le pseudo est déjà présent dans la base de donnée?
    tu écris que cela ne semble pas être bon et correct: comment cela se comporte-t-il? en prenant le temps de le comprendre et de l'expliquer, tu vas peut-être mieux comprendre le code que tu as écrit.
    1
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    WHERE email, pseudo = ?, ?";
    


    Where email quoi ??

    Le souci vient de ta requête SQL et non pas de ton code PHP
    1
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       
      merci jordane pour l aide

      je vais lancer peut être une bêtise

      peut être ceci
              WHERE email=?, pseudo = ?";     
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         
        tu essaies ainsi au hasard jusqu'à ce que cela ne donne plus de message d'erreur?
        pourquoi ne pas plutôt passer un peu de temps à étudier la syntaxe SQL?
        0
      2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         
        ah non voila j ai trouve il doit y avoir AND et pas une virgule

        donc

        WHERE email=? AND pseudo = ?";  


        mais j ai des nouvelles erreurs
        pourtant je n ai que du php dans le code


        Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd4/105/15003105/public_html/phil/inscription_traitement.php:68) in /storage/ssd4/105/15003105/public_html/phil/inscription_traitement.php on line 81
        0
      3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        merci pour le lien mais je n ai aucun code html dans cette page
        0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour yg_be
    merci pour la réponse
    je pensais l avoir suffisamment commente

    je viens de rajouter des commentaires
    donc la vérification ce passe sur ce morceau de code

        //préparation de la requête et des variables afin de vérifier si le pseudo et l email sont déjà présent dans la table 
        $sql = "SELECT pseudo, email, password FROM users WHERE email, pseudo = ?, ?";
    
        $datas = array(
            $email,
            $pseudo
        );
    
        //Execution de la requete
        try
        {
            $requete = $bdd->prepare($sql);
            $requete->execute($datas);
        }
        catch(Exception $e)
        {
            // en cas d'erreur :
            echo " Erreur ! " . $e->getMessage();
            echo " Les datas : ";
            print_r($datas);
        }
    
        $data = $requete->fetch();
        $row = $requete->rowCount();
        if ($row == 0)
        {


    et l endroit du message d erreur en cas de pseudo ou de mail présent dans la table

        else
        {
    		//message a afficher si le pseudo ou l email ne sont pas bons
            header('Location: inscription.php?reg_err=already');
            die();
        }


    voici le message d erreur lorsque je valide les données pour l inscription

    Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' pseudo = 'perroquet666@hotmail.com', 'phil2'' at line 1 Les datas : Array ( [0] => perroquet666@hotmail.com [1] => phil2 )
    Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd4/105/15003105/public_html/phil/inscription_traitement.php:28) in /storage/ssd4/105/15003105/public_html/phil/inscription_traitement.php on line 56

    le code complet
    <?php
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    ?>
    <?php
    // je me connecte a la base de donnee
    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']);
    	
    	//preparation des variables propres
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
    $ $password= !empty($_POST[' $password']) ? $_POST[' $password'] : NULL;
    $password_retype= !empty($_POST['password_retype']) ? $_POST['password_retype'] : NULL;
    
        //préparation de la requête et des variables afin de verifier si le psedo et l email sont deja preset dans la table 
        $sql = "SELECT pseudo, email, password FROM users WHERE email, pseudo = ?, ?";
    
        $datas = array(
            $email,
            $pseudo
        );
    
        //Execution de la requete
        try
        {
            $requete = $bdd->prepare($sql);
            $requete->execute($datas);
        }
        catch(Exception $e)
        {
            // en cas d'erreur :
            echo " Erreur ! " . $e->getMessage();
            echo " Les datas : ";
            print_r($datas);
        }
    
        $data = $requete->fetch();
        $row = $requete->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 users(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:redirection-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
        {
    		//message a afficher si le pseusdo ou l email ne sont pas bons
            header('Location: inscription.php?reg_err=already');
            die();
        }
    }
    
    
    0
  4. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    peut être que je ne peux pas faire la vérification du pseudo et de l email en même temps ?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu veux vérifier qu'il n'existe pas un autre compte ayant exactement le même pseudo et exactement le même email?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    yg_be
    merci pour l aide
    en fait je veux vérifier qu il n y a pas deux fois le même pseudo ou deux fois le même email dans ma base de donnée
    0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    je pense avoir trouve je reviens avec mon code
    pour avoir votre avis
    0
  8. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    voici donc le code qui semble fonctionner sans aucun message d erreur
    si vous pouviez me dire ce que vous en pensez

    <?php
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    ?>
    <?php
    // je me connecte a la base de donnee
    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']);
    	//preparation des variables propres
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
    //$password= !empty($_POST[' $password']) ? $_POST[' $password'] : NULL;
    //$password_retype= !empty($_POST['password_retype']) ? $_POST['password_retype'] : NULL;
    
        //préparation de la requête et des variables afin de vérifier si l email est présent dans la table 
    	 $sql = "SELECT pseudo, email, password FROM users WHERE email = ?";
    $datas = [ $email ];
    
    //Execution de la requete
    try{
      $requete = $bdd -> prepare($sql) ;
      $requete->execute($datas) ;
    }catch(Exception $e){
    	
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
    if ($row == 0)
    {
    	//préparation de la requête et des variables afin de vérifier si le pseudo est présent dans la table 
    		 $sql = "SELECT pseudo, email, password FROM users WHERE pseudo = ?";
    $datas = [ $pseudo ];
    
    //Execution de la requete
    try{
      $requete = $bdd -> prepare($sql) ;
      $requete->execute($datas) ;
    }catch(Exception $e){
    	
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->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:redirection-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();
        }
    }
     else
        {
            header('Location: inscription.php?reg_err=already');
            die();
        }
    }
    0