Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2010, 08h31   #1
Invité de passage
 
Inscription : juin 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 6
Points : 1
Points : 1
Par défaut miniatures cliquables et revuperatipn d'images

Bonjour, tout d'abord, je voudrais préciser que je suis un grand débutant en php. Voilà mon problème : j' ai créé un script php (ou plutôt j'ai récupéré un bout de code que j'ai adapté) afin de pouvoir uploader une image et sa miniature dans 2 dossiers différents, 'img' et 'mini'. Je voudrais que sur ma page d'affichage, on puisse voir toutes les miniatures du dossier, et en cliquant dessus, on accède aux grandes images qui leur correspondent.
J'espère avoir été assez clair et que quelqu'un pourra ke répondre.
D'avance merci
miklwebdesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h43   #2
Membre éprouvé
 
Avatar de d-Rek
 
Développeur Web
Inscription : janvier 2007
Messages : 438
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2007
Messages : 438
Points : 400
Points : 400
J'ai essayé d'utiliser mon super pouvoir de télékinésie mais ces temps-ci, ça ne marche plus.
Tu peux poster ton code ?
__________________
Mon blog
d-Rek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h47   #3
Invité de passage
 
Inscription : juin 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 6
Points : 1
Points : 1
Voila le script pour l'envoi de mes images à taille "normale".

J'ai le même script pour l'envoi des miniatures dans le dossier 'mini'.

Code :
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
 
function get_extension($nom) {
    $nom = explode(".", $nom);
    $nb = count($nom);
    return strtolower($nom[$nb-1]);
}
 
// --------------------- Options diverses //
 
// Extensions images autorisé (pour le moment, que du jpeg)
$extensions_ok = array('jpg', 'jpeg');
// MimeType autorisé
/* 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF */
$typeimages_ok = array(2);
 
$taille_ko = 1024; // Taille en kilo octect (ko)
$taille_max = $taille_ko*1024; // En octects
$dest_dossier = 'img/'; // Creez ce dossier et chmoodez le !
    if(isset($_FILES['photo'])) // Formulaire envoyé
    {
        // Les erreurs que PHP renvoi
        if($_FILES['photo']['error'] !== "0") {
                switch ($_FILES['photo']['error']) {
                case 1:
                    $erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
                    break;
                case 2:
                    $erreurs[] = "Votre image doit faire moins de $taille_ko Ko !";
                    break;
                case 3:
                    $erreurs[] = "L'image n'a été que partiellement téléchargé.";
                    break;
                case 4:
                    $erreurs[] = "Aucun fichier n'a été téléchargé.";
                    break; // Pas de 5, ne pas demander pourquoi ^^ (voir doc PHP)
                case 6:
                    $erreur[] = "Un dossier temporaire est manquant.";
                    break;
                case 7:
                    $erreurs[] = "échec de l'écriture du fichier sur le disque.";
                    break;
            }
        }
        // getimagesize arrive à traiter le fichier ?
        if(!$getimagesize = getimagesize($_FILES['photo']['tmp_name'])) {
            $erreurs[] = "Le fichier n'est pas une image valide.";
        }
        // on vérifie le type de l'image
        if( (!in_array( get_extension($_FILES['photo']['name']), $extensions_ok ))
           or (!in_array($getimagesize[2], $typeimages_ok )))
        {
            foreach($extensions_ok as $text) { $extensions_string .= $text.', '; }
            $erreurs[] = 'Veuillez sélectionner un fichier de type '.substr($extensions_string, 0, -2).' !';
        }
        // on vérifie le poids de l'image
        if( file_exists($_FILES['photo']['tmp_name']) 
                  and filesize($_FILES['photo']['tmp_name']) > $taille_max)
        {
            $erreurs[] = "Votre fichier doit faire moins de $taille_ko Ko !";
        }
 
        // copie du fichier si aucune erreur !
        if(!isset($erreurs) or empty($erreurs))
        {
            $dest_fichier = basename($_FILES['photo']['name']);
            $dest_fichier = strtr($dest_fichier, 'ÀÃÂÃÄÅÇÈÉÊËÌÃÃŽÃÒÓÔÕÖÙÚÛÜÃà áâãäåçèéêëìÃ*îïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
            // un chtit regex pour remplacer tous ce qui n'est ni chiffre ni lettre par "_"
            $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
 
            // pour ne pas ecraser un fichier existant
            while(file_exists($dest_dossier . $dest_fichier)) {
                $dest_fichier = rand().$dest_fichier;
            }
 
            // copie du fichier
            if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier)) {
                $valid[] = "Image uploadé avec succés (<a href='".$dest_dossier . $dest_fichier."'>Voir</a>)";
            } else {
                $erreurs[] = "Impossible d'uploader le fichier.<br />Veuillez vérifier que le dossier ".$dest_dossier." existe avec un chmod 755 (ou 777).";
            }
        }
    }
