Page 1 sur 1

2 tables pour galerie photos

Posté : 04 mai 2010, 11:28
par fabrice88250
Bonjour,
pour mon site je suis en train de faire une galerie photos avec differentes galeries. J'ai donc créé 2 tables, une pour les titres des galeries et descriptions et l'autre pour les photos.
dans chaque table j'ai donc créé un champ identique aux 2 tables que j'ai appelé "type" (qui est le nom de la galerie).

Pour le moment j'ai fait 2 requettes : une qui affiche le titre de la galerie et sa description et l'autre qui affiche toutes les photos (toutes galeries confondues) sur une meme page car je ne sais pas comment faire autrement.

En fait j'aimerai avoir comme resulatat :

- un menu avec les differnetes galeries
- Lorsque je clique sur un lien du menu j'ai les photos correspondantes qui s'affiche (table IWgalerie) avec le titre correspondant à la galerie (IWgalerietitre)

voici mon code que j'aimerai adapté.
<?PHP  
			$sqltype = "SELECT type, description FROM IWgalerietitre;"; // requéte SQL   
			$reqtype = mysql_query($sqltype) or die('<u>Probleme SQL</u> : '.$sqltype.'<br>'.mysql_error());  // envoie de la requ&ecirc;te  

			while($resultype = mysql_fetch_array($reqtype))   
            	{  
				echo $resultype['type'].'<br/>';  
				echo $resultype['description'].'<br/>';  
				}  

			$sql = "SELECT * FROM IWgalerie, IWgalerietitre WHERE IWgalerietitre.type = IWgalerie.type;"; // requéte SQL   
			$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  // envoie de la requ&ecirc;te  



			while($resultat = mysql_fetch_array($req))   
            	{  
				echo' 
				<div class="photogal">  '.$resultat['type'].'<br/>'.$resultat['description'].'<br/>
				<a href="../images/galerie/'.$resultat['photoref'].'" rel="lightbox[groupe]" title="'.$resultat['alt'].'" >  
				<img src="mini-galerie.php?f='.$resultat['photoref'].'" alt="'.$resultat['alt'].'" border="0" />
				</a><div class="clear"></div>
				'.$resultat['ref'].'
				</div> 				';  
				}  

?>

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 11:55
par visualight
Bonjour,

Le principe :

1. Créer une liste déroulante dont les résultats (en l'occurrence : type) est affiché dynamiquement par la base de donnée
Cette liste "dynamique" doit être dans un formulaire (<form ...> </form>).

2. Lorsque l'on clique sur un élément de la liste le formulaire soummet la valeur de l'élément choisi et le transmet à une requête mysql (dans la clause WHERE) qui s'occupera d'afficher la galerie correspondante.

Code : Tout sélectionner

// CREATION DE LA LISTE DEROULANTE DYNAMIQUE // Je préfère utiliser la jointure de tables $sql = "SELECT type FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type)"; $req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error()); // Remplacer les XXXXXXXXXXXXX par la page de soumission du formulaire (je ne la connais pas) echo '<form id="filterForm" name="filtertype" method="post" action="XXXXXXXXXXXXXXXXX"> <select name="type" onChange="javascript:document.filtertype.submit()"> <option value="#" selected>Filtrer par type de galeries</option>'; /*ICI tu peux voir que j'utilise le type de galerie dans la valeur de l'option (option value). Quand le formulaire sera soumis, il ne te suffira que de "choper" $_POST['type'] pour l'insérer dans la requete d'affichage de la galerie (dans la clause WHERE)*/ while($resultat = mysql_fetch_array($req)) { $type=$resultat['gallery_type']; echo '<option value="'.$type.'">'.$type.'</option>'; } echo '</select></form>';

Voici un tuto sur les jointures : http://sqlpro.developpez.com/cours/sqlaz/jointures/

A toi de voir pour le reste... reviens nous voir si tu rencontre des difficultés avec le morceau de code incriminé et les explications nécessaires avec les tests que tu as effectués.

A+ ;)


EDIT : J'ai mis volontairement le code entre des balises CODE et non PHP car j'utilise du javascript pour la soumission du formulaire et les balises PHP de ce forum transforme les ":" par un autre caractère.

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 12:05
par fabrice88250
je viens de testé et j'ai ce message d'erreur :
SELECT type FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type)
Column 'type' in field list is ambiguous
au lieu d'utiliser une liste deroulante qui hestetiquement n'irra pas avec mon design serait-il possible de faire juste un liste que j'adapterai par la suite avec ul li.

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 12:06
par visualight
SELECT IWgalerie.type FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type)
Tu peux utiliser <ul><li> si tu le désires, le rpincipe pour l'affichage dynamique des valeurs est le même.

A+

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 12:09
par visualight
Sauf que si tu utilises <ul><li>, tu dois renvoyer tes valeurs non pas par $_POST mais par $_GET...

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 12:33
par fabrice88250
j'ai modifié le code pour avoir un liste au lieu d'une deroulante.
J'ai bien un resulta mais au lieu de n'avoir qu'une seule foi le nom de la galerie je l'ai autant de foi que le nombre de photos.
// CREATION DE LA LISTE DEROULANTE DYNAMIQUE

