interdire certains caracteres à l'inscription?

Eléphant du PHP | 250 Messages

03 déc. 2007, 21:45

Bonjour,

j'ai un formulaire d'inscription ainsi qu'un script d'authentification qui fonctionnent TRES BIEN.
Seul hic, j'aimerai interdire la saisie de certains caractères au niveau du pseudo (chiffres et " et % et _ par exemple et je n'y arrive pas.
voici le script "basic" de vérification d'inscription qui fonctionne suivi de celui que j'ai voulu faire en rapport avec ce que je viens de dire ci-dessus...
<?php
session_start() ;
include 'connexion.php';
//Vérifier si le pseudo et mot de passe sont envoyés non vides
if (isset($_POST['pseudo']) && isset($_POST["passe"]) && !empty($_POST["pseudo"]) && !empty($_POST["passe"]))
{
//on recupere les données du formulaire
$login = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
$req = mysql_query("SELECT * FROM membres WHERE pseudo='". $login. "' AND passe='".$passe."'",$db)or die(mysql_error());
//Tester si la requête est réussie et qu'un membre est trouvé
if ($req && mysql_num_rows($req) >0) {
   //Lire le résultat retourné par la requête
   $data = mysql_fetch_assoc($req);
   if ($data) {
            //Lire et stocker les infos  dans la session
		   $_SESSION['pseudo'] = $login;
etc, etc

if(isset($_POST['pseudo']=='^-!#$%&+_/\"?0-9')))
{ 
echo 'caracteres interdits';
include 'inscription.php';
}
else
if (isset($_POST['pseudo']) && isset($_POST["passe"]) && !empty($_POST["pseudo"]) && !empty($_POST["passe"]))
{
//on recupere les données du formulaire
etc, etc, etc
Je ne sais comment venir à bout de ce problème, si quelqu'un a une idée concrète et logique?
Merci d'avance et désolé si cela semble évident pour certains? :?

Eléphant du PHP | 97 Messages

03 déc. 2007, 22:30

$_POST['pseudo']=='^-!#$%&+_/\"?0-9'
En fait là tu vas verifier si quelqu'un n'a pas entré un pseudo qui s'écrit exactement comme la chaine : ^-!#$%&+_/\"?0-9 .

Si j'étais toi je ferais un tableau avec les caractères interdits, puis en bouclant avec foreach() j'examinerais avec la fonction strpos() ta variable $_POST['pseudo'].

Et si j'étais moins débutant, j'utiliserais les expressions régulières, j'imagine... 8-|

Eléphant du PHP | 147 Messages

03 déc. 2007, 23:22

Je pense que tu devrais aussi bloquer la saisie de ces caractère spéciaux par javascript. Cela ne t'empèche pas d'effectuer les control cotè php car le javascript peut etre désactivé.

Eléphant du PHP | 97 Messages

04 déc. 2007, 00:17

J'ajoute que pour une sécurité optimale il faut absolument faire ca d'abord en php et seulement aprés mettre une couche de javascript. Un utilisateur mal intentionné commencera trés probablement par desactiver le javascript de son navigateur...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 déc. 2007, 11:22

Regarde plutôt des expressions régulières, il est facile de vérifier si un caractère est présent dans une chaine, ou même de t'assurer que tous les caractères de ta chaine sont d'un certain type :
// test si la chaine contient uniquement des caractères alphabétiques (a-z/A-Z) ou numériques (0-9)
if(preg_match('#^[a-zA-Z0-9]*$#', $_POST['pseudo'])) { 
  echo "Le login est correct"; 
} 
else { 
  echo "Le login n'est pas correct"; 
} 
Tu peux aussi modifier le pattern à loisir pour interdire les nombres, forcer de 1 à N caractères en remplacant l'étoile (*) par un plus (+), ou même spécifier qu'il faut entre 6 et 16 caractère avec un {6,16}

Un p'tit tuto sur les expressions régulières :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 250 Messages

05 déc. 2007, 00:18

Merci Ryle, je m'oriente vers ta solution :wink: