Page 1 sur 1

Repetition de $error_text .=

Posté : 28 janv. 2016, 06:19
par hiloe
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

Re: Repetition de $error_text .=

Posté : 28 janv. 2016, 06:26
par hiloe
Là en plus je m'aperçois que ce code est inefficace, et bloque mon formulaire.... :priere:

Re: Repetition de $error_text .=

Posté : 28 janv. 2016, 10:38
par @rthur
Bonjour,

Vérifie le fonctionnement de strpos() car tes paramètres me semblent bizarre :
http://php.net/manual/fr/function.strpos.php

Re: Repetition de $error_text .=

Posté : 28 janv. 2016, 10:41
par tof73
$error_text =
au lieu de
$error_text .=

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

Re: Repetition de $error_text .=

Posté : 28 janv. 2016, 10:46
par @rthur
$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 ;)

Re: Repetition de $error_text .=

Posté : 29 janv. 2016, 14:32
par Mazarini

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.

Re: Repetition de $error_text .=

Posté : 29 janv. 2016, 18:08
par hiloe
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

Re: Repetition de $error_text .=

Posté : 29 janv. 2016, 18:52
par Saian
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").