galerie photo avec pagination et miniature comme lien

Petit nouveau ! | 2 Messages

16 mai 2008, 15:13

bonjour

j'ai fait un script pour afficher les photos d'un répertoire (actuel) sous forme de miniature avec pagination
jusque là ça marche
mais je coince dans : comment rendre les miniatures sous forme de liens vers la photo originale
voici le script :

Pour l'essayer
mettez une 100 de photos dans un repertoire pour faire réaliste et ajoutez ce fichier (index.php)
<?php
if(isset($_GET['page']))
{
$page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else
{
$page = 1; // On se met sur la page 1 (par défaut)// La variable n'existe pas, c'est la première fois qu'on charge la page
}


$dir = getcwd(); //current directory
$tab = scandir($dir);

// allowed files extensions :BMP is not included because BMP is not recommended for the web
$extensions_valides = array('jpg', 'jpeg', 'gif', 'png' , 'JPG', 'JPEG', 'GIF', 'PNG');

$nbrelem = 0;
$img = array();

//vérify if element is a file AND has allowed extension
foreach($tab as $element)
{
$a = $dir . "/" . $element;
$extension = substr(strrchr($element, '.'), 1);

if(is_file($a) AND in_array($extension, $extensions_valides))
{
$nbrelem++; //in the same time we count nbr of accepted elements to avoid to use the function count() later
array_push($img, $a); //if file is accepted we add it to the list
}
}
if(count($img) < 1)
{
echo '<br />';
echo '<b>No result found</b>';
exit;
}

//calculate nbr of pages : here we decided to put 4 per 8 = 32 for each page
$nbrpages = ceil($nbrelem / 32);
$x = ($page * 32) - 31;


for($i = 1; $i < 9; $i++)
{
echo '<table border = "1">';
$j = 0;
echo '<tr>';
for($j = 1; $j < 5; $j++)
{
echo '<td width = "155" height = "155"><img src = "' . $img[$x] . '" width = "150" height = "150" /></td>';
$x++;
}
echo '</tr>';
echo '</table>';
}

echo '<br />';

echo '<table width = "620" align = "center">';
echo '<tr>';
echo '<td>';
for ($a = 1 ; $a <= $nbrpages ; $a++)
{
echo '<a href="index.php?page=' . $a . '">' . $a . '</a> ' . " | ";
}
echo '</td>';
echo '</tr>';
echo '</table>';
?>

j'ai pensé à la solution suivante
transformer cette ligne 52 en ce qui suit

echo '<td width = "155" height = "155"><a href = "image.php?' . $img[$x] . '"><img src = "' . $img[$x] . '" width = "150" height = "150" /></a>' . '</td>';

et ceci afin d'envoyer une variable "nom image.ext" vers la page "image.php"
qui contient le code pour affciher une image

<?php
$image = $_GET['$img'];
$ext = substr(strrchr($image, '.'), 1);

switch ($ext) {
case "jpg": header("Content-type: image/jpg"); imagecreatefromjpeg($image); imagejpeg($image); break;
case "jpeg": header("Content-type: image/jpeg"); imagecreatefromjpeg($image); imagejpeg($image); break;
case "png": header("Content-type: image/png"); imagecreatefrompng($image); imagepng($image); break;
case "gif": header("Content-type: image/gif"); imagecreatefromgif($image); imagegif($image); break;
case "JPG": header("Content-type: image/jpg"); imagecreatefromjpeg($image); imagejpeg($image); break;
case "JPEG": header("Content-type: image/jpeg"); imagecreatefromjpeg($image); imagejpeg($image); break;
case "PNG": header("Content-type: image/png"); imagecreatefrompng($image); imagepng($image); break;
case "GIF": header("Content-type: image/gif"); imagecreatefromgif($image); imagegif($image); break;
default: break;
}
imagedestroy($image);

?>
et j'obtient l'erreur suivante

Code : Tout sélectionner

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\wamp\www\cfs\resources\photos\animals\birds\image.php on line 16
la solution à ce problème précis SVP
sinon un script TOUT prêt qui marche et qui est dans le même esprit et sans la POO si c'est possible

sinon j'ai trouvé un script semblabe avec la POO qui date de 2006 mais qui affiche les noms des images au lieu des miniatures des images elle même
mais commencons d'abord par le mien

merci

Eléphant du PHP | 175 Messages

16 mai 2008, 15:33

un simple <a href = "' . $img[$x] . '"> ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 15:43

Modération :
doolabb, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

De plus
la solution à ce problème précis SVP
sinon un script TOUT prêt qui marche et qui est dans le même esprit et sans la POO si c'est possible
PHPFrance n'est pas un site de distribution de scripts gratuits,
ni de débuggage de scripts téléchargés et utilisés sans compréhension.

Merci de prendre le temps de lire les règlements.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 2 Messages

17 mai 2008, 22:17

j'étais habitué a des forums d'entraide
on pose son problème en détails et un volontaire donne son aide
je croyais que c'était ce genre de forum aussi, mais c'est bon maintenant je sais

le script était destiné à être essayé et non pas analysé en live
d'ailleurs je me demandes comment est ce qu'un programmeur analyse un script sans le faire fonctionner
et si je ne sais pas mettre en forme un message alors comment j'ose m'appeler programmeur


pour steph29
pourquoi avoir mis le ? en dehors des apostrophes
le signe ? fait partie du code HTML et en le sortant tu le fais devenir du PHP
alors que ce n'en est pas

Eléphant du PHP | 175 Messages

19 mai 2008, 09:45

non c'etait juste un point d'interrogation standard... donc une question :oops: