Page 1 sur 1

if

Posté : 20 nov. 2009, 09:05
par kanaille
Bonjour,

J'ai un souci et j'ai fait un petit script pour exprimer mon problème :
<?
$str="le vent souffle fort";
$fonction="eregi('biii', $str) or eregi('ibiii', $str)";

if ($fonction)

{
print "1";
}

?>
Je crois comprendre le problème : "if" me répond oui car il vérifie l'existence de la variable "$fonction" et non sa validité. Comment faire pour qu'il vérifie la validité de $fonction et non l'existence de la variable ?

Merci d'avance pour toute aide.

Re: if

Posté : 20 nov. 2009, 12:26
par zeus
Bonjour,

Quand tu écris
$fonction="eregi('biii', $str) or eregi('ibiii', $str)";
tu ne définis pas une fonction, tu ne fais que mettre une chaine dans une variable.
Donc, quand tu fais
îf($fonction)
PHP teste la variable, trouve une chaine non nulle, et considère donc que c'est vrai.

Si ton but premier était de mettre le résultat du test dans la variable, il faut écrire :
$fonction = (eregi('biii', $str) or eregi('ibiii', $str));
Et si ton but était de créer un fonction anonyme (une fonction déclarée à la volée, qui n'as pas de nom, et qui peut aussi être appelée lambda), il aurait fallu écrire :
$function = function($str) { return eregi('biii', $str) or eregi('ibiii', $str)  };

if( $function($str) )
{
   // ...
}

Re: if

Posté : 20 nov. 2009, 12:40
par Victor BRITO
Soit dit en passant, on peut améliorer l'écriture de ta variable $fonction, comme suit :
$fonction = preg_match ('#i?bi{3}#i', $str);
D'autant plus que les fonctions dont le nom commence par ereg ou eregi deviennent obsolètes en PHP 5.3 et peuvent être avantageusement remplacées par les expressions régulières compatibles Perl, ne serait-ce que pour une question de performance (un tuto est à ta disposition si tu ne connais pas ce type d'expressions régulières).

Re: if

Posté : 20 nov. 2009, 16:17
par kanaille
Bonjour et vraiment merci de m'aider.

*****Zeus : super, c'est presque bon, mais j'ai encore un problème. Je ne connais pas à l'avance le nombre de termes à vérifier et mon petit bout de code ne fonctionne pas :

Code : Tout sélectionner

$str="le vent souffle fort"; $fonction = eregi('les', $str); $fonction .= " or " ; $fonction .= eregi('ibiii', $str); if ($fonction) { print "1"; }
Comment faire pour que "or" fonctionne comme un opérateur et non comme une simple chaîne de caractères ?

*****Victor : merci beaucoup du conseil, je vais regarder ça.

Re: if

Posté : 20 nov. 2009, 16:22
par animithra
Comment faire pour que "or" fonctionne comme un opérateur et non comme une simple chaîne de caractères ?
Essai de ne pas écrire $fonction comme une chaîne de caractère :
if(eregi('les', $str) OR eregi('ibiii', $str)){
 print("1");
}

Re: if

Posté : 20 nov. 2009, 16:29
par kanaille
Comment faire pour que "or" fonctionne comme un opérateur et non comme une simple chaîne de caractères ?
Essai de ne pas écrire $fonction comme une chaîne de caractère :
if(eregi('les', $str) OR eregi('ibiii', $str)){
 print("1");
}
J'ai pas le choix :( En fait je récupère les termes ('les', 'ibiii' etc. ) dans une base sql. Pour chacun j'ai besoin de dégager un

" OR eregi($terme,$str)"

C'est pour ça que je distinque le "if" d'un côté et "$fonction" de l'autre.

Re: if

Posté : 20 nov. 2009, 16:38
par animithra
Dans ce cas tu peux gérer le tout avec des if et elseif : si tu n'as qu'un résultat tu fais un simple if, sinon tu rajoutes un elseif(eregi....).

Re: if

Posté : 20 nov. 2009, 16:48
par kanaille
Dans ce cas tu peux gérer le tout avec des if et elseif : si tu n'as qu'un résultat tu fais un simple if, sinon tu rajoutes un elseif(eregi....).
Bonne idée ! Mais comment tu fais ? Voici mon script qui ne fonctionne pas :

Code : Tout sélectionner

$str="le vent souffle fort"; $fonction1 = if (eregi('les',$str)) { print 1; } $fonction1 .= elseif (eregi('ibiii',$str)) { print 1; } print $fonction1;

Re: if

Posté : 20 nov. 2009, 16:58
par animithra
Tu te compliques la vie.

Tu m'as bien dit que les paramètres de ta fonction eregi() étaient récupérés dans la base de données ?

Le cas échéant tu peux traiter ton eregi() en traitant les résultats :
while($resultats = mysql_fetch_array($requete)){
  $param = $resultats($champ);
  if(eregi($param,$str)){
    die("1");//arrete le programme s'il trouve la solution
  }
}

Re: if

Posté : 20 nov. 2009, 17:34
par kanaille
Super Animithra !! Ca marche super bien, c'est vrai que je me suis compliqué la vie pour rien.

Merci !!!
Tu te compliques la vie.

Tu m'as bien dit que les paramètres de ta fonction eregi() étaient récupérés dans la base de données ?

Le cas échéant tu peux traiter ton eregi() en traitant les résultats :
while($resultats = mysql_fetch_array($requete)){
  $param = $resultats($champ);
  if(eregi($param,$str)){
    die("1");//arrete le programme s'il trouve la solution
  }
}

Re: if

Posté : 20 nov. 2009, 17:34
par animithra
Un petit tag "Résolu" l'ami !