Page 1 sur 1

Mon code ne fonctionne qu'en partie !

Posté : 17 août 2009, 15:37
par fabrice88250
Bonjour,

Voilà je me remets au boulot sur mon site perso et ma galerie photos et je reprends là ou je beuguai il y a quelque temps et ou je bug toujours d'ailleurs.

Mon code scan un répertoire dans lequel il y a des photos et d'autres répertoires pouvant contenir eux même des photos et autre sous répertoire. Pour l'affichage des images et des répertoires mon code fonctionne à merveille.
Maintenant je mets en place un system qui permet d'ajouter à ma base de données les informations sur les noms de répertoires et les photos que ces répertoires contiennent.
J’ai donc créé 2 tables(IWgaleriephoto et IWgalerie), une pour récupérer les noms de répertoires et un autre pour récupérer le nom des photos.
Pour récupérer le nom de répertoire sa fonctionne très bien je récupère donc les noms des répertoires et sous répertoires et sous répertoire sans problème dans ma base de données.

Maintenant j'essai e faire la même chose mais avec les images qui sont dans le répertoire et sous répertoires..... Mais c'est la que sa ne fonctionne pas complètement.
En fait, j'arrive juste à récupérer dans ma base de données les noms de photos qui sont dans le répertoire d'origine et pas les sous répertoires.

Je vous mets mon code car son fait des semaines que je suis dessus et je commence à désespérer.
Pouvez-vous me donner un coup de main svp ?

<?php 

include("connexion-sql.php");

// Fonction pour parcourir les dossiers 
function lireDossier($dir_nom) 
{ 
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant 
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers 
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers 

    while($element = readdir($dir)) 
	{ 
        if($element != '.' && $element != '..') 		
		{ 
            if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;} 
            else {$dossier[] = $element;} 
        } 
    } 
	
    closedir($dir); 
    return array('dossier'=>$dossier,'fichier'=>$fichier); 
} 


$dir_nom = (isset($_GET['dir'])) ? $_GET['dir'] : '../images'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point') 
$nom_rep = basename($dir_nom); // affiche le nom repertoire dans lequel la page est.

// Récupérations des infos sur le dossier racine. 
$infosDossier = lireDossier($dir_nom); 
$dossier = $infosDossier['dossier']; 
$fichier = $infosDossier['fichier']; 

if(!empty($dossier)) { 
    sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant 
    echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n"; 
    echo "<br/>";
	

        foreach($dossier as $lien)
		{ 
            // Récupération des infos sur un sous dossier 
            $infosSousDossier=lireDossier($dir_nom.'/'.$lien); 
            // Pour choisir aléatoirement une de ses images 
            shuffle($infosSousDossier['fichier']); 
            // ATTENTION : Je n'ai pas traité le cas des sous dossiers vides 			
            echo '
			<div class="col400panocerf">
			<a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'">
			<img width="100px" height="100px" src="'.$dir_nom.'/'.$lien.'/'.$infosSousDossier['fichier'][0].'"/>
			</a>
			<a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'">'.$lien.'</a><br/>';
			
			
			$sql = 'SELECT * FROM IWgalerie'; 
			$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); 
			while($data = mysql_fetch_array($req)) 
			{ 
				
				if($lien == $data['repertoire'])
				{
				 echo  '' .$data['desc']. '<br/>';				
				}
			}
			
			echo '</div>'; 
			
			} 
		}





// affichage des images contenu dans le repertoire séléctionné.


echo "<div class='clear20px'></div>";
if(!empty($fichier)){ 
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant 
		
    echo "
	<h1>Vous êtes dans la galerie  <span class='gris'>".$nom_rep."</span> </h1>
	Liste des fichiers/documents accessibles dans '$dir_nom' :<br/>"; 
        foreach($fichier as $lien) { 
        $size = GetImageSize("$dir_nom/$lien");            


    //Largeur maximale de l'image pour la cr&eacute;ation des miniatures  
    $largeur_maxi = 100; 
    $hauteur_maxi = 100;  
    if ($size[0] > $largeur_maxi)  
        {  
            $width = $largeur_maxi;  
            $theight = ($size[0]/$largeur_maxi);  
            $height = ($size[1]/$theight);  
        } 

	 
    else  
        {  
            //Sinon on garde la taille originale  
            $width = $size[0]; $height = $size[1];  
        }  
		
		// Verification de l'extension d'image
		 $ext = strtolower(substr($lien, strrpos($lien, '.') + 1));
		 if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="gif") || ($ext=="bmp") || ($ext=="png")) 
		 {
		  // Lien vers l'image
	
            echo "
			 
			<div class='highslide-gallery'>
			<ul>
			<li><a href=\"$dir_nom/$lien \" class=\"highslide\" onclick=\"return hs.expand(this)\">
			<img src=\"$dir_nom/$lien \" width=".$width." height=".$height." alt=\"Photo des Vosges : $lien\" title=\"Photo des Vosges : $lien\"/>
			</a>
			</li>";
			echo "
			<div class='highslide-caption'>
			".$lien." taille : " .$size[0]. " X  " .$size[1]. "
			</div>
			</ul>
			</div>"; 
		}	
        } 
    echo ""; 
 } 



//insertion des noms de répertoires dans la base de données : si un nom existe déjà on ajoute pas.