$sql = "SELECT IWgalerie.type, description FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type)";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  

while($resultat = mysql_fetch_array($req)) 
{
$type=$resultat['gallery_type'];
	echo "<a href=\"galerie-photos3.php?type=".$resultat['type']."\">";   
   	echo "".$resultat['type']."</a>";
	echo $resultat['description'].'<br/>';  
}
exemple : si 10 photos on pour type "animaux" j'ai 10 fois animaux qui s'affiche....

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 12:42
par visualight
Il faut que tu choisisse d'abord ta jointure de table.
- Essaye avec RIGHT JOIN et teste
- Essaye avec INNER JOIN et teste

http://sqlpro.developpez.com/cours/sqlaz/jointures/

Ensuite, utilise en plus de la jointure que tu as choisi un DISTINCT ou GROUP BY
SELECT DISTINCT IWgalerie.type FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type)
OU
SELECT IWgalerie.type FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type) GROUP BY IWgalerie.type

Si tu veux un ordre bien précis pour l'affichage des type (ordre croissant ou décroissant) il faut utiliser en plus :
ORDER BY IWgalerie.type DESC => pour décroissant
ORDER BY IWgalerie.type ASC => pour croissant

A+ ;)


Si tes problèmes sont résolu, penses à tagguer ton message comme tel (bouton avec un "v") ;)

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 13:52
par fabrice88250
ok merci j'ai bien mon menu qui s'affiche mais j'ai maintenant un probleme qui est celui d'afficher les photos en fonction du type.
en fait si je clique sur le nom du'une galerie j'ai bien les bonnes photos qui apparaissent mais elle apparaissent plusieurs fois.

voilà ce que j'ai fais et qui ne fonctionne pas :
$sql = "SELECT DISTINCT IWgalerie.type, description FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type);";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  

while($resultat = mysql_fetch_array($req)) 
{
	$type=$resultat['type'];
	echo "<a href=\"galerie-photos4.php?type=".$resultat['type']."\">";   
   	echo "".$resultat['type']."</a>";
	echo $resultat['description'].'<br/>';  
}
			$type = $_GET['type']; 

			$sqlgal = "SELECT * FROM IWgalerie, IWgalerietitre WHERE IWgalerie.type='$type' ORDER BY IWgalerie.type DESC ";   

			$reqgal = mysql_query($sqlgal) or die('<u>Probleme SQL</u> : '.$sqlgal.'<br>'.mysql_error());  // envoie de la requ&ecirc;te  

			while($result = mysql_fetch_array($reqgal))   
            	{  
				echo' 
				<div class="photogal">  
				<a href="../images/galerie/'.$result['photoref'].'" rel="lightbox[groupe]" title="'.$result['alt'].'" >  
				<img src="mini-galerie.php?f='.$result['photoref'].'" alt="'.$result['alt'].'" border="0" />
				</a><div class="clear"></div>
				'.$result['ref'].'
				</div> ';  
				}  

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 14:04
par visualight
Tu dois tester ta variable $_GET['type'] correctement et utiliser une jointure
if (isset ($_GET['type']) && !empty ($_GET['type'])) {
$type = $_GET['type'];

$sqlgal = "SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type=$type"; // requête SQL  
$reqgal = mysql_query($sqlgal) or die('<u>Probleme SQL</u> : '.$sqlgal.'<br>'.mysql_error());  // envoie de la requ&ecirc;te  

while($result = mysql_fetch_array($reqgal)) {  

echo' <div class="photogal">  
<a href="../images/galerie/'.$result['photoref'].'" rel="lightbox[groupe]" title="'.$result['alt'].'" >  
<img src="mini-galerie.php?f='.$result['photoref'].'" alt="'.$result['alt'].'" border="0" />
</a><div class="clear"></div>
'.$result['ref'].'
</div> ';  
}
}

maintenant il se peut que la gallerie n'affiche rien tant que une options n'a pas été choisie dans la liste avant.
Tu peux très bien afficher une galerie par défaut si rien n'est choisi :
if (isset ($_GET['type']) && !empty ($_GET['type'])) {
$type = $_GET['type'];
} else {
$type = GALERIE PAR DEFAUT;
}

$sqlgal = "SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type=$type"; // requête SQL  
$reqgal = mysql_query($sqlgal) or die('<u>Probleme SQL</u> : '.$sqlgal.'<br>'.mysql_error());  // envoie de la requ&ecirc;te  

while($result = mysql_fetch_array($reqgal)) {  

echo' <div class="photogal">  
<a href="../images/galerie/'.$result['photoref'].'" rel="lightbox[groupe]" title="'.$result['alt'].'" >  
<img src="mini-galerie.php?f='.$result['photoref'].'" alt="'.$result['alt'].'" border="0" />
</a><div class="clear"></div>
'.$result['ref'].'
</div> ';  
}
A+ ;)

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 14:11
par fabrice88250
ok merci j'avance et je comprend mieu. petit hic c'est que la requette retourne une erreur :
 SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type=Les Fleurs
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Fleurs' at line 1

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 14:16
par visualight
Il faut rajouter des quotes simples.

