Page 1 sur 2

Présentation Photos pour Site

Posté : 21 oct. 2005, 00:21
par Photographiquement Vôtre
Bonsoir,

J'ai mis dans une table mes photos :

ID Index_Theme Légende_Image Ref_Image
(séquentiel)

J'aimerais faire apparaître ces images en 4 colonnes avec sur une ligne les photos (Ref_Image) et sur la ligne suivante la légende (Légende_Image) et ainsi de suite.

Merci d'avance pour votre aide

Posté : 21 oct. 2005, 01:07
par Truc
Salut, avec une recherche sur "modulo" tu aurai trouvé pas mal de solution exploitables :wink:

mais en voici une qui correspondrai a ce que tu souhaite:
<?
$requete; //requete pour récupèrer les infos
$res=mysql_query($requete);
$tab=array();
$cpt=0;
?>
<table>
<tr>
<?
while ($data=mysql_fetch_array($res)) //boucle tant qu'il y a des données dans le résultat 
{
   ?>
   <td>
       <img ...> 
   </td>';
   <?
   
   $tab[]=$data['Légende_Image'];  
   $cpt++;
   if ($cpt % 4 == 0) // si les 4 colonnes sont construites
   {
        echo "</tr><tr>";
		foreach ($tab as $value) //affichage des légendes
		{
			echo "<td>".$value."</td>";
		}
		echo "</tr>";
		array_splice ($tab, 0);	// remise a zéro du tableau
   }
          
}
?>
</tr>
</table>
parcontre je te donne tous le code (je l'avais sous la main), ne reviens pas avec une erreur de point virgule simple a corriger :wink:

Posté : 21 oct. 2005, 08:54
par Cyrano
Attention : en utilisant un modulo, il faut démarrer le pointeur à 1 et non à 0 : sinon, tu démarres en testant le reste de 0/4 ce qui va donner 0 et fermer la ligne de façon intempestive. Donc il faut ici initialiser $cpt à 1.

Galerie Image

Posté : 22 oct. 2005, 14:22
par Haute Definition
Merci beaucoup mais je ne vois pas apparaître les légendes à partir du deuxième rang de photos !!!!
/*php <?php
//Met les photos
$Pos=$_GET["theme"];

$query = "select * from tblphotos where Index_Theme=$Pos";

$result = mysql_query($query) or die ("Execution de la reqête impossible");

$tab=array(); 
$cpt=0; 
?> 
 <table border=0 cellpadding=5 cellspacing=0 bordercolor=#FFFFFF align=center>
<tr> 
<? 
while ($data=mysql_fetch_array($result)) //boucle tant qu'il y a des données dans le résultat 
{ 
   ?> 
   <td> 
<?      
echo "<a href=Photos_Vue.php?Pos={$data['Id']}><img src=Photos/{$data['Ref_Image']} center width=150 height=100>";
?> 
   </td>
   <? 
    
   $tab[]=$data['Legende_Image'];   
   $cpt++; 
   if ($cpt % 4 == 0) // si les 4 colonnes sont construites 
   { 
        echo "</tr><tr>"; 
        foreach ($tab as $value) //affichage des légendes 
        { 
            echo "<td>".$value."</td>"; 
        } 
        echo "</tr>"; 
        array_splice ($tab, 0);    // remise a zéro du tableau 
   } 
} 
?> 
</tr> 
</table> [php /php*/
][/php]

Posté : 22 oct. 2005, 14:32
par Truc
Attention : en utilisant un modulo, il faut démarrer le pointeur à 1 et non à 0 : sinon, tu démarres en testant le reste de 0/4 ce qui va donner 0 et fermer la ligne de façon intempestive. Donc il faut ici initialiser $cpt à 1.
oui mais j'avais incrémenté le compteur avant le modulo :wink:

Enfaite c'est pas sur la 2eme ligne mais sur la dernière ligne du tableau:
remplace ce test
if ($cpt % 4 == 0) 
par
if (($cpt % 4 == 0) || (!$data))

quand il n'y n'aura plus d'enregidtrement dans la BD la lecture du tableau se fait quand meme

Galerie Image

Posté : 22 oct. 2005, 14:41
par Haute Definition
Merci, j'ai essayé mais cela ne marche toujours pas.

Je ne comprends pas les deux barres || ?
<?php
//Met les photos
$Pos=$_GET["theme"];

$query = "select * from tblphotos where Index_Theme=$Pos";

$result = mysql_query($query) or die ("Execution de la reqête impossible");

$tab=array(); 
$cpt=0; 
?> 
 <table border=0 cellpadding=5 cellspacing=0 bordercolor=#FFFFFF align=center>