foreach($dossier as $d)	
{
// $d étant le nom du répertoire et pas un Array ;)
$sql = 'SELECT COUNT(id) as nb FROM IWgalerie WHERE repertoire = "'.$d.'"';
$sql = mysql_query($sql) or die(mysql_error());
$nb = mysql_fetch_object($sql);
if($nb->nb == 0) {
   $sql = "INSERT INTO IWgalerie (id, repertoire) VALUES('','$d')"; mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error()); 
}
else {
    echo $d. 'existe déjà';
}
}
mysql_close(); 
?> 

Re: Mon code ne fonctionne qu'en partie help!

Posté : 17 août 2009, 16:03
par zeus
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP !", "Aidez-moi", "J'ai un problème", "Ça marche pas",...
n'apportent rien à la compréhension de ta demande.

Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.

Re: Mon code ne fonctionne qu'en partie !

Posté : 17 août 2009, 16:17
par fabrice88250
alors voilà j'ai avancé. maintenant j'arrive a recuperer mes images dans ma table IWgaleriephoto. par contre dans cette table je voudrai également recuperer le nom du repertoire dans lequel l'image se trouve (sinon y'a pas d'interet).
J'ai donc créer 2 requet sql, une pour recuperer dans ma table iwgalerie mes noms de repertoires et sous repertoire, et une autre requet qui recupere tous les noms des photos qui sont dans le repertoire et sous repertoire et ce en une seule fois. (j'aurai aimer que sa se fasse uniquement que lorsque l'on va dans un repertoire pour aléger le traitement mais on verra ça plus tard).
Le probleme que j'ai est que je n'arrive pas a recuperer le nom du repertoire associé à la photo dans la deuxieme requet. (je recupere le même nom de repertoire pour toutes mes images--> 8-| )
Comment puis-je faire pour recuperer le bon nom de repertoire pour chaque photos ?

voici donc mes 2 requetes :
//insertion des noms de répertoires dans la base de données : si un nom existe déjà on ajoute pas.

foreach($dossier as $d)	
{
// $d étant le nom du répertoire et pas un Array ;)
$sql = 'SELECT COUNT(id) as nb FROM IWgalerie WHERE repertoire = "'.$d.'"';
$sql = mysql_query($sql) or die(mysql_error());
$nb = mysql_fetch_object($sql);

if($nb->nb == 0) 
{
   $sql = "INSERT INTO IWgalerie (id, repertoire) VALUES('','$d')"; mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error()); 
}
else 
{
    echo $d. 'existe déjà';
}
}

echo '<br/>';

//insertion des noms de photos dans la base de données IWgaleriephotos: si un nom existe déjà on ajoute pas.
foreach($fichier as $f)	
{
// $f étant le nom du répertoire et pas un Array ;)
$sql = 'SELECT COUNT(id) as nbp FROM IWgaleriephoto WHERE photo = "'.$f.'"';
$sql = mysql_query($sql) or die(mysql_error());
$nbp = mysql_fetch_object($sql);

if($nbp->nbp == 0) 
{
   $sql = "INSERT INTO IWgaleriephoto (id, photo, repertoire) VALUES('','$f','$d')"; mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error()); 
}
else 
{
    echo $f. 'existe déjà';
}
}

mysql_close(); 

Re: Mon code ne fonctionne qu'en partie !

Posté : 17 août 2009, 22:12
par AB
A mon avis c'est que ta liste de dossiers/fichiers n'est pas bien préparée avec la fonction "lireDossier"

En reprenant le même principe on peut créer un tableau avec les dossiers et sous-dossiers comme clés du tableau.

Testes ce code dans une page séparée et tu verras que le tableau généré est sans doute plus facilement exploitable :
class List_dossier 

{

	private $tab_list = array();
	private $message = null;


	public function __construct ($dos = null)
	{
	if (isset($dos) && is_dir($dos)) $this->Lire_Dossier($dos); else $this->message = 'Ce dossier n\'existe pas';	
	}


	private function Lire_Dossier($dir_nom)
	{
			$dir = opendir($dir_nom);
			
			 while($element = readdir($dir))
				{
					if($element != '.' && $element != '..')                
						{
							 if (!is_dir($dir_nom.'/'.$element)) 
								{
								 $this->tab_list[$dir_nom][] = $element;
								 }
							 else 
								 {
								 $this->Lire_Dossier($dir_nom.'/'.$element);
								 }
						}
				}
			   
			closedir($dir);
		
	}

	
	public function Affiche ()
	{
	if (!isset($this->message)) return $this->tab_list; else return $this->message;
	}
}


// remplace 'Mon_dossier' par un de tes dossiers
$dossier = new List_dossier('Mon_dossier');

// Contrôle du contenu du tableau généré avec $dossier->Affiche()
echo '<pre>';
print_r($dossier->Affiche());
echo '</pre>';

Re: Mon code ne fonctionne qu'en partie !

Posté : 18 août 2009, 11:13
par fabrice88250
bonjour et merci pour ton aide.
j'ai essayé d'intégré ton code dans le mien mais sa me met des erreur du genre :

Code : Tout sélectionner

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /homepages/44/d178593088/htdocs/nouveau/pages/test-galerie2.php on line 98
la ligne 98 est
        private $tab_list = array();
en fait je sais pas trop ou je doit mettre ton code et se que je dois remplacer. #-o

Re: Mon code ne fonctionne qu'en partie !

Posté : 18 août 2009, 11:51
par zeus
Testes ce code dans une page séparée
Si la ligne que tu nous montres est la ligne 98, je pense que tu n'as pas respecté ce que t'as dit AB.
Et vu l'erreur, je pense que la déclaration de la classe (le code de AB) est dans une autre classe ou dans une autre boucle, et que c'est la cause du soucis.