Page 1 sur 1

Création de vignettes en php

Posté : 20 juin 2007, 13:12
par Joshea
Bonjour à tous,
Voilà je suis débutant en php, actuellement je suis en stage et on m'a demandé de réaliser un site de vente de voiture en ligne, tous se passe bien mis à part que je coince au niveau de la mise en place et de l'affichage des images. Je m'explique, j'ai stocké le nom de mes images dans une base de donnée et les images elles memes dans deux repertoires /images et /images/vignettes.

Donc la question que je pose c'est comment faire pour que quand je clique sur l'image il m'envoie vers la page vignettes.

Merci à l'avance

Posté : 21 juin 2007, 14:55
par Ryle
Avec un lien html ? :)

Je vois pas trop ce qui te pose problème, mais à priori, si j'ai bien compris, tu as pour chaque voiture une photo et une galerie de vignettes dont les noms sont en base ? L'idée serait donc sur chaque photo de mettre un lien qui pointerait vers une page affichant les vignettes, et qui donnerait dans l'url l'identifiant de la voiture, pour pouvoir aller chercher en base les vignettes correspondantes... :)

chais pas trop si c'est vraiment ta question, mais faute de plus d'explication, ça sera ma réponse ;)

creations vignettes

Posté : 21 juin 2007, 15:17
par Joshea
Merci de m'avoir répondu.
Peut être que je me suis mal exprimé, ceci dit je vais essayer d'être plus clair et plus explicite.
la question que je vais vous poser c'est:
je stocke le chemin de la photo dans la base de donnée, et les photos sont stockées dans des répertoires sur le serveur pour les grandes images sur le dossier /images et pour les vignettes sur le dossier /images/vignettes. Donc comment faire pour quand je clique sur la photo d'une annonce, qu'elle puisse renvoyer vers les vignettes qui appartiennent à la même photo?
En grosso modo comment lier la photos et les vignettes lui appartenant?

Sites exemples:

automobile-voiture


cgi.ebay.fr

Merci à l'avance.

Ps: Si vous pouvez me passer un script ça serait encore mieux

Posté : 21 juin 2007, 15:36
par Ryle
Il y a plein de façon de faire.. ça dépend beaucoup de la structure de ta base de données, du nombre de photos/vignettes associées à chaque voiture.. tu peux tout consigner dans la base ou jouer sur les noms des fichiers...

Tu peux stocker le chemin des fichiers vignettes dans ta base (comme tu le fais avec la photo). Il te suffirait de créer une table avec l'identifiant de la voiture et le chemin de la vignette, que tu pourrais alors facilement parcourir pour retrouver toutes les vignettes associées à un véhicule.
Si tu as un nombre de vignette limité et défini, tu peux même faire cela directement dans ta table sans avoir besoin d'en créer une nouvelle...

On peut aussi envisager que tes vignettes aient le même nom que les images associées.. ainsi il te suffit juste de le récupérer dans ta base et de spécifier un dossier ou l'autre selon que tu veux utiliser la grande photo ou la vignette :)

creations de vignettes

Posté : 21 juin 2007, 15:42
par Joshea
je comprends ce que tu dis, mais comme je suis débutant j'avoue que je ne sais pas par ou commencer, c'est tout nouveau pour moi. Sans script je ne saurais me débrouiller. Je ne sais pas si tu pourrais pas me passer un script je t'en serait vraiment reconnaissant

Merci de m'avoir répondu.

Posté : 21 juin 2007, 15:55
par Ryle
Je pourrais effectivement, mais ce n'est pas le but de phpfrance que de distribuer des scripts à utiliser tel quel. Ce qu'on essaye de faire ici c'est aider les gens à comprendre et à devenir autonome.
Montre nous ce que tu as déjà fait, où essaye d'avancer un minimum par toi même :) On est là si jamais tu coinces pour que tu ne restes pas bloqué. Et puis cela nous permet également de voir ce que tu sais faire et nous évite de partir dans des explications inutiles :)