<tr> 
<? 
while ($data=mysql_fetch_array($result)) //boucle tant qu'il y a des données dans le résultat 
{ 
   ?> 
   <td> 
<?      
echo "<a href=Photos_Vue.php?Pos={$data['Id']}><img src=Photos/{$data['Ref_Image']} center width=150 height=100>";
?> 
   </td>
   <? 
    
   $tab[]=$data['Legende_Image'];   
   $cpt++; 
   
   if (($cpt % 4 == 0) || (!$data)) 
   { 
        echo "</tr><tr>"; 
        foreach ($tab as $value) //affichage des légendes 
        { 

	        echo "<center>";
            echo "<td>".$value."</td>";

            echo "</center>"; 

        } 

        echo "</tr>"; 
        array_splice ($tab, 0);    // remise a zéro du tableau 
   } 
} 
?> 
</tr> 
</table>

Posté : 22 oct. 2005, 15:14
par Truc
C'est vrai cette condition ne sera jamais verifié :oops:

LE || signifie "ou", si l'une ou l'autre des conditions est verifiée alors on passe.
(autre exemple "&&", dans ce cas il faut que les 2 conditions soient verifiées)

pour prendre en compte le test il faut compter le nombre d'enregistrements et comparer par rapport a ce total:
...
$total=mysql_num_rows($result));
while ($data=mysql_fetch_array($result))
{
...// ici le meme code

   if (($cpt % 4 == 0) || ($cpt==$total)) // on passe le test si le reste de la division entière de $cpt par 4 est égale à 0 OU si c'est le dernier enregistrement
   {
...  // ici le meme code
   }
}

Galerie Image

Posté : 22 oct. 2005, 15:41
par Haute Definition
Merci beaucoup car cela marche.

Une petite précision sur la ligne
echo "<td>".$value."</td>"; 
que signifient les points avant et après $value.

Une question de béotien : comment centrer toutes les légendes.

Si je veux sophistiquer :

dans le cas d'un nombre important de photos en n'affichant que vingt photos à la fois.

et donc avoir par exemple deux boutons avant, après pour passer à la vingtaine de photos précédente et suivante et
indiquer les différentes pages ex 1,2,3 et donc en appuyant sur le 3 voir les photos 41 à 60

Cela serait vraiment génial de pouvoir faire cela.

Posté : 22 oct. 2005, 15:49
par Cyrano
Le point est l'opérateur de concaténation en PHP.

Galerie Image

Posté : 22 oct. 2005, 15:55
par Haute Definition
OK mais avec quoi les points sont concaténés (surtout celui de fin)

Re: Galerie Image

Posté : 22 oct. 2005, 16:12
par Truc
OK mais avec quoi les points sont concaténés (surtout celui de fin)
ce n'est pas vraiment le point qui est concatèné mais c'est lui qui s'en charge.
dans ton exemple:
si
$value = "une photo";
echo "<td>".$value."</td>";  
le résultat afficher sera alors
<td>une photo</td>
Une question de béotien : comment centrer toutes les légendes.
ajoute l'attribut align="center" dans la balise <td> correspondante.

un petit TUTO et tu comprendra mieux
indiquer les différentes pages ex 1,2,3 et donc en appuyant sur le 3 voir
les photos 41 à 60
ça s'appel la pagination tu trouver un toto ICI, regarde le fonctionnement et essaie de l'adapter a tes besoins
:wink:

Galerie Image

Posté : 22 oct. 2005, 16:58
par Haute Definition
Merci Infiniment.

Pour la concaténation, je ne comprenais pas car je ne voyais pas l'utilité.
Cela marche sans les points !

Pour le center, sorry je suis un peu fatigué car j'utilise souvent cela.

Je vais regarder les tutoriaux que vous m'avez indiqué

Re: Galerie Image

Posté : 22 oct. 2005, 17:05
par Cyrano
Pour la concaténation, je ne comprenais pas car je ne voyais pas l'utilité.
Cela marche sans les points !
Ça marche sans les points, mais ce n,est pas propre comme codage. Si tu remplaces les guillemets par des apostrophes, ça ne marchera plus sans ces points.

Re: Galerie Image

Posté : 22 oct. 2005, 17:09
par Truc
Pour la concaténation, je ne comprenais pas car je ne voyais pas l'utilité.
Cela marche sans les points !
oui ça fonctionne si tu utilise des guillemets mais pas des apostrophes :!:
Exemple:
$var="test";
echo "ceci est un $var"; // affichera => ceci est un test
echo 'ceci est un $var'; // affichera => ceci est un $var

//d'ou le faite de provilégier la concaténation
// ici tu aura 2 fois le meme affichage =>  ceci est un test
echo "ceci est un ".$var;  
echo 'ceci est un '.$var;
De plus c'est plus clair et pro ( :wink: ) de séparer les variables du reste du texte.

Au passage ce probleme étant résolu n'oubli pas de mettre le sujer en [Résolu].Tu pouras ouvrir un nouveau topic si tu as des problemes pour la pagination.

EDIT: j'en met un temps moi pour écrire mes idées :lol:

Galerie Image

Posté : 23 oct. 2005, 00:01
par Haute Definition
Bonsoir,

J'ai presque terminé.

Comment écrire correctement cette requête SQL
$sql_photos = "SELECT * FROM tblphotos  where Index_Theme=$Pos and LIMIT ". $debut .", ". $nb_photos_par_page .";"; 
Merci