Affiche erreur SI $chaine contient autre que...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affiche erreur SI $chaine contient autre que...

par zaknaou » 17 déc. 2007, 17:59

C'est bon grace à vous je me suis bien débrouiller, vous n'avez as répondu à mon derner message donc j'ai du chercher en fesant des teste et j'ai modifié et remodifé ce message en l'editant jusqua ce que je trouve la solution moi même :
<?php

$identifiant = "AVION-NOIR_BLEU";

$masque_identifiant = "/([^a-zA-Z0-9\-\_])/";

preg_match($masque_identifiant, $identifiant, $matches_identifiant);

foreach($matches_identifiant as $key_identifiant => $val_identifiant)
{}
	
if ($val_identifiant != "")
{
echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir de </font><font color="#336699" face="Verdana" size="5"><b>'.$matches_identifiant[$key_identifiant].'</b></font>';
}

		
?>
abcdefghijklmnopqrstuvwxyz et ABCDEFGHIJKLMNOPQRSTUVWXYZ et 0123456789 et _ et - sont autorisé !!

J'ai réglé moi même le problème de 2 fois le même message et le problème de _ et de -.

Bien que je ne sait pas avec preg_match_all() afficher toutes les erreur et le nombre de chacunes des erreurs pour $identifiant

Code : Tout sélectionner

Exemple : $identifiant = "Bienvenue@ Che@ " é"; Il y a 2 @, 1 # et 1 é
Mais ce fut d'une grande partie grâce à vous.

MERCI :D

Heu dernier petit truc comment autoriser les espaces et afficher dans le message le mot espace en toute lettre ?

FINALEMENT même ça j'ai trouver :
<?php

$identifiant = "AVION-NOIR_BLEU BLANC";

$masque_identifiant = "/([^a-zA-Z0-9\-\_])/";

preg_match($masque_identifiant, $identifiant, $matches_identifiant);

foreach($matches_identifiant as $key_identifiant => $val_identifiant)
{}
	
if(ereg(" ","$identifiant") AND !ereg("\ ","$masque_identifiant"))
{
echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir d\' espace</font>';
}
elseif ($val_identifiant != "")
{
echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir de </font><font color="#336699" face="Verdana" size="5"><b>'.$matches_identifiant[$key_identifiant].'</b></font>';
}
	
?>
J'ai même mieu fait :
$masque_identifiant = "/([^a-zA-Z0-9\-\_\ ])/"; // abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _-0123456789

preg_match($masque_identifiant, $identifiant, $matches_identifiant);

foreach($matches_identifiant as $key_identifiant => $val_identifiant)
{}
	
if(ereg(" ","$identifiant") AND !ereg("\ ","$masque_identifiant"))
{
echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir d\' espace</font>';
}
elseif(ereg(" ","$identifiant") AND ereg("\ ","$masque_identifiant"))
{
	if ($val_identifiant != "")
	{
	echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir de </font><font color="#336699" face="Verdana" size="5"><b>'.$matches_identifiant[$key_identifiant].'</b></font>';
	}
}
elseif(!ereg(" ","$identifiant"))
{
	if ($val_identifiant != "")
	{
	echo'<font color="#336699" face="Verdana">Le champs identifiant a pour valeur <input type="text" name="identifiant" size="15" maxlength="10" style="border: 1px solid #336699; font-weight:bold; color:#336699; text-align:center; font-family:Verdana; font-size:10pt" onFocus="javascript: this.blur()" value="'.$identifiant.'">, et ne devrait pas contenir de </font><font color="#336699" face="Verdana" size="5"><b>'.$matches_identifiant[$key_identifiant].'</b></font>';
	}
}

par Ryle » 17 déc. 2007, 11:18

