Bonjour,

J'ai un petit soucis avec le tuto de Grafikart sur l'upload d'une image et la création d'une miniature.
Voilà mon code :

$upload_Dir = '../img/produits/' ; // dossier de sauvegarde de la photo principale
$upload_Min = '../img/min/' ;  // dossier de sauvegarde de la miniature

if (isset($_POST['ajouter'])) {
    $name = $_POST['name'];
    $description = $_POST['description'];
    $sex = $_POST['sex'];
    $priceJ = $_POST['priceJ'];
    $priceA = $_POST['priceA'];
    require'imgClass.php';  // appel de la class qui gère la génération des miniatures
    $imgName = $_FILES['image']['name'];
    $imgTmp = $_FILES['image']['tmp_name'];
    $imgSize = $_FILES['image']['size'];

    if (empty($name)) {
        $error = 'Renseigner le nom du produit';
    }elseif (empty($description)) {
        $error = 'mettre une description du produit';
    }elseif (empty($sex)) {
        $error = 'Indiquer une catégorie';
    }elseif (empty($priceJ)) {
        $error = 'Renseigner un prix enfant';
    }elseif (empty($priceA)) {
        $error = 'Renseigner un prix Adulte';
    }elseif (empty($imgName)) {
        $error = 'Choisir une photo';
    }else{
        // récupérer l'extension de l'image
        $imgExt = strtolower(pathinfo($imgName, PATHINFO_EXTENSION));
        // Extension autorisé
        $allowExt = array('jpeg', 'jpg', 'png', 'gif');
        // nom de l'image
        $userPic = $_FILES['image']['name']; // nom de l'image principale
        // vérifier validité de l'image
        if (in_array($imgExt, $allowExt)) {
            if ($imgSize < 5000000) {
                move_uploaded_file($imgTmp, $upload_Dir.$userPic);
                Img::creerMin($upload_Dir.$userPic,$upload_Min,$userPic,120,150); // création de la miniature
            }else{
                $error = 'Image trop lourde';
            }
        }else{
            $error = 'Merci de choisir une photo valide';
        }
    }

Je ne comprends pas d'ou vient le problème ?

merci

8 réponses


macinsteph
Auteur
Réponse acceptée

merci j'ai trouvé mon erreur, ça venait de ma requête !! mauvaise variable.

Salut,

dis nous au moins le problème que tu rencontres.

que la miniature n'est pas créée, oui désolé

Je n'ai pas suivi le tuto,
La classe "ImgClass" c'est une classe perso c'est ça ?

Tu peux montrer la fonction "CreerMin" ?

En même temps, fais un var_dump des 4 variables en paramètres pour voir.

c'est la class que Grafikart met en téléchargement, ce n'est pas moi qui l'ai créé.
Je l'a met la :

<?php

class Img{

    static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){
        // On supprime l'extension du nom
        $nom = substr($nom,0,-4);
        // On récupère les dimensions de l'image
        $dimension=getimagesize($img);
        // On cré une image à partir du fichier récup
        if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
        else if(substr(strtolower($img),-4)==".jpeg"){$image = imagecreatefrompng($img); }
        else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
        else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
        // L'image ne peut etre redimensionne
        else{return false; }

        // Création des miniatures
        // On cré une image vide de la largeur et hauteur voulue
        $miniature =imagecreatetruecolor ($mlargeur,$mhauteur); 
        // On va gérer la position et le redimensionnement de la grande image
        if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
        if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
        if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
        // on modifie l'image crée en y plaçant la grande image redimensionné et décalée
        imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
        // On sauvegarde le tout
        imagejpeg($miniature,$chemin."/".$nom.".jpg",90);
        return true;
    }
}

?>

Aprés le require de la class est bien positionné ?
Et l'appel à la création de la miniature est elle à la bonne place ?
j'ai suivi le tuto de création d'une galerie : Tutoriel PHP - Gestion d'images/Création d'une galerie

bonsoir, quand tu supprime l'extention tu

 $nom = substr($nom,0,-4);

or si tu upload un .jpeg tu as 5 caracteres après le $nom à voir si ça vient de la?
Cordialement
André

Bonsoir,
Ne faudrait il pas que sur cette ligne :
$allowExt = array('jpeg', 'jpg', 'png', 'gif');
Il n'y a pas des points avant le nom des extentions?
$allowExt = array('.jpeg', '.jpg', '.png', '.gif');
Cordialement.

J'aurai mis l'extention en paramètre dans la méthode ::creerMin(), et un sytème de condition derrière.

static function creerMin($params, [...,] $extention = null) {
    $image = self::createImage($extention);
    if ($image) {
        ...
        return true;
    }
    return false;
}

/**
* Création d'une nouvelle image
* @param $extention string extention de l'image
* @return 
*/
static private function createImage($extension) {
    switch($extention) {
        case 'jpg':
        case 'jpeg':
            $image = imagecreatefromjpeg($img);
            break;
        case 'png':
            $image = imagecreatefrompng($img);
            break;
        case 'gif':
            $image = imagecreatefromgif($img);
            break;
        default:
            return false;
            break;
    }
    return $image;
}