Repetition de $error_text .=

hiloe
Invité n'ayant pas de compte PHPfrance

28 janv. 2016, 06:19

Bonjour à tous :D

J'ai un petit problème dans une validation de formulaire. J'ai crée une série de mot interdits dans un textarea.

Code : Tout sélectionner

if (strpos(cP("description"), 'grosmot1' , 'grosmot2') !== false) { $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 1</p></div>"; } if (strpos(cP("description"), 'grosmot3' , 'grosmot4') !== false) { $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 2</p></div>"; } if (strpos(cP("description"), 'grosmot5' , 'grosmot6') !== false) { $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 3</p></div>"; }
[/color]

En gros, quand quelqu'un tape grosmot1, est censé apparaitre Message 1, sauf que c'est la succesion de Message 1, Message 2 et Message 3 qui s'affiche :shock:

J'aimerais juste que s'affiche Message 1 quand il s'agit de l'erreur 1, Message 2 pour l'erreur 2, ainsi de suite.

Pouvez-vous m'aider #-o


Merciiiiiii :P

hiloe
Invité n'ayant pas de compte PHPfrance

28 janv. 2016, 06:26

Là en plus je m'aperçois que ce code est inefficace, et bloque mon formulaire.... :priere:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

28 janv. 2016, 10:38

Bonjour,

Vérifie le fonctionnement de strpos() car tes paramètres me semblent bizarre :
http://php.net/manual/fr/function.strpos.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 688 Messages

28 janv. 2016, 10:41

$error_text =
au lieu de
$error_text .=

le 3ème paramètre de strpos est sensé etre un entier, pas une chaine.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

28 janv. 2016, 10:46

$error_text =
au lieu de
$error_text .=
Si il fait ça, ça va lui afficher tout le temps Message 3 donc je pense pas que ce soit souhaitable, le problème est surtout qu'ils ne devraient pas rentrer dans les autres if ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 2577 Messages

29 janv. 2016, 14:32

Code : Tout sélectionner

switch (true) { case (strpos(cP("description"), 'grosmot1' , 'grosmot2') !== false) : $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 1</p></div>"; break; case (strpos(cP("description"), 'grosmot3' , 'grosmot4') !== false) : $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 2</p></div>"; break; case (strpos(cP("description"), 'grosmot5' , 'grosmot6') !== false) : $error = true; $error_text .= "<div class=\"error-msg2\"><p>Message 3</p></div>"; break; }
Un truc dans ce genre.

hiloe
Invité n'ayant pas de compte PHPfrance

29 janv. 2016, 18:08

Merci à toutes les réponses. Malheureusement pour le dernier, ca retourne l'erreur Message 1, même quand le grosmot1 n'est pas utilisé #-o

Avatar du membre
Mammouth du PHP | 1609 Messages

29 janv. 2016, 18:52

Bonjour, comme te l'a fait remarquer @rthur il y a un problème avec la façon dont tu utilises la fonction strpos.

Tu ne peux pas lui passer une infinité de chaines à rechercher, tu ne peux lui en fournir qu'une en deuxième paramètre.

Le troisième paramètre servant à déterminer à partir de quel caractère il faut commencer la recherche (par défaut 0, c'est à dire à partir du premier caractère de la chaine passée en premier paramètre).

http://php.net/manual/fr/function.strpos.php
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Cherche la position numérique de la première occurrence de needle dans la chaîne de caractères haystack.

Liste de paramètres ¶

haystack

La chaîne dans laquelle on doit chercher.

needle

Si needle n'est pas une chaîne, il est converti en entier, et utilisé comme caractère de code ASCII correspondant.

offset

Si spécifié, la recherche commencera à partir de ce nombre de caractères compté depuis le début de la chaîne. Contrairement aux fonctions strrpos() et strripos(), ce paramètre ne peut être négatif.
Tu devrais avoir des conditions du type :
if(strpos(cP("description"), 'grosmot1') !== false || strpos(cP("description"), 'grosmot2') !== false) {
  $error = true;
  $error_text.= "<div class=\"error-msg2\"><p>Message 1</p></div>";
} 
if(strpos(cP("description"), 'grosmot3') !== false || strpos(cP("description"), 'grosmot4') !== false) {
  $error = true;
  $error_text.= "<div class=\"error-msg2\"><p>Message 2</p></div>";
}
// etc
Et si ça ne fonctionne pas, il doit y avoir un problème avec le retour de cP("description").
Développeur web depuis + de 20 ans