Problème de variables indéfinies

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de variables indéfinies

par domuxy » 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+

Merci

par domuxy » 26 avr. 2007, 14:28

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

Encore merci.

par Sékiltoyai » 26 avr. 2007, 14:17

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

par sadeq » 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
?>

par Ryle » 26 avr. 2007, 13:49

et l'indentation du code !! et l'indentatiooonnn !!! ;)

par Sékiltoyai » 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

Problème de variables indéfinies

par domuxy » 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