Supprimer les espaces insecables dans un formulaire

WRInaute impliqué
Bonjours, dans un formulaire d'inscription, je veux vérifier si un pseudo est déja pris.

Pour la vérification, je fais ceci :

Code:
$charnamequery = doquery("SELECT charname FROM {{table}} WHERE charname='".trim(addslashes(htmlentities($_POST['charname'])))."' LIMIT 1","users");

if (mysql_num_rows($charnamequery) > 0) { 
echo "- Le Pseudo est déja pris."; }
Le problème c'est que le trim() est sensé supprimer les espaces insécables, genre si quelqu'un tape "Pseudo+espace+espace+espace+espace", dans la requête cela va vérifier "Pseudo", mais visiblement certaines personnes arrive à contourner ce trim et à mettre quand même 5 espaces d'affilé.

Que dois je faire?
 
WRInaute impliqué
Le truc c'est que je voudrais bien accepter 1 espace, genre pour des pseudo en 2 ou 3 mots, mais le truc ca serait de d'interdire les espaces en début ou à la fin des pseudo genre :

espace+pseudo+espace = interdit
espace+pseudo = interdit
pseudo+espace = interdit
 
WRInaute accro
Mais pourquoi ne fais-tu pas ça ? trim() vire bien les espaces normaux au début et à la fin d'une chaine non ?

Code:
$s = '     Gerald            Leblanc           ';
$s = str_replace('  ',' ',$s);
echo '1'.trim($s).'2';
//Résultat: 1Gerald Leblanc2
 
WRInaute impliqué
Non visiblement un trim ne suffit pas, en tout cas sur mon site, des gens arrive à mettre pleins d'espace après leur pseudo.
 
WRInaute impliqué
suite

Je vais vous expliquer comment je proccède :

J'ai une formulaire ou les gens s'inscrivent. Donc pour vérifier si un Pseudo est déja pris je fais ceci :


Code:
$charnamequery = doquery("SELECT charname FROM {{table}} WHERE charname='".trim(addslashes($_POST['charname']))."' LIMIT 1","users");

if (mysql_num_rows($charnamequery) > 0) { 
echo"- Le Pseudo est déja pris"; }

Donc imaginons qu'un joueur tape par exemple comme pseudo "gerard+espace+espace".

Dans la requete, grace au trim(), ca va chercher si le pseudo "gerard" (sans les 2 espaces) existe déja.

Ce que je vous explique la, c'est la logique. Mais le soucis c'est que des gens arrivent à contourner le trim() d'une facon, que je n'ai pas encore découvert.

En fait leur pseudo est par exemple "gerard+espace+espace", et dans la requete le trim ne fait pas d'effet, donc ca cherche si le pseudo "gerard+espace+espace" existe.

C'est ca que j'aimerais régler. Eviter une bonne fois pour toute les espace en fin, et en début de pseudo.

Avez vous une solution éfficace?
 
WRInaute passionné
faut rajouter l'espace insecable dans le trim:

$text=trim($text,char(160));

char(160) equivaut a l'espace insecable (code ascii 160)

sinon tu remplace les espaces insecables par des espaces normaux avec str_replace, et ensuite tu fais normalement trim().
 
WRInaute impliqué
sui

Tu es sur que cette ligne est correct?

la tu as écrit comme si char() était une fonction. Donc ca cause une erreur.

$text=trim($text,char(160));
 
WRInaute accro
Ca correspond à ceci en hexadecimal si tu veux:

$text=trim($text,"\xA0");

Ou x0A ? je sais plus :/
 
WRInaute passionné
Re: sui

sff a dit:
Tu es sur que cette ligne est correct?

la tu as écrit comme si char() était une fonction. Donc ca cause une erreur.

$text=trim($text,char(160));
oui, c bien une fonction, mais je l'avais mal ecris:

$text=trim($text,chr(160));

un "a" en trop ;)
 
WRInaute impliqué
$charnamequery = doquery("SELECT charname FROM {{table}} WHERE charname='".trim($_POST['charname'],"\xA0")."' LIMIT 1","users");

Cela vous parrait correct?
 
WRInaute impliqué
sff a dit:
Le truc c'est que je voudrais bien accepter 1 espace, genre pour des pseudo en 2 ou 3 mots, mais le truc ca serait de d'interdire les espaces en début ou à la fin des pseudo genre :

espace+pseudo+espace = interdit
espace+pseudo = interdit
pseudo+espace = interdit

mon code faisait ça :roll:
 
Discussions similaires
Haut