fonctionnement d'Ereg

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 : fonctionnement d'Ereg

par ZeDeveloppeur » 12 juin 2007, 16:34

merci à tous pour votre aide.
en fait je reprend un code existant, et c'est la fonction Ereg qui était utilisée...

je vais modifier tout ça.


merci encore !

par AB » 06 juin 2007, 21:54

Bonsoir,

Si tu veux faire une recherche insensible à la casse (qui ne tient pas compte des majuscules ou minusciles) et utiliser ereg, il faut écrire pour effectuer la commande uniquement si bot n'est pas trouvé dans la chaine :
if(!ereg('bot', strtolower($chaine))
{
//commande
}
mais il faut éviter d'utiliser ereg pour des recherches aussi simples, et préférer preg_match() pour des recherches plus complexes.
Dans ton cas, si tu souhaites que ton code soit compatible php4
if(strpos(strtolower($chaine),'bot') === FALSE) 
{
//commande
}
à partir de php5 tu peux faire
if(stripos($chaine,'bot') === FALSE) 
{
//commande
}
Cela dit si ereg disparait en php6, j'aurai du boulot à faire d'ici quelques années car je l'utilisais souvent à mes début pour des recherches un peu compliquées alors que j'aurais plutôt dû utiliser preg_match() que je ne connaissais pas (y'a pas que des exemples optimisés sur le web!).
Suis les conseils d'Hubert et évites d'utiliser ereg, ça te fera gagner du temps ainsi qu'au serveur :wink:

par Hubert Roksor » 06 juin 2007, 20:27

Au passage, qui t'a conseillé d'utiliser ereg() ? Cela fait longtemps que ereg() est tombé en désuétude, il ne fonctionnera probablement pas sous PHP 6 et il serait peut-être bon de faire modifier la page qui préconise son usage.

Et puis tant qu'on y est, j'ai remarqué que ta chaîne de test ne contenait pas la chaîne "bot" (elle contient "Bot") donc c'est normal que ton test ne donne pas les résultats escomptés. La meilleure solution est d'utiliser strpos() ou stripos() selon le résultat que l'on veut obtenir.

par Cyrano » 06 juin 2007, 19:06

ereg() attend en premier paramètre une expression régulière, pas une chaine. Donc il faudrait plutôt faire :
if(!ereg('^.*(bot).*$', $chaine) )
{
    // traitement
} 
Un petit tour dans la doc ne serait pas superflu

fonctionnement d'Ereg

par ZeDeveloppeur » 06 juin 2007, 17:58

bonjour,

je fais un test sur une chaine de caractère pour verifier si elle contient la chaine "bot"
mais dans l'exemple ci dessous mon test ne la detecte pas :

Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)

Code : Tout sélectionner

if(!ereg('bot',$chaine) ) { // traitement }
le traitement se fait :roll:

merci de m'aider.