Comment empêcher l utilisateur d employer un pseudo avec un espace

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 empêcher les utilisateurs de s inscrire avec un espace entre deux lettres ou deux mots
mais comment y arriver
merci de l aide je vous joints ma vérification actuelle
<?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 'base.php';

//si tous est ok alors on passe a l inscription
if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
{

    $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;

    //préparation de la requête et des variables afin de verifier si l email est present dans la table
    $sql = "SELECT pseudo, email, password FROM utilisateurs 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 verifier si le pseudo est present dans la table
        $sql = "SELECT pseudo, email, password FROM utilisateurs 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();
        //on verifie que le pseudo n est pas present
        if ($row == 0)
        { //on verifie que le pseudo fais moins de 40 caractere
            if (strlen($pseudo) <= 40)
            { //on verifie que le email fais moins de 40 caractere
                if (strlen($email) <= 40)
                {
                    if (filter_var($email, FILTER_VALIDATE_EMAIL)) //on verifie que c est bien une email
                    
                    {
                        if ($password == $password_retype)
                        { //on verifie que le pasword retape correpond bien au passord
                            $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();
    }
}

6 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Bonjour
    Plusieurs solutions possibles
    Soit tu utilises une regex afin de définir les caractères autorisés
    Soit, tu vérifies si il y a un espace dans la chaîne de texte... en utilisant par exemple strpos ou str_contains dans un if.

    Tu pourrais également faire ce genre de vérification côté JavaScript.

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour,
      tout en sachant que le site ne peut pas faire confiance au JavaScript.
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Le également il faut le comprendre en complément...
        Tu fais la verif en javascript pour éviter d'avoir à transmettre le formulaire au serveur si il n'est pas conforme...
        Et si tu sembles ok tu transmets au serveur côté PHP et bien entendu tu reviens vers hifi pour t'assurer que tout est toujours bon
        0
  2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour vos réponses

    cote javascript ca sera pas pour moi
    déjà que le php c est limite

    je vais donc voir avec un if
    et une deux solutions proposées
    Soit tu utilises une regex afin de définir les caractères autorisés
    Soit, tu vérifies si il y a un espace dans la chaîne de texte... en utilisant par exemple strpos ou str_contains dans un if.
    0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    que pensez vous de ceci

    <?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 'base.php';
    
    //si tous est ok alors on passe a l inscription
    if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
    {
    
        $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;
    
        //préparation de la requête et des variables afin de verifier si l email est present dans la table
        $sql = "SELECT pseudo, email, password FROM utilisateurs 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 verifier si le pseudo est present dans la table
            $sql = "SELECT pseudo, email, password FROM utilisateurs 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();
            //on verifie que le pseudo n est pas present
            if ($row == 0)
            { //on verifie que le pseudo fais moins de 40 caractere
                if (strlen($pseudo) <= 40)
                { //on verifie que le email fais moins de 40 caractere
                    if (strlen($email) <= 40)
                    {
    					if(preg_match('/[^a-z_\-0-9]/i', $string))//on verifie les caracteres
    					{
                        if (filter_var($email, FILTER_VALIDATE_EMAIL)) //on verifie que c est bien une email
                        
                        {
                            if ($password == $password_retype)
                            { //on verifie que le pasword retape correpond bien au passord
                                $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=caractere');
                            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
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
       
      Je pense que $string n'existe pas
      0
  4. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour l aide
    oui en effet je vais le supprimer
    car je n en vois pas l utilité
    par contre mon code ne fonctionne pas
    si j indique par exemple comme pseudo
    azerty
    c est refusé il m indique que je rentre un caractère non autorise a mon avis c est surement les espaces après les lettres
    0
    1. Utilisateur anonyme
       
      B'jour,

      Ta regex est mauvaise.
      Je pourrais te donner la version corrigée, mais il faudrait que tu essaies d'abord de comprendre le souci.
      Donc va sur https://regex101.com, pour tester ta regex.
      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
     
    bonsoir Pyraah
    merci pour ton aide
    apparemment
    ca serait comme ceci

    if(preg_match('[^a-z_\-0-9]i')) 


    car je n ai aucune erreur
    avec ceci
    '[^a-z_\-0-9]i'
    0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    mais cela ne fonctionne pas
    quoi que je puisse entrer comme pseudo j ai l erreur qui apparaît comme quoi qu il y a un caractère invalide
    0
    1. Utilisateur anonyme
       
      Ta regex est toujours mauvaise.
      Je suis gentil, version corrigée :
      '/^[a-z_\-0-9]+$/i'
      0
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > Utilisateur anonyme
         
        Merciiii Pyraah
        c est top gentil
        voila cela fonctionne
        if(preg_match('/^[a-z_\-0-9]+$/i', $pseudo))//on vérifie les caractères


        je vais m entrainer avec
        https://regex101.com/
        0