Les Allergies
Alimentaires
Posez votre question Signaler

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

Jhon80 3Messages postés 10 mai 2009Date d'inscription - Dernière réponse le 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.
Lire la suite 

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

9 réponses
Réponse
+0
moins plus
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..
Jhon80- 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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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.
Jhon80- 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 :)
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 .=
Ajouter un commentaire
Réponse
+0
moins plus
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 ;-)
Ajouter un commentaire
Ce document intitulé « [PHP] Problème avec la boucle for et if » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?