[PHP] Problème avec la boucle for et if

Fermé
Jhon80 Messages postés 3 Date d'inscription dimanche 10 mai 2009 Statut Membre Dernière intervention 10 mai 2009 - 10 mai 2009 à 16:00
empty Messages postés 837 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 février 2016 - 11 mai 2009 à 11:31
Bonjour,

j'essaie de mettre le résultat d'une boucle dans la condition d'un if, je m'explique

PHP:
$string = $_GET['v'];

$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
for ($i=$ligne; $i<$nbligne; $i++) {

if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}
if ($texte) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }



J'obtient avec ma boucle
Code:
(substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1)
et j'aimerais que dans le if qu'il suit apparaissent ceci

Code:
if ((substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1))


Voila mon problème en espérant que cela soit possible.

Merci d'avance.
A voir également:

7 réponses

Bonjour

Je ne suis pas sûr d'avoir compris ce que tu veux, mais je pense que c'est
if (eval($texte)) {...
mais tu auras peut-être une surprise, je pense qu'il te manque des ' (ou des " ) autour de tes chaînes de 000000..
0
Jhon80 Messages postés 3 Date d'inscription dimanche 10 mai 2009 Statut Membre Dernière intervention 10 mai 2009
10 mai 2009 à 18:54
Sa na pas l'air de fonctionner, sa me retourne:

Parse error: parse error in C:\Program Files\wamp\www\test/test.php(17) : eval()'d code on line 1

Peut être ai je mal place le code ?
0
non, ce sont les ' qui te manquent. le 1er paramètre de substr doit être une chaîne, donc entouré de ', comme je te l'avais dit. Et si tu les as mis, tu as peut être oublié le ; à la fin de ton expression, à l'intérieur de l'expression évaluée.
0
Jhon80 Messages postés 3 Date d'inscription dimanche 10 mai 2009 Statut Membre Dernière intervention 10 mai 2009
10 mai 2009 à 19:50
Voila j'ai essayer avec les ' et les ; mais rien n'y fait.


$string = $_GET['v'];

$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;

for ($i=$ligne; $i<$nbligne; $i++) {

if ($i == $nbligne - 1) {
$texte = "(substr('$string', $i, 1); == 1)";
}else {
$texte = "(substr('$string', $i, 1); == 1)&&";
}echo $texte."<br><br>";
}

if(eval($texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }


J'ai dut faire une erreur ailleurs mais bon je découvre cette fonction :)
0
Utilisateur anonyme
10 mai 2009 à 20:25
Bonsoir,
J'ai essayé avec ce code :
<?php
$string = "vjoifj"; // Pour tester

$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
$texte=""; // J'ai rajouté ça
for ($i=$ligne; $i<$nbligne; $i++) {

if ($i == $nbligne - 1) {
$texte .= "(substr('$string', $i, 1); == 1)"; // Un . après le $texte
}else {
$texte .= "(substr('$string', $i, 1); == 1)&&"; // Un . après le $texte
}echo $texte."<br><br>";
}

if($texte) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; } 
?>

J'ai mis des commentaires.
Et sur l'écran, j'ai :
UN DES CHIFFRE A 1

Je sais pas trop à quoi sert ton programme, donc je ne sais pas ce qu'il faut obtenir.
0
Adenpra, je crois que tu n'as pas compris la différence qu'il y a entre if ($texte) et if (eval ($texte)).
Jhon80, Adenora a raison pour les . de $texte .=
Et tu as mis les ; n'importe où.
D'après ton programme, tu essayes d'évaluer (si tu n'avais pas oublié les ".")
(substr('$string', $i, 1); == 1)&&(substr('$string', $i, 1); == 1)

Qu'est ce que ces ; viennent faire au milieu de l'expression ? C'est à la fin qu'il en faut, pas au milieu
De plus, si tu étais allé voir le manuel PHP pour l'instruction eval, tu aurais vu qu'il faut mettre un return si tu veux obtenir le résultat que tu recherches.
Et pourquoi distinguer dans ta boucle la dernière boucle des autres ? Tu ajoutes systématiquement ton expression avec && sans te poser de questions, quand tu as fini tu enlèves les deux derniers caractères.
Mais surtout, pourquoi utiliser une méthode aussi tordue pour faire ce test ? Pourquoi ne pas tester la présence d'un un à chaque boucle tout simplement, au lieu de fabriquer du code pour l'exécuter plus tard ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
11 mai 2009 à 10:26
J'ai juste fait copier-coller de son code, j'ai pas regardé les fautes. ;(
Et j'ai testé, if (eval ($texte)) et ça ne fonctionne pas.
0
Désolé si tu t'es sentie offensée, ça n'était pas mon intention. C'était juste pour rappeler que jhon80 avait besoin d'utiliser eval pour faire exécuter un code créé dynamiquement, ce qui semblait être son intention. Même si je dis plus loin qu'à mon avis créer du code est un moyen tordu pour obtenir le résultat recherché
if (eval ($texte)) marche très bien. Je l'ai testé aussi. Mais je savais que ça allait marcher, c'est dans le manuel PHP qui a beaucoup plus souvent raison que les témoignages qu'on trouve dans les forums :-D
Mais tu as tout à fait raison pour les points qui manquaient pour concaténer $texte .=
0
empty Messages postés 837 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 23 février 2016 176
11 mai 2009 à 11:31
Met tes résultat dans un tableau au lieu de faire :
if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}


fais

if ($i == $nbligne - 1) {
$texte []= "(substr($string, $i, 1) == 1)";
}else {
$texte []= "(substr($string, $i, 1) == 1)&&";
}echo implode("", $texte);
}


et puis

if (implode("", $texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }

J'ai mis en gras les changements ;-)
0