?>
 
<form method="POST" action="" enctype="multipart/form-data">
<?php
if(!empty($erreurs)) {
    echo '<ul class="erreur">';
    foreach($erreurs as $erreur) {
        echo '<li>'.$erreur.'</li>';
    }
    echo '</ul>';
}
if(!empty($valid)) {
    echo '<ul class="validation">';
    foreach($valid as $text) {
        echo '<li>'.$text.'</li>';
    }
    echo '</ul>';
}
 
?>
    <fieldset>
    <legend>Envoi d'image</legend>
        <p>
            <label for="photo">Image : </label>
            <input type="file" name="photo" id="photo" />
        </p>
        <p>
            <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $taille_max; ?>" />
            <input type="submit" name="envoi" value="Envoyer l'image" />
        </p>
    </fieldset>
</form>
Et désolé pour ton pouvoir, peut être le récupéreras tu un jour
miklwebdesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 13h42   #4
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 134
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 134
Points : 2 877
Points : 2 877
Bonjour,

Il faut juste lister les fichiers du dossier mini, et, pour chacun, afficher un lien autour d'une balise img qui pointe vers la grande image.

Comment fais-tu l'association entre une image mini et son image grande ? Dans le code que tu montres tu télécharges tout dans "img/".

bref, si on imagines que les images sont chacune stockées dans un dossier différent, mais avec le même nom de fichier :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
$rep_mini = 'img/mini';
$rep_big = 'img/big';
$dir = opendir($rep_mini);
while(($f = readdir($dir)) !== FALSE){
    if($f === '.' || $f === '..') 
        continue;
 
    echo '<a href="'.$rep_big . '/' . $f .'" title="Afficher en grand">
        <img src="'.$rep . '/' . $f .'" alt="" />
    </a>';
}
Si tu veux afficher çà en popin, utilises quelque-chose type lightbox.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h33   #5
Invité de passage
 
Inscription : juin 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 6
Points : 1
Points : 1
Merci. J'ai un peu modifié les chemins pour l'adapter à mon site :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$rep_mini = 'mini';
$rep_big = 'big';
$dir = opendir($rep_mini);
while(($f = readdir($dir)) !== FALSE){
    if($f === '.' || $f === '..') 
        continue;
 
    echo '<a href="'.$rep_big . '/' . $f .'" title="Afficher en grand">
        <img src="'.$rep_mini . '/' . $f .'" alt="" />
    </a>';
}
?>
.

Je vais maintenant essayer d'intégrer tout ça dans une LightBox.
Je te tiens au courant. Merci encore.
miklwebdesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h39   #6
Invité de passage
 
Inscription : juin 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 6
Points : 1
Points : 1
ça y est, ça fonctionne nickel chrome dans la lightbox. Tu viens de me retirer une belle épine du pied, que dis je une épine, une poutre .

Encore merci !
miklwebdesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h54   #7
Membre éprouvé
 
Avatar de d-Rek
 
Développeur Web
Inscription : janvier 2007
Messages : 438
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2007
Messages : 438
Points : 400
Points : 400
Comme ça, c'est très facile de bypasser ta limitation de taille..
Code HTML :
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $taille_max; ?>" />

Sinon pour la miniature, je te présente Resize_photo..
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function Resize_photo($src_file, $dest_file, $new_width, $new_height){
	list($width, $height, $type, $attr)=getimagesize($src_file);
	$source=ImageCreateFromJPEG($src_file);
	if(!$source){return false;}
	if($width>$new_width || $height>$new_height){
		if($width>$height){$new_height=$height*($new_width/$width);}
		else{$new_width=$width*($new_height/$height);}
	}
	$image_p=imagecreatetruecolor($new_width, $new_height);
	imagecopyresampled($image_p, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	return ImageJpeg($image_p, $dest_file);
}
?>
Si un utilisateur upload une image trop grande pour toi, tu la redimensionnes en une taille acceptable, tu fais pareil pour la miniature.. d'une pierre deux coups. Exemple :
Code PHP :
1
2
3
4
<?php
Resize_photo($_FILES['photo']['tmp_name'], 'img/'.$dest_fichier, 800, 600); //originale resizée si besoin
Resize_photo('img/'.$dest_fichier, 'mini/'.$dest_fichier, 150, 120); //miniature
?>

A noter que 800 c'est ta largeur max et 600 la hauteur max. Idem pour 150 et 120 c'est pour la miniature.


Edit: ah bon zut, j'avais pas bien compris ton problème.
__________________
Mon blog
d-Rek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 13h01   #8
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Sinon, utiliser la class.upload.php

Très utile. Permet de redimensionner, convertir, ajouter du texte etc...

le tout, très simplement.
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h28.


 
 
 
 
Partenaires

Hébergement Web