Problème de variables indéfinies

Petit nouveau ! | 3 Messages

26 avr. 2007, 13:20

Bonjour à tous,

J'ai toujours un problème de variables indéfinies.
Voici une partie de mon code :

Code:

Code : Tout sélectionner

<?PHP $Num = 0; for ($Num=0;$Num<6;$Num++) { ?> <p class="Style4"><u>Syllabi GJ</u> </p> <p> <?PHP function explorer($chemin) { $repertoire[$Num]= openDir($chemin); while ($fichier[$Num] =readDir($repertoire[$Num])) { if (($fichier[$Num] != ".")&&($fichier[$Num] != "..")) { $L = strlen($fichier[$Num]); ?> <?PHP $langue[$Num] = substr($fichier[$Num], 11, 1); if ($langue[$Num] == "F") { $a = "_"; $b = " "; $supp[$Num] = ereg_replace($a, $b, $fichier[$Num]); ?> <span class="Style5"> <img src="images/pointblanc.png" /> <a href="051411_GJ/<?PHP echo $fichier[$Num]; ?>"><?PHP echo substr($supp[$Num], 0, $L-4); ?></a> </span> <br> <?PHP } } } closeDir($repertoire[$Num]); } $cheminRep = "0"; $cheminRep0 = "051411_GJ"; $cheminRep1 = "051442_GJ"; $cheminRep2 = "051443_GJ"; $cheminRep3 = "051444_GJ"; $cheminRep4 = "051445_GJ"; $cheminRep5 = "051446_GJ"; explorer(${"cheminRep".$Num}); ?> </p> <?PHP } ?>
Je prend un exemple : $repertoire[$Num]= dans le code, cela me donne toujours une erreur de variable indéfinie.
Les autres variables me posent le même problème.
Comment puis-je résolver mon problème?
Cette application me sert à afficher le contenu de plusieurs répertoires.

Merci d'avance,

Domi

ViPHP
ViPHP | 5924 Messages

26 avr. 2007, 13:37

La portée des variables, la portée des variables !!!
http://fr.php.net/manual/fr/language.va ... .scope.php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 avr. 2007, 13:49

et l'indentation du code !! et l'indentatiooonnn !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 avr. 2007, 14:01

Correction:
1. distinguer les fonctions du programme principal
2. Eviter trop d'incrustaions HTML/PHP (<?PHP et ?>)
3. Passer les paramètres à la fonction ou utiliser le mot "global"
<?php
//chemins à expolrer
$cheminRep = "0"; 
$cheminRep0 = "051411_GJ"; 
$cheminRep1 = "051442_GJ"; 
$cheminRep2 = "051443_GJ"; 
$cheminRep3 = "051444_GJ"; 
$cheminRep4 = "051445_GJ"; 
$cheminRep5 = "051446_GJ"; 

//boucle d'explorartion
for ($Num=0;$Num<6;$Num++) { 
?> 
<p class="Style4"><u>Syllabi GJ</u> </p> 
<p> 
<?PHP
explorer(${"cheminRep".$Num} , $Num); 
?> 
</p> 
<?PHP 
} //fin for

//Fonction d'exploration
function explorer($chemin, $Num) { 
	$repertoire[$Num]= openDir($chemin); 
	while ($fichier[$Num] =readDir($repertoire[$Num])) { 
		if (($fichier[$Num] != ".")&&($fichier[$Num] != "..")) { 
			$L = strlen($fichier[$Num]); 
			$langue[$Num] = substr($fichier[$Num], 11, 1); 
			if ($langue[$Num] == "F") { 
				$a = "_"; 
				$b = " "; 
				$supp[$Num] = ereg_replace($a, $b, $fichier[$Num]); 
?> 
<span class="Style5"> 
<img src="images/pointblanc.png" /> 
<a href="051411_GJ/<?PHP echo $fichier[$Num]; ?>"><?PHP echo substr($supp[$Num], 0, $L-4); ?></a> 
</span> 
<br> 
<?PHP 
			}//fin if 
		} //fin if
	} //fin while
	closeDir($repertoire[$Num]); 
} //Fin fonction
?>
Mais ce programme peut être simplifié. Par exemple, l
1. a fome tableau n'est pas utile pour les variables $repertoire[$Num], $fichier[$Num], $langue[$Num] et $supp[$Num] qui ne sont jamais réutilisées. Du coup le paramètre $Num n'est plus utile pour la fonction.

2. la forme ${"cheminRep".$Num} est une possibilité de PHP mais en aucun cas une forme standard, elle correspond en effet à la forme standard d'un tableau : Il est donc préférable de la remplacer par une forme comme : $chemins[$num] et de stocker les chemins dans le tableau (array) $chemins.
La boucle for peut être simplifiée en la remplaçant par l'énumérateur foreach, puisqu'on a plus besoin de la variable $Num.

Cette simplification donnerait un truc comme ça:
<?php
//chemins à expolrer
$chemins = array("0","051411_GJ", "051442_GJ", "051443_GJ", "051444_GJ", "051445_GJ", "051446_GJ"); 

//boucle d'explorartion
if ($chemins && is_array($chemins))
foreach ($chemins as $chemin) { 
?> 
<p class="Style4"><u>Syllabi GJ</u> </p> 
<p> 
<?PHP
explorer($chemin); 
?> 
</p> 
<?PHP 
} //fin for

//Fonction d'exploration
function explorer($chemin) { 
	$repertoire= openDir($chemin); 
	while ($fichier =readDir($repertoire)) { 
		if ($fichier != "." && $fichier != "..") { 
			$L = strlen($fichier); 
			$langue = substr($fichier, 11, 1); 
			if ($langue == "F") { 
				$supp = ereg_replace("_", " ", $fichier); 
?> 
<span class="Style5"> 
<img src="images/pointblanc.png" /> 
<a href="051411_GJ/<?PHP echo $fichier; ?>"><?PHP echo substr($supp, 0, $L-4); ?></a> 
</span> 
<br> 
<?PHP 
			}//fin if 
		} //fin if
	} //fin while
	closeDir($repertoire); 
} //Fin fonction
?>
Modifié en dernier par sadeq le 26 avr. 2007, 14:18, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
ViPHP | 5924 Messages

26 avr. 2007, 14:17

4. Utiliser des classes si besoin s'en fait sentir...

Petit nouveau ! | 3 Messages

26 avr. 2007, 14:28

Merci de vos réponses.
J'examine tous çà et vous dit quoi.

Encore merci.

Petit nouveau ! | 3 Messages

26 avr. 2007, 16:15

Je tiens à remercier spécialement sadeq qui m'a franchement aidé dans ma recherche.
Sa solution fonctionne parfaitement et je vois réellement plus clair maintenant.
Merci d'avoir pris de ton temps pour analyser et solutioner mon problème.

Profitez qu'en même du bon temps les gars!

A+