Est-ce bon ?
Non ce n'est pas bon, car tu ne sais pas à l'avance combien de caractères erronnés l'utilisateur va saisir. Il faut donc parcourir le tableau comme le suggère Berzemus, le foreach est pas nécessairement judicieux puisque l'index "0" est particulier, mais sur le principe il vaut mieux utiliser une boucle qui s'arrêtera au nombre de caractères érronés.
A noter également que le preg_match() ne retourne que le premier caractère qui ne respecte pas le masque. Si tu veux l'ensemble des caractères erronnés de la chaines, c'est preg_match_all() qu'il faut utiliser :)
Et comment je fait si je veut interdire des signes comme - et _ ou @ ?
Ils sont déjà interdits, puisqu'ils ne font pas partie de la liste des caractères autorisés dans to masque :) Si tu veux les utiliser par contre, il suffit de les ajouter dans ton masque (attention tu ne peux pas les mettre n'importe où, le "-" doit être tout à la fin du masque par exemple... voir la doc pour plus d'info :))

par Berzemus » 17 déc. 2007, 10:29

la magie du foreach() :
$masque_identifiant = "/([^a-zA-Z0-9])/";

if (preg_match($masque_identifiant, $identifiant, $matches_identifiant))
{
  print_r($matches_identifiant);
  foreach($matches_identifiant as $key => $val) {
    if ($val != "") 
       echo "Votre identifiant contient ".$matches_identifiant[$key];
   }
}
mais il y a moyen de mieux penser le bazar.

par zaknaou » 16 déc. 2007, 23:59

Merci,

Par exemple si je veut que les 20 caractères afficxhe 1 message chacun si chacun sont faux :
$masque_identifiant = "/([^a-zA-Z0-9])/";

if (preg_match($masque_identifiant, $identifiant, $matches_identifiant))
{
  print_r($matches_identifiant);
  if($matches_identifiant[1]  != "") {echo "Votre identifiant contient $matches_identifiant[1]";}
  if($matches_identifiant[2]  != "") {echo "Votre identifiant contient $matches_identifiant[2]";}
  if($matches_identifiant[3]  != "") {echo "Votre identifiant contient $matches_identifiant[3]";}
  if($matches_identifiant[4]  != "") {echo "Votre identifiant contient $matches_identifiant[4]";}
  if($matches_identifiant[5]  != "") {echo "Votre identifiant contient $matches_identifiant[5]";}
  if($matches_identifiant[6]  != "") {echo "Votre identifiant contient $matches_identifiant[6]";}
  if($matches_identifiant[7]  != "") {echo "Votre identifiant contient $matches_identifiant[7]";}
  if($matches_identifiant[8]  != "") {echo "Votre identifiant contient $matches_identifiant[8]";}
  if($matches_identifiant[9]  != "") {echo "Votre identifiant contient $matches_identifiant[9]";}
  if($matches_identifiant[10] != "") {echo "Votre identifiant contient $matches_identifiant[10]";}
  if($matches_identifiant[11] != "") {echo "Votre identifiant contient $matches_identifiant[11]";}
  if($matches_identifiant[12] != "") {echo "Votre identifiant contient $matches_identifiant[12]";}
  if($matches_identifiant[13] != "") {echo "Votre identifiant contient $matches_identifiant[13]";}
  if($matches_identifiant[14] != "") {echo "Votre identifiant contient $matches_identifiant[14]";}
  if($matches_identifiant[15] != "") {echo "Votre identifiant contient $matches_identifiant[15]";}
  if($matches_identifiant[16] != "") {echo "Votre identifiant contient $matches_identifiant[16]";}
  if($matches_identifiant[17] != "") {echo "Votre identifiant contient $matches_identifiant[17]";}
  if($matches_identifiant[18] != "") {echo "Votre identifiant contient $matches_identifiant[18]";}
  if($matches_identifiant[19] != "") {echo "Votre identifiant contient $matches_identifiant[19]";}
  if($matches_identifiant[20] != "") {echo "Votre identifiant contient $matches_identifiant[20]";}
} 
Est-ce bon ?

Et comment je fait si je veut interdire des signes comme - et _ ou @ ?

par Ryle » 16 déc. 2007, 14:14

La classe suivante serait effectivement plus courte à tester [^a-zA-Z0-9]

Tu peux également utiliser les parenthèses et le troisième argument de preg_match() pour capturer le premier caractère qui ne respecte pas le masque :
$chaine = "Bonjo@ur"; 
$masque = "/([^a-zA-Z0-9])/";

if (preg_match($masque, $chaine, $matches)) {
  print_r($matches); // affiche le tableau contenant le caractère erronné
  echo "Erreur : " . $matches[1];
}
Tu peux également utiliser preg_match_all() si tu veux récupérer dans le tableau tous les caractères qui ne respectent pas le masque :)

