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

flexi2202 Messages postés 3822 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3822 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();
    }
}

A voir également:

6 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
bonjour,
tout en sachant que le site ne peut pas faire confiance au JavaScript.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > yg_be Messages postés 23541 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
flexi2202 Messages postés 3822 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
flexi2202 Messages postés 3822 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Je pense que $string n'existe pas
0
flexi2202 Messages postés 3822 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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3822 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
flexi2202 Messages postés 3822 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
Utilisateur anonyme
 
Ta regex est toujours mauvaise.
Je suis gentil, version corrigée :
'/^[a-z_\-0-9]+$/i'
0
flexi2202 Messages postés 3822 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