Interdire des caractères

Eléphant du PHP | 291 Messages

05 août 2006, 16:40

Bonjour,

je voudrais empecher les utilisateurs de mettre les caractères suivant :

Code : Tout sélectionner

<'>|$^¨`\/~¤"
dans leur mot de passe.

Je sais comment les supprimer directement avec :
$mdp = trim($mdp,'<\'>|$^¨`\/~¤"');
ce que je cherche à faire c'est savoir si dans la saisie il y'a (ou pas) un des caractères "interdit" afin d'afficher un message d'erreur comme :
			if(strpos($mdp,'<\'>|$^¨`\/~¤"')){
				$erreur = ' <span style="font-weight: bold;">Caractères interdit dans le champ mot de passe : <font color="red">\'<>|$^¨`\/~¤"</font></span>';
				$erreur .= '<br />';
			}
actuellement ce qui se passe, des que le formulaire est soumis, qu'il est ou pas un des caractères de la liste, il m'affiche le message d'erreur.

Merci pour votre aide eventuelle.

Mammouth du PHP | 19672 Messages

05 août 2006, 16:57

Pour de l'évènementiel, PHP ne peut pas t'aider, il faut passer par du JavaScript coté client pour détecter les caractères interdits et bloqer l'envoi du formulaire. Si tu n'utilises que le PHP, il faut obligatoirement envoyer le formulaire de façon à ce que php puisse le traiter puisque PHP ne s'exécute QUE coté serveur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 291 Messages

05 août 2006, 17:11

oui, oui je veux verifier après validation du formulaire (donc en PHP)

le soucis actuel c'est que quelque soit lecaratere que je saisi il m'afiche le $erreur, alors que logiquement il ne devrait me l'afficher si et seulement si je rentre au moins un des caratère de la liste, non ?

Mammouth du PHP | 19672 Messages

05 août 2006, 17:29

Dans ton expression, il y a de toutes façons une erreur, il y a un caractère que tu as oublié d'échapper, corrigé:
<?php
$mdp = trim($mdp,'<\'>|$^¨`\\/~¤"');
Ceci dit, plutôt que de lister les caractères interdits, pourquoi ne pas lister les caractères autorisés avec une expression régulière ? Si par exemple tu n'autorises que les caractères alphaumériques plus les signes -, + et _ : ça donnerait quelque chose comme ceci:
<?php
/* On définit les caractères autorisés */
$masque = "^(a-z0-9-_\+)+$"i;
/* On vérifie si le mot de passe correspond à ce masque */
if(!preg_match($masque, $mdp))
{
    // KO : le mot comporte un ou des caractère(s) interdit(s)
}
else
{
    // OK : on peut enregistrer
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 août 2006, 18:47

Bonjour,

J'attire ton attention sur le fait que la fonction trim() ne fonctionne que pour le début et la fin de la chaîne de caractère spécifiée.
Si tes caractères interdits sont contenus au milieu du mot de passe, trim() ne te permettra pas de les supprimer
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 291 Messages

05 août 2006, 20:18

Merci pour vos réponses, j'ai procedé comme cela :
			// Autorise A-Z / a-Z
			if (preg_match('`[^A-Za-z_.-]`i', $prenom_uti)) {
				$erreur = '<br /><br />';
				$erreur .= '<img src="../../../images/exclam_jaune.png" alt="Image : Erreur de saisie !" style="vertical-align: middle;" />';
				$erreur .= ' <span style="font-weight: bold;">Caractère non autorisé dans le champ <font color="red">PRENOM</font>, autorisé : A-Z / a-z</span>';
				$erreur .= '<br />';
			}
qui m'affiche le message si A-Z / a-Z n'est pas respecté.

Eléphanteau du PHP | 30 Messages

11 août 2006, 07:22

exactement ce quue je cherchais :p
merci bcp

Eléphanteau du PHP | 30 Messages

11 août 2006, 08:03

mince, j'ai toujours ce message
"Warning: preg_match() [function.preg-match]: Compilation failed: POSIX named classes are supported only within a class at offset 0 in C:\wamp\www\test\inscription.php on line 42"

j'avoue les expressions regulières et moi ca fait bcp

Mammouth du PHP | 19672 Messages

11 août 2006, 08:17

En principe elle est activée par défaut, mais il semble que dans ton cas, la librairie PCRE ne sois pas active. Vérifie donc dans ton php.ini ce qu'il en est. Fais une recherche sur "PCRE" dans ton fichier et dis-nous ce que tu auras trouvé.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 30 Messages

11 août 2006, 08:37

je m'etais trompé dans le message d'erreur...
le voilà
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in C:\wamp\www\test\inscription.php on line 42


comme on peut le constater, je test en local sous wamp...
j'ai fais une recherche dans mon php.ini

et pas de PCRE aucune occurence du mot....

Eléphant du PHP | 101 Messages

11 août 2006, 09:32

(!preg_match('`^[[:alpha:]_.- ]{2,50}$`', $prenom_uti))

les miennes ressemblent à ça si ça peut t'aider : /