L'idée ici serait dans un premier temps de lire le nom de ton fichier en base, d'afficher la photo à partir de ton dossier images/ et de faire la même chose à partir de images/vignettes/ en donnant le même nom à tes deux fichiers :)

Posté : 21 juin 2007, 16:02
par jed
Salut, pour t'aider, voici un petit résumé d'une fonction que j'avais codée à cette fin. Je te l'ai réduite à l'utilisation d'un seul répertoire, mais tu peux t'appuyer sur cet exemple pour faire quelque chose de bien:
<?php

function thumbwriter()
{
	$handle = opendir('lerepertoireascanner'); 
	while ($dir = readdir($handle)) 
	{  
		if ($dir != 'index.php' AND $dir != '..' AND $dir != '.')
		{
			if (!is_dir ($dir))
			{
				if ($preg = preg_match("#.jpg$|.png$|.gif$#", $dir) AND $preg2 = !preg_match("#^tn_#", $dir)) 
				{
					$image = $dir;
					list($width, $height) = getimagesize('lerepertoireascanner/'.$image);
					$image_p = imagecreatetruecolor(200, 150);
					$image_d = imagecreatefromjpeg('lerepertoireascanner/'.$image);
					imagecopyresampled($image_p, $image_d, 0,0,0,0,200,150,$width, $height);
					if (!file_exists('lerepertoireascanner/tn_'.$image)) 
					{
						imagejpeg ($image_p, 'lerepertoireascanner/tn_'.$image);
						echo 'image créée: lerepertoireascanner/tn_'.$image.'<br /><br />';
					}
					else echo '<b>l\'image n\'a pas été créée!</b><br /><br />';
				}
			}
		}
	}
}

?>

Posté : 21 juin 2007, 17:23
par AB
On peut aussi envisager que tes vignettes aient le même nom que les images associées.. ainsi il te suffit juste de le récupérer dans ta base et de spécifier un dossier ou l'autre selon que tu veux utiliser la grande photo ou la vignette :)
+1 c'est la méthode que j'utilise :)

Posté : 21 juin 2007, 17:44
par AB
Un exemple de principe:
//nom du fichier de la photo récupéré dans la bdd
$nom_photo = $row_photos['nom'];

//pour les vignettes
$dossier = 'images_vignettes';
$adresse = $dossier.'/'.$nom_photo;
<img src="<?php echo $adresse ?>" alt="">;

//pour les images grand gormat
$dossier = 'images_grandformat';
$adresse = $dossier.'/'.$nom_photo;
<img src="<?php echo $adresse ?>" alt="">;

creation de vignettes

Posté : 23 juin 2007, 22:53
par Joshea
Salut,
Merci beaucoup les amis pour votre précieuse aide. espérant qu'un jour je vous rendrez cette aide à mon tour.

Encore une fois merci et à bientôt.

creation de vignettes

Posté : 30 juin 2007, 01:10
par Joshea
Voilà j'ai réussi si on peut dire la réalisation de mon album photo. J'arrive à afficher les vignettes et à les agrandir, mais ceci étant je suis confronté à un petit problèmes: je ne sais comment faire pour afficher les vignettes correspondantes à la même photo.

je vous joint les scripts et la table:

Code : Tout sélectionner

