Ajout de fichiers + miniatures

Eléphanteau du PHP | 34 Messages

18 janv. 2013, 11:12

Bonjour à tous,


Pour la gestion d'un site d'administration, j'ai mis en place un système d'envoi de fichiers.
Ce que j'aimerais faire: permettre à l'utilisateur d'envoyer des images et de petites vidéos.

J'ai donc mis en place un formulaire, et ceci pour la gestion de fichiers:
<p><label for="mediaArticle">Médias:</label><input type="file" name="mediaArticle" id="mediaArticle" value="<?php if(isset($_GET["show"])) {echo $tiroir->media;} ?>"/></p>
<input type="hidden" name="MAX_FILE_SIZE" value="15728640" >
NB: le enctype est bien présent.

Ce formulaire fonctionne, et envoi bien mes fichiers dans ma base de données.

Voici la fonction qui gère cela:
function uploadArticle(){
            $tempName = $_FILES["mediaArticle"]["tmp_name"];
            $name = $_FILES["mediaArticle"]["name"];
            $destination= "uploads/$name";
            
            $extensions = array("uploads/jpeg","uploads/png","uploads/gif","uploads/jpg","uplaods/avi","uploads/mp4");
            
            if(in_array($_FILES["mediaArticle"]["type"],$extensions)){
                move_uploaded_file($tempName, $destination);
            }
            
            else{
                echo "Le fichier que vous tentez d'envoyer n'est pas au bon format";
            }

    }
Premier soucis:

Comme vous pouvez le voir, j'ai tenté de faire une vérification sur l’extension du fichier: cela ne marche pas, si j’envoie un fichier png, il entre le fichier dans la base de données, mais m'indique tout de même le echo "Le fichier que vous tentez d'envoyer n'est pas au bon format".

J'aurais également souhaité mettre en place une vérification de la taille du fichier, mais je ne sais pas comment je dois faire. Le champ caché suffit-il?

Autre question: sous mon formulaire, j'ai crée un tableau qui reprend les différentes données de la DB. Pour ce qui est des médias, le chemin s'affiche (j'ai par exemple image1.jpg), ce que je voudrais: afficher une vignette de ce média.

J'ai recherché sur le net, dans divers bouquins de PHP, mais je suis perdue.

Quelqu'un peut-il m'aiguiller au mieux svp, afin que je comprenne comme tout cela fonctionne?

D'avance merci à vous!

Eléphant du PHP | 343 Messages

18 janv. 2013, 16:35

Ne jamais se fier à une donnée modifiable par l'utilisateur ;)
Pour connaitre la taille de ton fichier: $_FILES['mediaArticle']['size'];

Pour l'autre soucis, c'est normal que ça ne marche pas. Ton "type" récupère les types mime du genre: image/gif, si tu les compares à uploads/gif ça ne le fait pas trop non? :D
Développeur web

Eléphanteau du PHP | 34 Messages

18 janv. 2013, 16:57

J'ai modifié un peu ma fonction, voici à quoi elle ressemble:

function uploadArticle(){
        
            $tempName = $_FILES["mediaArticle"]["tmp_name"];
            $name = $_FILES["mediaArticle"]["name"];
            $destination= "uploads/$name";
            
            $ext = strtolower(substr($name['name'],-3));
            $extensions_OK = array("image/jpeg","image/png","image/gif","image/jpg");
            
            if(in_array($ext,$extensions_OK)){
                move_uploaded_file($tempName, $destination); 
            }
            
            else{
                echo "Le fichier que vous tentez d'envoyer n'est pas au bon format";
            }
    }
L'envoi de fichier se fait, mais le echo qui doit s'afficher si l’extension n'est pas bonne s'affiche aussi quand le fichier est envoyé... je ne comprends pas pourquoi, j'en perd limite mes moyens lol

Quand à l'affiche d'une vignette.... je suis encore plus perdue.

Eléphant du PHP | 343 Messages

18 janv. 2013, 17:05

$name['name']? Il y a quoi dedans? :D

Pour la vignette, il suffit d'ajouter img src autour avec comme source le chemin du fichier ;)
Développeur web

ViPHP
AB
ViPHP | 5818 Messages

18 janv. 2013, 17:16

1/ Dans ton script si un fichier de même nom existe déjà sur le serveur, il sera écrasé.
2/ Si par mégarde un visiteur tente de télécharger un fichier qui dépasse la directive post_max_size du serveur, il aura une page blanche en retour.

Si tu veux quelque chose de plus complet et qui gère ces erreurs il y a ce tuto.