Problème avec une condition contenue dans une variable - PHP - Programmation
Marsh Posté le 27-06-2003 à 10:27:25
j'aurai plutop fais ca moi :
Code :
|
a tester
Marsh Posté le 27-06-2003 à 11:00:33
Ca marche toujours pas.
Si vous avez une solution, donnez la moi
Marsh Posté le 27-06-2003 à 11:04:33
doit y avoir plus simple mais bon
http://fr3.php.net/manual/en/function.eval.php
Marsh Posté le 27-06-2003 à 11:12:53
et comme ca (g virer les gillemets dans le if) ???
Code :
|
Marsh Posté le 27-06-2003 à 11:24:01
Voici ce que j'ai fait mais ca marche toujours pas:
<?
$cond = '1 == 2';
if("eval($cond)" )
{
echo"ca marche";
}
?>
Ca affiche "ca marche" alors que ca ne devrait rien afficher
Si vous avez d'autres solutions, n'hésitez pas...
Marsh Posté le 27-06-2003 à 11:28:21
putain, t'as rien compris aux chaines de caratères toi. vire moi c'est "" autour de eval et lis la doc
Marsh Posté le 27-06-2003 à 11:38:19
++Taz a écrit : putain, t'as rien compris aux chaines de caratères toi. vire moi c'est "" autour de eval et lis la doc |
Ok :
<?
$cond = '1 == 2';
if(eval($cond))
{
echo" <br>ca marche ";
}
?>
J'ai viré les guillemets mais maintenant ca provoque une erreur. C quoi le problème ??
Marsh Posté le 27-06-2003 à 15:26:51
Ce script va me permettre d'assigner un numero ALEATOIRE ET UNIQUE a chaque news contenu dans un fichier.
J'appelle ensuite ces news par leur numéro dans l'ordre croissant pour les afficher.
L'utilité de ce script est que les news n'apparaitront jamais dans le meme ordre.
(Ca parait con mais ce script va me servir dans d'autres applications...)
Voici mon script :
Enregistrez d'abord ce qui suit dans un fichier txt :
http://serveur/pagex.php
Ceci est la news n°A
http://serveur/pagex.php
Ceci est la news n°B
http://serveur/pagex.php
Ceci est la news n°C
http://serveur/pagex.php
Ceci est la news n°D
Voici maintenant le script :
(mettez le ds un éditeur vous y verrez plus clair...)
<font face = verdana size=2>
<?php
// PREMIERE PARTIE DU SCRIPT
// Elle assigne chaque news et chaque url a une variable et compte le nombre total de news
$ne = 0;
$fd = fopen ("news.txt", "r" );
while (!feof($fd)) {
if ($ne % 2 == 0) {
${'url'.$ne} = fgets($fd);
${'rurl'.$ne} = rtrim(${'url'.$ne});
} else {
${'news'.$ne} = fgets($fd);
${'rnews'.$ne} = rtrim(${'news'.$ne});
}
$ne++;
}
fclose ($fd);
$nblignes = $ne;
$nbnews = $nblignes / 2;
echo"<h3>il y a $nbnews news</h3><br><br>";
// FIN DE LA PREMIERE PARTIE
?>
<?php
// DEUXIEME PARTIE DU SCRIPT
// elle donne un numéro aléatoire UNIQUE à chaque news
// Initialisation des variables
$bl = 0;
$ze = 1;
$np = 1;
$zee = 0;
$zi = 0;
// Boucle principale qui assigne un numéro aléatoire unique a chaque news
while ($ze <= $nbnews) {
// numero de la news contenue dans la variable qui suit...
${'rdm'.$zee} = rand('0', "$nbnews" );
echo"<li type=square><b>N° de la news : <font size=4 color=blue><b>${'rdm'.$zee}</b></font>";
// Génération de la condition -- La condition varie suivant le nombre de passage de la boucle principale
// Initialisation des variables
$inc = 0;
$rg = 1;
${'cod'.$inc} = " \${'rdm'.\$zee} == \${'rdm'.(\$zee - $rg)} ";
$inc++;
$rg++;
// Début de la boucle qui génère la condition
while ($inc <= $zee) {
${'cod'.$zee} = " ${'cod'.($zee - 1)} || \${'rdm'.\$zee} == \${'rdm'.(\$zee - $rg)} ";
$rg++;
$inc++;
}
$condition = "${'cod'.($inc - 1)}";
// Fin de la génération de la condition
echo"<br><b>Condition : $condition</b>";
if ($zee == 0) {
echo "<br>>> osp_scroll_message[<font color=blue>${'rdm'.$zi}</font>]='<a class=news href=${'rurl'.$bl}><b>${'rnews'.$np}</a>';<br><br>";
$ze++;
$np++;
$np++;
$bl++;
$bl++;
$zi++;
$zee++;
$rg++;
$inc++;
// LE PROBLEME EST ICI -- Je veux juste que la condition soit celle générée ci dessus
// Ici je l'ai écrite manuellement mais elle ne varie pas en fonction du nombre de passage de la boucle principale
// Dans cet exemple la condition n'est valable que pour un nombre de passages de la boucle inférieur à 22
} elseif (${'rdm'.$zee} == ${'rdm'.($zee - 1)} || ${'rdm'.$zee} == ${'rdm'.($zee - 2)} || ${'rdm'.$zee} == ${'rdm'.($zee - 3)} || ${'rdm'.$zee} == ${'rdm'.($zee - 4)} || ${'rdm'.$zee} == ${'rdm'.($zee - 5)} || ${'rdm'.$zee} == ${'rdm'.($zee - 6)} || ${'rdm'.$zee} == ${'rdm'.($zee - 7)} || ${'rdm'.$zee} == ${'rdm'.($zee - 8)} || ${'rdm'.$zee} == ${'rdm'.($zee - 9)} || ${'rdm'.$zee} == ${'rdm'.($zee - 10)} || ${'rdm'.$zee} == ${'rdm'.($zee - 11)} || ${'rdm'.$zee} == ${'rdm'.($zee - 12)} || ${'rdm'.$zee} == ${'rdm'.($zee - 13)} || ${'rdm'.$zee} == ${'rdm'.($zee - 14)} || ${'rdm'.$zee} == ${'rdm'.($zee - 15)} || ${'rdm'.$zee} == ${'rdm'.($zee - 16)} || ${'rdm'.$zee} == ${'rdm'.($zee - 17)} || ${'rdm'.$zee} == ${'rdm'.($zee - 18)} || ${'rdm'.$zee} == ${'rdm'.($zee - 19)} || ${'rdm'.$zee} == ${'rdm'.($zee - 20)} || ${'rdm'.$zee} == ${'rdm'.($zee - 21)}
) {
echo"<font color=red><br>## ${'rdm'.$zee} est une valeur déja utilisée ! ##</font><br><br>";
$zee++;
} else {
echo "<br>>> osp_scroll_message[<font color=orange>${'rdm'.$zi}</font>]='<a class=news href=${'rurl'.$bl}><b>${'rnews'.$np}</a>';<br><br>";
$ze++;
$np++;
$np++;
$bl++;
$bl++;
$zi++;
$zee++;
$rg++;
$inc++;
}
}
// FIN DE LA SECONDE PARTIE
?>
Exécutez maintenant ce scrip dans un navigateur, ca va vous éclairer sur le fonctionnement du script.
Tout fonctionne à merveille mais ma seule question est :
Quel est le moyen de mettre l'expression contenue dans la variable $condition dans elseif( ) ??
(voir code ci dessus)
Merci de votre aide
Marsh Posté le 27-06-2003 à 15:40:27
ReplyMarsh Posté le 27-06-2003 à 17:42:49
Ok tu dis qu'il y a un mauvais emploi de feof c'est bien mais ca serait encore mieux si t'étais plus explicite
Marsh Posté le 27-06-2003 à 17:44:57
ben tu vas voir sur PHP.net ou tu fais une recherche sur le forum (catégorie C, mais c'est valable en PHP) et tu vois pas toi meme. je passe mon temps à critiquer les enmplois de feof...
Marsh Posté le 28-06-2003 à 12:00:41
Code :
|
Marsh Posté le 27-06-2003 à 10:25:19
Je souhaite mettre une condition dans une variable pour ensuite utiliser cette condition en appelant la variable.
On m'a conseillé de faire ce qui suit mais ca marche pas:
<?
$cond = "1 == 2";
$block = ($cond);
if("$block" )
{
echo" ca marche ";
}
?>
Ca affiche "ca marche alors que ca ne devrait pas s'afficher.
Ou est le problème ?? Merci de votre aide