CREATE TABLE `photos` ( `id` int(11) NOT NULL auto_increment, `mini` text NOT NULL, `grand` text NOT NULL, `legende` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
-----------------------------------
index.php
<?php // Variables de connexion à la base
$host = "localhost";
$user = "root";
$password = "";
$database = "galerie";
// Connexion à la base
mysql_connect($host,$user,$password);
mysql_select_db("$database");?>
<html>
<HEAD>
<TITLE>Galerie PHP</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="imagetoolbar" CONTENT="no">
<LINK href="css/normal.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<table width="800" align="center" cellpadding="10">
    <td class="CelluleBasSimple"><SPAN class="Titre16">GALERIE</SPAN></td>
  </table>

<hr align="center" width="796" size="1" color="#CEECCC" id="H1">
<table width="800" align="center" cellpadding="10" cellspacing="5">
  <tr>
    <td width="500" align="center" valign="top" class="CelluleLeft"> 
      <?php
// sélectionne toutes les fiches de la table $table
$query = "SELECT * FROM photos order by id DESC"; 
$result = mysql_query($query);
// On choisit de faire trois colonnes
$NbCol=6;
// Il y a un total de NbTot enregistrements
$NbTot=mysql_num_rows($result);
// Il va falloir un certain nombre de lignes
$NbLigne=1+(int)($NbTot/$NbCol);
// Premier enregsitrement
$Col=1; // Pour savoir dans quelle colonne on est
$Lig=0; // Pour savoir sur quelle ligne on est
// tant qu'il y a des fiches
while ($val = mysql_fetch_array($result)) 
{   
   $Valeur=$Col+($Lig*$NbCol);
   $SQL = "UPDATE photos SET ordre=".$Valeur
   ." WHERE mini='".$val["mini"]."' AND grand='".$val["grand"]."'";
   mysql_query($SQL);
   $Lig=$Lig+1;
   // si on a fait NbLigne ou si le compteur est supérieur au nombre total
   // il faut passer à la colonne suivante et à la première ligne
   if (($Lig==$NbLigne) or ($Valeur>($NbTot-$NbCol))) {$Lig=0;$Col=$Col+1;}
}
mysql_close();
?>
    </td>
    <td width="300" align="left" valign="top" class="CelluleLeft"> 
      <FORM action="load_img.php" method="post" enctype="multipart/form-data" name="F1" id="F1">
        <INPUT name="fichier" type="file" id="fichier" size="35" maxlength="255">
        <br><br>
        <SPAN class="CelluleBasSimple">&nbsp;L&eacute;gende :</SPAN><br><br>
        <INPUT name="legende" type="text" id="legende" size="45" maxlength="255">
<br>
  <br>
        <INPUT name="B1" type="submit" id="B1" value="Placer le fichier">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <INPUT type="reset" name="Submit" value="Annuler">
      </FORM><br>
      <table width="100%" cellpadding="10">
          <td bgcolor="#CEECCC" class="CelluleBasSimple"> 
            <DIV align="justify">
              <P>Les deux champs du formulaire doivent &ecirc;tre remplis.</P>
              <P>Le poids maximum du fichier est limit&eacute; &agrave; 1 Mo pour 
                des raisons de flux.</P>
              <P>Une miniature de 2 Ko est cr&eacute;&eacute;e automatiquement 
                pendant la phase de placement du fichier.</P>
            </DIV></td>
        </table></td></tr></table>
</BODY>
</HTML>
---------------------------------------------------------------

load_img.php

<html>
<head>
<title>Galerie</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="css/normal.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
// Taille maximum du fichier
$MAX_FILE_SIZE = 1000000;
// Dossier de destination du fichier
$folder = "../galerie/images/";
// Tableau array des différents types
$allowed_types = array("image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg", "multipart/x-zip", "video/msvideo");
// Variables récupérées par methode POST du formulaire
$fname = $HTTP_POST_FILES['fichier']['name'];
$ftype = $HTTP_POST_FILES['fichier']['type'];
$fsize = $HTTP_POST_FILES['fichier']['size'];
$ftmp = $HTTP_POST_FILES['fichier']['tmp_name'];
// Divers tests afin de savoir si le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}
// La taille du fichier n'est pas dépassée
if($fsize > $MAX_FILE_SIZE){$error = 2;}
// Le fichier n'existe pas déjà
if(file_exists($folder."m_".$fname)){$error = 3;}
// Si tout va bien
if(copy($ftmp,''.$folder.''.$fname.'')) {$error = 0;}
// Switch pour la gestion des erreurs
switch($error){
case'0':
echo("Fichier correctement envoyé.");
break;
case'1':
echo("Format de fichier incorrecte.");
break;
case'2':
echo("Fichier trop volumineux.");
break;
case'3':
echo("Fichier déjà existant.");
break;
}
?>
<?php // Variables de connexion à la base
$host = "localhost";
$user = "root";
$password = "";
$database = "galerie";
// Connexion à la base
mysql_connect($host,$user,$password);
mysql_select_db("$database");
$Vfichier="$folder$fname";
$Vlegende = $_POST["legende"];
$Vlegende=nl2br($Vlegende);
$Vlegende = str_replace("'" , "’", $Vlegende); // Remplacement de l'apostrophe
$folder_min = "../galerie/images/miniatures/";
$fichier_nom = "$fname";
$path_mini="$folder_min$fname";
$ok = mysql_db_query($database,"insert into photos (mini,grand,legende) values ('$path_mini','$Vfichier','$Vlegende')") ?>
<FORM action="redim.php" method="post" name="F1" target="_self" id="F1">
  <INPUT name="hfichier" type="hidden" id="hfichier" value="<?php echo $Vfichier?>">
  <INPUT name="hfolder_min" type="hidden" id="hfolder_min" value="<?php echo $folder_min?>">
  <INPUT name="hname" type="hidden" id="hname" value="<?php echo $fichier_nom?>">
</FORM>
<SCRIPT language="javascript">
document.F1.submit()
</SCRIPT>
</body>
</html>
---------------------------------------------------------------

redim.php
<html><head></head>
<?php
$grand=$_POST["hfichier"];
$nom=$_POST["hname"];
$folder_min=$_POST["hfolder_min"];
//$ratio = .10;
// Calcul des nouvelles dimensions, list est un moyen plus pratique pour ne récupérer que ce qu'on veut
list($largeur, $hauteur) = getimagesize("$grand"); 
$n_largeur = 184;
$n_hauteur = 128;
//création de la destination
$destination = imagecreatetruecolor($n_largeur, $n_hauteur);
//on ouvre la source
$source = imagecreatefromjpeg("$grand");
// Redimensionnement
imagecopyresized($destination, $source, 0, 0, 0, 0, $n_largeur, $n_hauteur, $largeur, $hauteur);
imagejpeg($destination);
//Enregistrement de l'image créée
$file = "$folder_min$nom";
//enregistre l'image dans le répertoire images à la racine du site.
imageJpeg($destination, $file); 
imagedestroy($destination);
imagedestroy($source)
?>
<body>
<script type="text/javascript" langage="JavaScript">
<!--
parent.location = "index.php";
// -->
</script></body></html>
---------------------------------------------------------------

zoom.php
<?php // Variables de connexion à la base
$host = "localhost";
$user = "root";
$password = "";
$database = "galerie";
// Connexion à la base
mysql_connect($host,$user,$password);
mysql_select_db("$database"); ?>
<?php $p=$_GET['param'];?>
<?php $query = "SELECT id, grand, legende from photos where id='$p'";
$result = mysql_query($query);?>
<?php while ($val = mysql_fetch_array($result)) { ?>
<?php $image = $val["grand"]?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>GALERIE - <?php echo $val["legende"] ?></title>
</head>

<body bgcolor="#666666" leftmargin="0" topmargin="5" marginwidth="0" marginheight="5" onLoad='compt=setTimeout("self.close();",30000)'>
<DIV align="center">
<?php echo "<img src='$image'>"?>
<br />
<?php echo $val["legende"] ?>
 
<?php }?></DIV>
<hr align="right" width="200" size="1">
<DIV align="right"><IMG src="css/greenball.gif" align="absmiddle">&nbsp;<A href="#" onclick="self.close()">Fermer 
  cette fenêtre</a> </DIV>
</body>
</html>
----------------------------------------------------------------

si quelqu'un pouvait m'aider à améliorer ces scripts et la database pour que quand je clique sur une photo que je puisse la renvoyer vers les vignettes appartenant à cette même photo et que je puisse aussi l'agrandir sur la même page et non pas dans un pop up.


merci à l'avance

creation de vignettes

Posté : 02 juil. 2007, 19:31
par Joshea
bonjour,
Est ce que quelqu'un peut m'aider à améliorer ces scripts afin d'uploader 6 images au lieu d1 seule
Merci