Jump to content
AlexandreG

[PS 1.6] Récupérer le nom d'une image envoyée par le formulaire de module

Recommended Posts

Bonjour tout le monde,

J'ai pour mission de développer mon premier module prestashop, tous ce passait bien jusqu'à ce que je doive envoyer une image par le formulaire de configuration du module, pour se faire j'ai donc chercher quelques exemples sur internet, qui ont l'air de marché, car l'image envoyé par se formulaire finit bien dans le dossier img du module.

J'ai aussi réussi à récupérer l'url de ce dossier, pour pouvoir afficher l'image, mais voilà mon problème je n'arrive pas à récupérer le nom de l'image + l'extension pour pouvoir la concaténer à l'url du dossier pour l'afficher dans ma balise <img>. 

La fonction qui permet de créer le champ pour joindre le fichier, qui est appelée dans ma fonction renderForm():

public function displayCatBack($num)
    {   
        $tab_cat_end = array();
        for ($i=1; $i < ($num+1); $i++) {
            $tab_cat_end[] = array('name' => 'dcea_img_cat_'.$i, 'label' => 'Image à afficher pour la catégorie '.$i.' :', 'type' => 'file');
        }
        return $tab_cat_end;
    }

La fonction postProcess() trouvée sur internet:

for ($i=1; $i < (Configuration::get('dcea_nbr_cat')+1) ; $i++) {
                Configuration::updateValue('dcea_cat_'.$i, 'dcea_cat_'.$i); 
                if (isset($_FILES['dcea_img_cat_'.$i])){   
                    $target_file = dirname(__FILE__).DIRECTORY_SEPARATOR.'img'.DIRECTORY_SEPARATOR.$_FILES['dcea_img_cat_'.$i]["name"];
                    $uploadOk = 1;
                    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
                    // Check if image file is a actual image or fake image
                    if(isset($_POST["submit_cat"])) 
                    {
                        $check = getimagesize($_FILES['dcea_img_cat_'.$i]["tmp_name"]);
                        if($check != false) {
                            echo "File is an image - " . $check["mime"] . ".";
                            $uploadOk = 1;
                        } else {
                            echo "File is not an image.";
                            $uploadOk = 0;
                        }
                    }
                    // Check if file already exists
                    if (file_exists($target_file)) {
                        echo "Sorry, file already exists.";
                        $uploadOk = 0;
                    }
                    // Allow certain file formats
                    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
                    && $imageFileType != "gif" ) {
                        echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
                        $uploadOk = 0;
                    }
                    // Check if $uploadOk is set to 0 by an error
                    if ($uploadOk == 0) {
                        echo "Sorry, your file was not uploaded.";
                    }
                    else 
                    {
                        if (move_uploaded_file($_FILES['dcea_img_cat_'.$i]["tmp_name"], $target_file)) 
                        {
                            echo "The file ". $_FILES['dcea_img_cat_'.$i]["name"]. " has been uploaded.";
                            $file_name = $_FILES['dcea_img_cat_'.$i]["name"];
                            Configuration::updateValue('dcea_img_cat_'.$i, $file_name);
                        } 
                        else 
                        {
                            echo "Sorry, there was an error uploading your file.";
                        }
                    }
                }
            }

Puis ma fonction qui envoie dans le hook les données dont l'image, qui est donc appelée dans hookDisplayHome():

public function getCategoryInfo($id)
    {
        $category = new Category(Configuration::get('dcea_cat_'.$id), Context::getContext()->language->id);
        $name = $category->name;
        $link = $category->getLink();
        $nbr = Configuration::get('dcea_nbr_cat');
        $nomImage = Configuration::get('dcea_img_cat_'.$id);
        $img = $this->context->link->protocol_content.Tools::getMediaServer($nomImage).$this->_path.'img/'.$nomImage;
        return array('name_cat' => $name, 'link_cat' => $link, 'img_cat' => $img, 'nbr_cat' => $nbr);
    }

Pour résumer, sur le site je récupère juste l'url du dossier donc peut-être que la ligne ci-dessous ne marche pas dans postProcess(), mais pourquoi ? Ou alors il y a un autre problème ?

Configuration::updateValue('dcea_img_cat_'.$i, $file_name);

Merci pour votre aide.

Edited by AlexandreG (see edit history)

Share this post


Link to post
Share on other sites

Je ne réponds pas à ta question, mais TOUJOURS filtrer/réécrire le nom du fichier transférer car même si ton code n'accepte que des images, tu ne voudrais pas qu'un hacker remplace l'image d'un produit ou du log par une jolie image porno

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More