Page 1 sur 1
Interdire des caractères
Posté : 05 août 2006, 16:40
par bunk
Bonjour,
je voudrais empecher les utilisateurs de mettre les caractères suivant :
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.
Posté : 05 août 2006, 16:57
par Cyrano
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.
Posté : 05 août 2006, 17:11
par bunk
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 ?
Posté : 05 août 2006, 17:29
par Cyrano
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
}
?>
Posté : 05 août 2006, 18:47
par @rthur
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
Posté : 05 août 2006, 20:18
par bunk
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é.
Posté : 11 août 2006, 07:22
par i974
exactement ce quue je cherchais :p
merci bcp
Posté : 11 août 2006, 08:03
par i974
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
Posté : 11 août 2006, 08:17
par Cyrano
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é.
Posté : 11 août 2006, 08:37
par i974
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....
Posté : 11 août 2006, 09:32
par - HXSS -
(!preg_match('`^[[:alpha:]_.- ]{2,50}$`', $prenom_uti))
les miennes ressemblent à ça si ça peut t'aider : /