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

Jhon80 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
empty Messages postés 931 Statut Membre -
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

le père
 
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   Statut Membre Dernière intervention  
 
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
le père
 
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   Statut Membre Dernière intervention  
 
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
 
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
le père
 
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
 
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
le père
 
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 931 Statut Membre 176
 
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