Présentation Photos pour Site

Eléphant du PHP | 330 Messages

21 oct. 2005, 00:21

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 01:07

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

21 oct. 2005, 08:54

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Haute Definition
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 14:22

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 14:32

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Haute Definition
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 14:41

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>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 15:14

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
   }
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Haute Definition
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 15:41

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.

Mammouth du PHP | 19672 Messages

22 oct. 2005, 15:49

Le point est l'opérateur de concaténation en PHP.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Haute Definition
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 15:55

OK mais avec quoi les points sont concaténés (surtout celui de fin)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 16:12

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Haute Definition
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 16:58

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é

Mammouth du PHP | 19672 Messages

22 oct. 2005, 17:05

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 17:09

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Haute Definition
Invité n'ayant pas de compte PHPfrance

23 oct. 2005, 00:01

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