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

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

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 (

) 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

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