par zaknaou » 16 déc. 2007, 13:00

Bon je ne suis pas sûr mais pour tout ce qui est autre que abcdefghijklmnop et ABCDEFGHIJKLMNOP et 0123456789 on affiche $erreur y a t-il une aute syntax pour avoir le même résultat mais en plus court ?
<?php

$chaine = "";

if(preg_match('[^a-z]', $chaine) AND preg_match('[^A-Z]', $chaine) AND preg_match('[^0-9]', $chaine))

{
echo"";
}

?>
SI ce code est bon :
<?php

$chaine = "bonjour";

if(preg_match('[^a-z]', $chaine) AND preg_match('[^A-Z]', $chaine) AND preg_match('[^0-9]', $chaine))

{
echo"La chaine : $chaine contient autre chose que abcdefghijklmnop, que ABCDEFGHIJKLMNOP ou que 0123456789";
}

?>
Comment faire pour mettre dans $faux_caracteres les caractères autre que ceux préciser, c'est juste pour dire dans le message d'erreur > il y a un @ dans votre chaine veuillez le retier.

En voici l'exemple :
<?php

$chaine = "bonjo@ur";

if(preg_match('[^a-z]', $chaine) AND preg_match('[^A-Z]', $chaine) AND preg_match('[^0-9]', $chaine))

// $faux_caracteres = "@"; car il y a un arobase dans bonjour

{
echo"La chaine : $chaine contient un $faux_caracteres veuillez le retirer";
}

?>
Bon je vien d'expédier co code sur le serveur, et sa ne marche pas comme je le veut.

En téorie y a t-il une erreur ?

MERCI

par Ryle » 16 déc. 2007, 12:44

C'est bien d'avoir trouvé tout ces liens, mais si tu ne les utilises pas pour comprendre comment ça fonctionne et l'appliquer à ton problème, ça perd un peu de son utilité :)

La fonction c'est par exemple preg_match() qui te permet de savoir si ta chaine correspond à ton masque.
Quant à ton masque, si tu as lu les différents liens donnés tu as forcément du voir ça :
[a-p] : défini tout alphabétique compris entre a et p.
[^a-p] : tout caractère qui n'est pas compris dans la fourchette a-p
[a-p0-6] : toutes les lettres de a à p et chiffres de 0 à 6
Ca devrait quand même te donner une idée de comment définir une liste de caractères autorisés, et spécifié que tu souhaite trouver tout caractère qui ne se trouve pas dans la liste de caractères autorisés :)

par zaknaou » 16 déc. 2007, 12:03

Il y a aussi

http://www.commentcamarche.net/faq/suje ... -confondre
et
http://www.commentcamarche.net/php/phpreg.php3

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par zaknaou » 16 déc. 2007, 11:55

Ce lien est tout aussi bien http://www.phpfrance.com/tutoriaux/inde ... regulieres, mais je ne vois pas de fonction qui puisse au moins être utilisé pour afficher $erreur si $chaine contient autre que (...).

Pouriez vous m'aidez en me donnant un légère piste ou un petit exemple de comment faire ?
<?php

if($chaine contient autre que"..."){echo'erreur';}

?>
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par zaknaou » 16 déc. 2007, 11:22

Merci j'y jette un coup d'oeil et je vous répond.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Ryle » 15 déc. 2007, 23:36

Bonjour,

il te suffit d'utiliser une expression régulière (tuto disponible ici) et de spécifier dans une classe commençant par l'opérateur de négation (^) quels sont les caractères autorisés. Ainsi ton test sera vrai si ta chaine contient au moins un caractère autre que ceux précisés.

Affiche erreur SI $chaine contient autre que...

par zaknaou » 15 déc. 2007, 23:22

Bonjour

J'aurai besoin de votre aide pour un petit bout de code trés précis :

Comment faire pour que je puisse afficher erreur si $chaine contient autre que ( là je met les simboles, lettres et chiffres qui sont ACCEPTEE)

ATTENTION : Je ne cherche pas un code qui affiche erreur si $chaine contient ( simboles, lettres et chiffres qui sont PAS acceptée)

C'est pour un usage très précis.

Merci, bonne journée

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]