Page 1 sur 1

faire l'operation située dans une chaine

Posté : 14 juil. 2006, 15:16
par la fripouille
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.

Posté : 14 juil. 2006, 19:20
par moogli
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.

@+

Posté : 14 juil. 2006, 19:56
par la fripouille
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.

Posté : 14 juil. 2006, 20:19
par la fripouille
Ah ça y est, j'y suis arrivé :P
eval("\$result[1] = $result[1];"); 
Merci beaucoup à toi moogli ;)