IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Création de vignette avec incrémentation [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Création de vignette avec incrémentation
    Bonjour,

    Quelqu'un pourrait-il m'aider à créer une galerie avec création de vignette à redimensionner, j'ai fait 1000 tentative mais je n'y arrive pas !!
    je n'arrive pas à ce que lorsque j'upload une image je n'arrive pas à créer en même temps sa vignette, et que ces vignettes s'affiche en boucle par nombre de 5.

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Salut,

    Il existe bcp de script à ce sujet. Mais si tu veux faire un truc perso, je te conseille de te coder une fonction de redimensionnement qui tiens la route.
    Ensuite il te suffit d'afficher les images pre-traitées avec ta fonction. L'affichage par groupe de 5 peut se faire sans pb avec l'aide d'un modulo
    dans ton cas tu peux mettre un modulo 5 dans ta boucle (%5)

    Il faudrait plus d'infos pour mieux t'aider....

    Guigo

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut

    oui j'ai regardé un peu partout, mais ça marche pas

    voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    $source = imagecreatefromjpeg($image_nouveau_nom); // La photo originale est la source
    $destination = imagecreatetruecolor(200, 100); // On crée la miniature vide
    
    // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
    $largeur_source = imagesx($source);
    $hauteur_source = imagesy($source);
    $largeur_destination = imagesx($destination);
    $hauteur_destination = imagesy($destination);
    
    // On crée la miniature
    imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
    
    // On enregistre la miniature sous le nom "mini_???.jpg"
    $prefixe ='mini_';
    $separation ='|';
    $bdd_url_vignette ='http://localhost/mon_site/images/vignettes_book/';
    //$bdd_url_image_galerie ='images/galerie_book/';
    
    $vignette = imagejpeg($destination, $bdd_url_vignette.$prefixe.$image_nouveau_nom.$separation);
    var_dump($vignette);
    
    // je voudrais les enregistrer dans la base de données (je pense que pour les récupérer, il faut qu'elles existent !!)
    
    $requete_insertion_vignettes_book="UPDATE ".$base_de_donnees.".book";
    $requete_insertion_vignettes_book.=" SET vignettes='".addslashes($vignette)."' ;";
    $insertion_vignettes_book = mysql_query($requete_insertion_vignettes_book) or die('La requete d\'envoie dans la base SQL pour les vignettes a échouée : <br />'.mysql_errno().' = '.mysql_error());
    
    
    
    // ici j'essai d'afficher mes miniatures
    
            <?php
    		$requete_recuperation_vignettes_book ='SELECT vignettes FROM '.$base_de_donnees.'.book limit 1;';
    		$affichage_vignettes_book = mysql_query($requete_recuperation_vignettes_book) or die('La requete de récupération des vignettes_book a échouée : '.mysql_errno().' = '.mysql_error());
    		$ligne_vignettes_book = mysql_fetch_row($affichage_vignettes_book);
    		$array_vignettes_book = explode('|',$ligne_vignettes_book[0]);
    		$nbr_images = count($array_vignettes_book);
    		$i=0;
    		while($i <= $nbr_images) //tant que le tableau a des resultats 
    		{
    		//echo '<img id="vignette" src="'.$bdd_url_image_galerie.$image[$i].'"/>';
    		echo '<img src="'.$array_vignettes_book[$i].'"/>';
    		$i++;
    		//var_dump($array_vignettes_book); // pour verifier que les urls sont dans le tableau
    		}
    		?>
    merci

  4. #4
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Heu dans ta requête t'as un LIMIT 1 donc t'aura que la 1er image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete_recuperation_vignettes_book ='SELECT vignettes FROM '.$base_de_donnees.'.book limit 1;';

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    même si je le retire ça fonctionne tjs pas

    j'ai rajouté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $requete_galerie_vignettes_book ='SELECT vignettes FROM '.$base_de_donnees.'.book limit ;';
    $liste_champs_vignettes_book = mysql_query($requete_galerie_vignettes_book) or die('La requete de récupération de la galerie_book a échouée : <br />'.mysql_errno().' = '.mysql_error());
     
     
    avant : 
     
    $requete_insertion_vignettes_book="UPDATE ".$base_de_donnees.".book";
    $requete_insertion_vignettes_book.=" SET vignettes='".addslashes($vignette)."' ;";
    $insertion_vignettes_book = mysql_query($requete_insertion_vignettes_book) or die('La requete d\'envoie dans la base SQL pour les vignettes a échouée : <br />'.mysql_errno().' = '.mysql_error());
    ???

  6. #6
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Une question les images tu les enregistre en dur dans ta base donnée ou alors juste le chemin?

    Sinon tu peux enlever le limit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete_galerie_vignettes_book ='SELECT vignettes FROM '.$base_de_donnees.'.book';
    Sinon ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<img src="'.$array_vignettes_book[$i].'"/>';
    D'après ce que je comprends tu récupère tous les lien dans une seule variable que tu explode sur le | donc... C'est bien ça?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    même en supprimant la limit ça ne fonctionne toujours pas !!!

    c'est sûr c'est mon code qui va pas.

    je voudrais récupérer tout ce qu'il y a dans le champs "galerie_book", c'est pour ça que je fait un explode "|", pour ensuite créer des vignettes des ces images.

    D'ailleurs maintenant j'essai de créer en paralléle quand j'upload l'image de créer sa vignette avec imagecopyresampled (c'est pour ça que je prend ma variable $image_nouveau_nom c'est le nouveaux de mon $_FILES après traitemant et vérification), et de la stocker dans le dur et dans la table dans le champs "vignettes"

    dur dur

  8. #8
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Re,
    Je pense que tu pars pas avec la bonne technique... Tu vas te retrouver avec une base tres lourde, des doublons d'images avec cette histoire de vignette... Un redimensionnement presque louche...

    Moi je te conseille d'uploader tes images sur ton disque dur du serveur, stocke simplement les chemins et le nom de ces images. Ensuite pas très complique tu fais une requête de sélection selon tes critères puis tu affiches.
    Je te joints une fonction très utilile, le redimensionnement selon max largeur ou hauteur :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    //function rediemensionnement
    function redImage($img_src,$dst_w,$dst_h) {
       // Lit les dimensions de l'image
       $size = GetImageSize($img_src);  
       $src_w = $size[0]; $src_h = $size[1];
       // Teste les dimensions tenant dans la zone
       $test_h = round(($dst_w / $src_w) * $src_h);
       $test_w = round(($dst_h / $src_h) * $src_w);
       // Si Height final non précisé (0)
       if(!$dst_h) $dst_h = $test_h;
       // Sinon si Width final non précisé (0)
       elseif(!$dst_w) $dst_w = $test_w;
       // Sinon teste quel redimensionnement tient dans la zone
       elseif($test_h>$dst_h) $dst_w = $test_w;
       else $dst_h = $test_h;
     
       // Affiche les dimensions optimales
        return ("WIDTH:".$dst_w."px; HEIGHT:".$dst_h."px;");
    }
     
    //pour l'affiche tu peux l'utiliser comme ca
    //avec $col qui correspond a tes champs recuperes de ta base						
    $ImgRedim=redImage($col['Img'],150,180);
    echo("<input type=\"image\" src=\"{$col['Img']}\" style='".$ImgRedim."' name=".$col['NomP']." title='".$col['NomP']."' />");
    Franchement c'est un peu chiant de refaire, mais tu gagnera du tps par la suite...

    Guigo

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut


    merci

    en fait ce que tu m'explique c'est exactement ce que je veux faire, d'ailleurs dans ma base de données je ne stock que des urls, les images sont dans le dur, et pour les vignettes je voudrais la même chose.

    je vais tester ta méthode, et te dirais ce que ça donne

    je te redit merci

    (17 mars je passe mon exam, c'est un peu la panique à vrai dire, car site pas OP = exam LOUPé !!!!!)

  10. #10
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Si c'est pour un projet alors je t'aide un peu plus...
    Voici une page qui te génère un tableau de vignette et quand tu clique sur une alors elle s'affiche en gtros avec les infos... Nous avons ici une ligne de 9 vigenette, si tu veux changer tu change le modulo :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
     
    <?php
     
    	//definition des variables
    	$ret = false;
    	$Cat=$_GET['tpsCat'];
     
    	//$req = "SELECT  fiche.NomP, fiche.Gen, fiche.Mat, fiche.Ess, fiche.Finit, fiche.Poi, fiche.Dim, fiche.Cond, fiche.NdPiP, fiche.NdPC, fiche.NdPiC, fiche.CheminPhoto , fiche.Aut, fiche.Fiche_id, fiche.Description, fiche.Prix, fiche.BVu, categorie.Nom_cat ".
     
    	$req = "SELECT  fiches_images.Chemin, fiches_images.Fiche_id". 
    	" FROM fiches_images ".
    	"INNER JOIN  fiche ON (fiche.Fiche_id=fiches_images.Fiche_id) ".
    	"WHERE fiche.Cat= '".$Cat."' AND fiches_images.Priorite=1";
    	$ret = mysql_query ($req) or die (mysql_error ());
     
    	$i=0;
     
    	echo "<div id=templateFiche><br/>";
    	echo'<table width="95%" class="table_photo"><tr>';
    	while($col = mysql_fetch_array ($ret))
    	{
    		$rep = $col[0];
     
    		if (($i%9)==0)
    			echo '</tr></table><table width="95%" class="table_photo"><tr>';
     
    		echo "<td width=90px align=center valign=bottom>";
    		echo '<form enctype=multipart/form-data action=# method=POST style="margin:0;">';
    		$ImgRedim=redImage($col['Chemin'],90,90);
    		echo '<input type="image"  src="'.$rep.'" style="'.$ImgRedim.' " border=0 />';
    		echo "<input type=hidden name=FicheId value='".$col['Fiche_id']."'/>";
    		echo "</form></td>";
     
    		$i++; 
     
    	} 
    echo "</tr></table>";
    if($Cat==6)
    	echo "<div id=imageDescriptionPlus>";
    else
    	echo "<div id=imageDescription>";	
     
     
    	if(isset($_POST['FicheId']))
    	{
    		$req = "SELECT  *, Chemin, DimValues as Dim,DimText ". 
    				" FROM fiche ".
    				" INNER JOIN fiches_images ON(fiche.Fiche_id=fiches_images.Fiche_id)".
    				" LEFT JOIN dimensions ON (dimensions.Fiche_Id = fiche.Fiche_id ) ".
    				" WHERE fiche.Fiche_id= '".$_POST['FicheId']."'";
    		$ret = mysql_query ($req) or die (mysql_error ());
    		$col = mysql_fetch_array ($ret);
     
    	}
    	else
    	{
    		$req = "SELECT  *, Chemin,DimValues as Dim,DimText ". 
    				" FROM fiche ".
    				" INNER JOIN fiches_images ON(fiche.Fiche_id=fiches_images.Fiche_id)".
    				" LEFT JOIN dimensions ON (dimensions.Fiche_Id = fiche.Fiche_id ) ".
    				"WHERE fiche.Cat= '".$Cat."' AND fiches_images.Priorite=1";
    		$ret = mysql_query ($req) or die (mysql_error ());
    		$col = mysql_fetch_array ($ret);
    	}
    	$rep=$col['Chemin'];
     
    	$ImgRedim=redImage($col['Chemin'],350,350);
    	echo '<input type="image"  src="'.$rep.'" style="'.$ImgRedim.' " border=0 />';
     
    	echo "</div>";
     
     
    	if($Cat==6)
    		echo "<div id=cadreDescriptionPlus>";
    	else
    		echo "<div id=cadreDescription>";	
     
    	echo '<br/><h3 style="color:#ED1E79;margin-left:30px;">';
    	echo $col['NomP']."</h3>";
    	echo  '<div style="margin-left:15px;margin-right:15px;font-size:12px;">'.nl2br(stripslashes($col['Description']))."</div><br/>";
    	echo "<div id=EncartDescription>";
    	echo "<b>Poids : </b>".$col['Poi']."Kg<br/>";
    	echo '<b>Conditionnement : </b><font style="margin-right:25px;">"'.$col['Cond'].'"</font><br/>';
    	echo "<b>Origine : </b>".$col['PaysdF']."<br/>";
    	echo '<b>D&eacute;nomination : </b><font size="-1">'.$col['NomP'].'</font><br/>';
    	//echo "<b>Gencod : </b>".$col[Gen]."<br/>";
    	echo  "<b>".$col['DimText']." (cm) : </b>".$col['Dim']."<br/>";
     
    ?>

    Voilà a toi d'adapter ce code...

    Guigo

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    c'est cool

    merci beaucoup
    je test et te fais part de mes avancés


  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    re une question bête je sais

    dans la fonction :
    function redImage($img_src,$dst_w,$dst_h)
    {}

    d'où vient les $ : $img_src,$dst_w,$dst_h
    est-ce qu'il l'ai comprend tout seul, ou il faut que je les déclare avant,
    à quoi correspondent-ils ??

  13. #13
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Re,
    Non il le les comprend pas tout seul...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //exemple
    //ici on passe un chemin de fihier ou se trouve l'image
    //puis 150 c'est la largeur mmax que tu veux
    //et 120 la longeur max que tu veux 
    //cette fonction redimensionne au mieux san deformer l'image
    function redImage("../image/monimage.jpg",150,120)
    Other question?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok

    merci
    c'est dur quand on commence
    ta fonction m'a bien aider
    rester plus qu'a bien faire ma boucle et c'est bon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variante de TUpDown avec incrément réel
    Par Bernard Grosdoy dans le forum Composants VCL
    Réponses: 6
    Dernier message: 20/10/2004, 16h40
  2. Update ou insert avec incrément d'un champ
    Par dany13 dans le forum ASP
    Réponses: 5
    Dernier message: 15/10/2004, 12h53
  3. [Ant] [Ejb] Probléme de création d'ejb avec Genic
    Par rivierem dans le forum JOnAS
    Réponses: 7
    Dernier message: 25/06/2004, 16h21
  4. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11
  5. Création d'agrégat avec SQLServer
    Par Testav dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/09/2002, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo