Page 1 sur 2

Une requête qui se construit en listant un dossier

Posté : 16 avr. 2006, 22:19
par jpsartre
Bonjour,
J'ai bricolé cette requête qui fonctionne.
	 	$rep = "images/";
		$dir = opendir($rep); 
		while ($f = readdir($dir)) {
   if(is_dir($rep.$f)) {
	  $query = "SELECT * FROM evenements WHERE id = '".$f."' ORDER BY dd DESC";
	  $result = mysql_query($query);
	  $Record = mysql_fetch_object($result)
Je liste les noms de dossiers, ils portent chacun le numéro d'id des événements auxquels ils sont associés. Comme je n'ai pas d'info dans la base pour gérer les photos, et que je veux sortir tous les événements possédant un dossier photo je fais cette requête.
Mais j'ai un problème bizarre. Il me sort 2 événements inexistants. J'ai fait un echo sur les noms de dossier et j'ai vu qu'il trouvait . et ..
J'ai regardé par le ftp en affichant les fichiers cachés et rien, alors je me suis dit que comme le nom du dossier est forcément un chiffre, j'aurais pu préciser dans ma requête de ne prendre en compte que les chiffres pour éviter les erreurs, et surtout ces deux dossiers fantômes (. et ..)
Mais je ne vois pas du tout comment préciser ce genre de chose,
Merci pour votre aide

Posté : 16 avr. 2006, 22:23
par Truc
tu peux exclure ces deux données, un coup d'oeil dans la doc de readdir() (exemple 2) pour y voir:
if ($file != "." && $file != "..")

Posté : 16 avr. 2006, 22:37
par jpsartre
Merci,
C'est déjà rassurant de voir que c'est normal.
J'ai utilisé le code pour corriger, mais les deux événements sortent toujours, même si le . et le .. ont disparu de mes messages d'erreur.
Je vais encore essayer,
Le code :
if ($handle = opendir('images/')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
echo "$file\n";
       }
	  $query = "SELECT * FROM evenements WHERE id = '".$file."' ORDER BY dd DESC";
	  $result = mysql_query($query);
	  $Record = mysql_fetch_object($result);
Si vous avez une idée...
Merci

Posté : 16 avr. 2006, 22:47
par Truc
Hi hi, non mais l'exemple est la juste pour l'exemple faut pas faire un copier coller du tout :lol:

Faut tester les valeurs de file et si elles sont différentes de "." et ".." alors exécution du script:
if ($handle = opendir('images/')) 
{
   while (false !== ($file = readdir($handle))) 
  {
       if ($file != "." && $file != "..") 
      {
         $query = "SELECT * FROM evenements WHERE id = '".$file."' ORDER BY dd DESC";
         $result = mysql_query($query);
         $Record = mysql_fetch_object($result);
      }
   }
}
". " représente le dossier courant
".." représente le dossier parent

Par exemple pour remonter d'un niveau dans l'arborescence et aller dans le dossier "dossier1":
../dossier1

Posté : 16 avr. 2006, 22:56
par jpsartre
ça ne parche toujours pas, mais c'est vrai que je ne comprends pas pourquoi il sort un . et un .. en ouvrant mon dossier image.
Si tu peux essayer de m'expliquer,
Merci

Posté : 16 avr. 2006, 23:04
par Truc
". " représente le dossier courant
".." représente le dossier parent

Par exemple pour remonter d'un niveau dans l'arborescence et aller dans le dossier "dossier1":
../dossier1
pour appeler un fichier qui se trouve dans le même dossier que le script tu peux faire:
src = fichier.ext
src = ./fichier.ext
si tu veux appeler un fichier un niveau plus haut:
src = ../fichier.ext

Pour le script, affiches un message d'erreur sur l'exécution de la requete mysql_error() et affiche la requete générée:
echo $query;

Posté : 16 avr. 2006, 23:19
par jpsartre
Je te mets le lien j'ai enlevé la session pour que tu regardes :
http://www.lj-traiteur.com/escapades/ab ... leries.php
tu vois ce que ça fait, il liste bien le bon dossier mais sort toujours les deux enregistrements en plus, comme j'ai mis la vérification, ils ne sortent pas sur l'echo, mais c'est bien . et ..
J'avoue que je ne comprends pas bien et je sais que ../ sert à remonter d'un dossier mais je ne saisi pas le rapport ici...
Désolé si je suis pesant sur ce coup :oops:
Merci

Posté : 17 avr. 2006, 00:23
par Truc
je ne vois rien de particulier :?

Fait une simple vérification des dossier qui passent dans le test if($file ! = ...) en affichant le dossier:
if ($file != "." && $file != "..")
{ 
   echo 'le dossier est '.$file.'<br>';
}
Pour les répertoires. ils sont donc présent dans tous les dossiers

Posté : 17 avr. 2006, 00:35
par jpsartre
Tu as peut-être regardé pendant que je testais, je l'ai remis avec le echo et mon premier code pour que le problème soit visible.
On voit bien mes 5 événements numérotés, et au dessus, les . et ..
Je crois que je bloque,
Merci

Posté : 17 avr. 2006, 00:40
par Truc
Montre nous le code qui se rapporte à la lecture du dossier avec la boucle et l'affichage.

Posté : 17 avr. 2006, 00:41
par jpsartre
Enfait, en regardant en bas d'un affichage d'enregistrement, je vois qu'il compte 5 choses dans les dossiers . et ..
Il compte donc ce qu'il y a dans le dossier images, soit les 5 dossiers de mes galeries.
Mais je ne vois pas comment empêcher ça, impossible d'intégrer ta prposition, j'y arrive pas,
Mais je ne vais pas lacher l'affaire
Merci

Posté : 17 avr. 2006, 00:44
par jpsartre
Juste ça :
// Lister les dossiers contenus dans le dossier des galeries pour récupérer les noms de dossiers, donc les id		
	 	$rep = "images/";
		$dir = opendir($rep); 
		while ($f = readdir($dir)) {
   if(is_dir($rep.$f)) {
      echo "Nom : ".$f;
	  $query = "SELECT * FROM evenements WHERE id = '".$f."' ORDER BY dd DESC";
	  $result = mysql_query($query);
	 
	  $Record = mysql_fetch_object($result)
Ou toute ma page?
Merci

Posté : 17 avr. 2006, 00:46
par Truc
disons qu'à la base j'en voulais plus à me mettre sous la dent :lol:
mais rien que là on voit qu'il manque:
if ($file != "." && $file != "..") 
ce test a disparu :?

Posté : 17 avr. 2006, 00:48
par jpsartre
C'est que j'ai essayé de l'intégrer et ça ne marchait plus, j'ai dû me planter , je mets le reste (mais j'ai peur de me faire souffler dans les bronches :
<?
//session_start();
//if (session_is_registered('pseudo')) 
//{ echo 
?>
<HTML>
<HEAD>
<TITLE>administration</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<LINK rel="stylesheet" href="../style.css" type="text/css">
</HEAD>

<BODY bgcolor="#FFFFFF" text="#000000" link="#3366CC" vlink="#3366CC" alink="#3366CC">
<? 
$repere = 'Galerie';
require ('header_abonnes.php');
include ('../connexion.php');

		$commentaire = StripSlashes ($commentaire);
		$rdv = StripSlashes ($rdv);
		$description = StripSlashes ($description);
		$nom = StripSlashes ($nom);
// Lister les dossiers contenus dans le dossier des galeries pour récupérer les noms de dossiers, donc les id		
	 	$rep = "images/";
		$dir = opendir($rep); 
		while ($f = readdir($dir)) {
   if(is_dir($rep.$f)) {
      echo "Nom : ".$f;
	  $query = "SELECT * FROM evenements WHERE id = '".$f."' ORDER BY dd DESC";
	  $result = mysql_query($query);
	 
	  $Record = mysql_fetch_object($result)
         
	
		//$query = "SELECT * FROM evenements WHERE id = '".$f."' ORDER BY nom ASC";
		//$result = mysql_query($query);
	//if($result)
	//{
	 //	while($Record = mysql_fetch_object($result))
	//	{
?>
<TABLE width="800" border="0" cellspacing="3" cellpadding="0" align="center">
  <TR> 
    <TD width="30" rowspan="2" class="fond_gris"> 
      <?
			if ($Record->type == "decouverte")
				echo  '<img src="images/decouverte.gif" width="30" height="30" border=1>';
			elseif ($Record->type == "sport")
				echo '<img src="images/sport.gif" width="30" height="30" border=1>';
			elseif ($Record->type == "detente")
				echo '<img src="images/detente.gif" width="30" height="30" border=1>';
			else 
				echo '<img src="images/sejours.gif" width="30" height="30" border=1>';
	?>
    </TD>
    <TD width="270" class="fond_gris"> 
      <?=$Record->nom?>
      - ( 
      <?=$Record->type?>
      ) </TD>
    <TD width="500" align="right" class="fond_gris">Du <b> 
      <?=substr($Record->dd,8,2).'-'.substr($Record->dd,5,2).'-'.substr($Record->dd,0,4)?>
      </b> &agrave;<b> 
      <?=substr($Record->hd,0,5)?>
      </b>au <b> 
      <?=substr($Record->df,8,2).'-'.substr($Record->df,5,2).'-'.substr($Record->df,0,4)?>
      </b> &agrave; <b> 
      <?=substr($Record->hf,0,5)?>
      </b></TD>
  </TR>
  <TR> 
    <TD class="fond_gris"> REF : 
      <?=$Record->ref?>
      | PRIX : 
      <?=$Record->prix?>
      &euro; </TD>
    <TD class="fond_gris">LIEU RDV : 
      <?=$Record->rdv?>
    </TD>
  </TR>
  <TR> 
    <TD colspan="3" class="fond_gris">Places disponibles 
      <?
$dispo = $Record->maxi - $Record->reserve;
	if ($Record->maxi)
		echo '<B>'.$dispo.'</B>';
	else 
		echo '';
	?>
      | Maximum participants 
      <?=$Record->maxi?>
      | Minimum participants 
      <?=$Record->mini?>
      | R&eacute;servations 
      <?=$Record->reserve?>
    </TD>
  </TR>
  <TR> 
    <TD colspan="3" class="fond_gris">DESCRIPTION : 
      <?=$Record->description?>
    </TD>
  </TR>
  <TR> 
    <TD colspan="3" class="fond_gris">COMMENTAIRE : 
      <?=$Record->commentaire?>
    </TD>
  </TR>
  <TR align="right"> 
    <TD colspan="3" class="titre_gris"> 
      <?
//vérification de l'existence du dossier
//if(is_dir('../abonnes/images/'.$id.'/')) 
if(is_dir('images/'.$Record->id.'/'))
{
// on compte le nombre de photo dans le dossier
				$nb_f = 0;

$opdir = opendir('images/'.$Record->id.'/');
while ($c = readdir($opdir)) 
{
   if (!is_dir($c)) $nb_f++;
}

closedir($opdir);

echo ("LA GALERIE CONTIENT ".$nb_f." PHOTOGRAPHIES | ");
?>
      <a href="archives_galerie.php?id=<?=$Record->id?>">VOIR LES PHOTOS</a> 
      <?
				}    
			else
			{
				echo  'PAS DE GALERIE';
				}
	$compte = mysql_query("SELECT Count(*) FROM evenements WHERE id = '".$Record->id."' AND statut = 1");
    $okpanier = mysql_result($compte, 0);
	if ($okpanier)
	{
?>
      | <a href="galeries.php?pseudo=<?=$_SESSION['pseudo']?>&ref=<?=$Record->ref?>&ADD=1?>">SELECTIONNER</a> 
      <?
	  }

	  ?>
    </TD>
  </TR>
  <TR> 
    <TD colspan="3"> <hr></TD>
  </TR>
</TABLE>
<?
		}
	}
//	else{
//			echo"erreur de requête";
//}
mysql_close();
?>
<? //} else{
//header("location: http://www.lj-traiteur.com/escapades/index.php?pass=no");

//}
?>
</BODY>
</HTML>
Et tu as vu en suivant le lien?
Merci

Posté : 17 avr. 2006, 00:53
par Truc
Bon effectivement pas 200 lignes non plus :lol:

utilise ceci:
$rep = "images/";
$dir = opendir($rep);

while ($f = readdir($dir)) 
{
	//s'il s'agit d'un répertoire ET qu'il ne s'agit pas du courant ou parent
        if(is_dir($rep.$f) && $f != "." && $f != ".." ) 
	{
		echo "Nom : ".$f;
		$query = "SELECT * FROM evenements WHERE id = '".$f."' ORDER BY dd DESC";
		$result = mysql_query($query);
		
		$Record = mysql_fetch_object($result)
		
		...