faire l'operation située dans une chaine

la fripouille
Invité n'ayant pas de compte PHPfrance

14 juil. 2006, 15:16

Bonjour,

Je suis en trian de faire une petite fonction antibot, mais il y a un truc que je n'arrive pas à faire, c'est de faire comprendre à php que je désire qu'il me fournisse le résultat d'un opération située dans une chaine, donc qu'il me l'interprète pas en tant que string, mais comme du code.

Voici le code, mon problème se situe dans la 1ère condition.
function antibot()
{
    $choix = mt_rand(1, 5);
    if( $choix == 1 )
    {
        $signe = array(' plus ', ' moins ');
        $operation = mt_rand(15, 20) . $signe[mt_rand(0, 1)] . mt_rand(5, 10) . $signe[mt_rand(0, 1)] . mt_rand(1, 5);
        $result[0] = 'Combien font ' . $operation . ' ?';
        $result[1] =  str_replace($signe, array('+', '-'), $operation);
    }
    elseif( $choix == 2 )
    {
        $color = array('#00f', '#f00', '#0f0', '#ff0', '#000');
        $nom = array('bleu', 'rouge', 'vert', 'jaune', 'noir');
        $prop = implode(', ', $nom);
        $c = mt_rand(0, count($color));
        $quest = '<p><span style="color: ' . $color[$c] . '">';           
        $quest .= 'De quelle couleur est cette phrase ? ';
        $quest .= '</span><br />';
        $quest .= $prop . ' ?';
        $result[0] = $quest;
        $result[1] = $nom[$c]; 
    }
    elseif
    {
    
    }
    // etc...
    return $result;
}

$antibot = antibot();
echo $antibot[0];
Comment faire pour obtenir le résultat de l'opération ?
Donc que pour result[1], j'obtienne le résultat et non une chaine.

Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 juil. 2006, 19:20

salut,

je ne comprend pas, ce que tu souhaite. Tu désire affecter le resultat de quoi ?

d'apres ton code tu retourne la question et la couleur associer ce qui me parait etre le but recherché :)
tu n'a pas de code php dans tes chaines.

Je pense que la fonction eval être ce que tu cherche.

@+

la fripouille
Invité n'ayant pas de compte PHPfrance

14 juil. 2006, 19:56

Merci, mais je ne comprends pas comment utiliser eval(), j'ai un parse error chaque fois.

Dans ma 1ère condition :
if( $choix == 1 )
    {
        $signe = array(' plus ', ' moins ');
        $operation = mt_rand(15, 20) . $signe[mt_rand(0, 1)] . mt_rand(5, 10) . $signe[mt_rand(0, 1)] . mt_rand(1, 5);
        $result[0] = 'Combien font ' . $operation . ' ?';
        $result[1] =  str_replace($signe, array('+', '-'), $operation);
    }
$result[0] me retourne par exemple :
Combien font 19 plus 6 moins 1 ?

$result[0] me donne :
19+6-1

Donc, je voudrais avoir le résultat de l'opération, donc 24.

Comment je dois faire avec eval() ?

Merci.

la fripouille
Invité n'ayant pas de compte PHPfrance

14 juil. 2006, 20:19

Ah ça y est, j'y suis arrivé :P
eval("\$result[1] = $result[1];"); 
Merci beaucoup à toi moogli ;)