Exemple complet :
$sqlgal = "SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type='$type' GROUP BY IWgalerie.type ORDER BY IWgalerie.type ASC";

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 15:24
par fabrice88250
oui merci c'est bien ça.
par contre maintenant j'ai un soucis avec la description que je souhaiterai afficher quand l'internaute choisit la galerie qu'il veut voir.
j'ai refait une requet pour l'affichage de la description et elle s'affiche bien mais le soucis et qu'elle s'affiche autant de fois qu'il y a de photos...

Voilà se que j'ai fait :
// Ici on cré la requette pour afficher le menu de la galerie
$sql = "SELECT DISTINCT IWgalerie.type, description FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type);";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  

while($resultat = mysql_fetch_array($req)) 
	{
		$type=$resultat['type'];
		echo "<a href=\"galerie-photos4.php?type=".$resultat['type']."\">";   
		echo "".$resultat['type']."</a><br/>";
	}
	

if (isset ($_GET['type']) && !empty ($_GET['type'])) 
	{

		$type = $_GET['type']; 
		echo 'Vous êtes dans la galerie :  '.$type. '<br/>'; 
		
		// Ici on cré la requette pour afficher la description en fonction du type de galerie choisit
		$sqldes = "SELECT * FROM IWgalerietitre LEFT JOIN IWgalerie ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type='$type'";  
		$reqdes = mysql_query($sqldes) or die('<u>Probleme SQL</u> : '.$sqldes.'<br>'.mysql_error());  
		
		while($resultdes = mysql_fetch_array($reqdes))   
			{
			echo $resultdes['description'];
			}

		// Ici on cré la requette pour afficher les photos en fonction du type choisit
		$sqlgal = "SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type='$type'";  
		$reqgal = mysql_query($sqlgal) or die('<u>Probleme SQL</u> : '.$sqlgal.'<br>'.mysql_error());  
		
		while($result = mysql_fetch_array($reqgal))   
			{  
				echo '
				<div class="photogal">  
				<a href="../images/galerie/'.$result['photoref'].'" rel="lightbox[groupe]" title="'.$result['alt'].'" >  
				<img src="mini-galerie.php?f='.$result['photoref'].'" alt="'.$result['alt'].'" border="0" />
				</a><div class="clear"></div>
				'.$result['ref'].'
				</div> ';  
			}  
	}		



C'est bon j'ai trouvé. j'ai remplacé ma requette pour la description par :
		$sqldes = "SELECT * FROM IWgalerietitre WHERE type='$type'";  
et sa fonctionne.

Re: 2 tables pour galerie photos

Posté : 04 mai 2010, 16:28
par visualight
Tu n'es pas obligé de faire une requête pour afficher la description car la requete pour l'affichage de la gallerie suffit.
Tu travailles avec des jointures de tables et dans les deux cas, tu fais la même requete => donc inutile et en plus ça bouffe en ressources.

Ci-dessous le code SANS la requete de la description
// Ici on cré la requette pour afficher le menu de la galerie
$sql = "SELECT DISTINCT IWgalerie.type, description FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerietitre.type = IWgalerie.type);";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  

while($resultat = mysql_fetch_array($req))
        {
                $type=$resultat['type'];
                echo "<a href=\"galerie-photos4.php?type=".$resultat['type']."\">";  
                echo "".$resultat['type']."</a><br/>";
        }
       

if (isset ($_GET['type']) && !empty ($_GET['type']))
        {

                $type = $_GET['type'];
                echo 'Vous êtes dans la galerie :  '.$type. '<br/>';
               
                /* Ici on cré la requette pour afficher la description en fonction du type de galerie choisit
                $sqldes = "SELECT * FROM IWgalerietitre LEFT JOIN IWgalerie ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type='$type'";  
                $reqdes = mysql_query($sqldes) or die('<u>Probleme SQL</u> : '.$sqldes.'<br>'.mysql_error());  
               
                while($resultdes = mysql_fetch_array($reqdes))  
                        {
                        echo $resultdes['description'];
                        }*/

                // Ici on cré la requette pour afficher les photos en fonction du type choisit
                $sqlgal = "SELECT * FROM IWgalerie LEFT JOIN IWgalerietitre ON (IWgalerie.type = IWgalerietitre.type) WHERE IWgalerie.type='$type'";  
                $reqgal = mysql_query($sqlgal) or die('<u>Probleme SQL</u> : '.$sqlgal.'<br>'.mysql_error());  
               
                while($result = mysql_fetch_array($reqgal))  
                        {  

                               echo $result['description'];

                                echo '
                                <div class="photogal">  
                                <a href="../images/galerie/'.$result['photoref'].'" rel="lightbox[groupe]" title="'.$result['alt'].'" >  
                                <img src="mini-galerie.php?f='.$result['photoref'].'" alt="'.$result['alt'].'" border="0" />
                                </a><div class="clear"></div>
                                '.$result['ref'].'
                                </div> ';  
                        }  
        }


Si ton problème est résolu pense à tagguer le message comme tel !
Bouton avec un "v" dedans