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

Langage PHP Discussion :

Uploader plusieurs fichiers si les inputs type file sont remplis


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 298
    Par défaut Uploader plusieurs fichiers + insertion leurs noms dans la base
    salut je développe un site dont je dois faire un espace admin d'apres ce dernier un administreur va uploader des fichiers il peut être de 1 jusqu'a 5 fichier maximum

    le probleme c'est pas comment uploader un fichiers parceque j'ai deja pu le faire le probleme c'est comment contrôler mes 5 input type file ainsi si je remplie deux fichiers il dois uploader uniquement 2fichiers
    bref je dois uploader des fichiers selon le besoin j'ai 5 input type file j'en sais pas comment faire ca j'ai deja un script qui uploader et qui verifier l'extension du fichier et la quantité de fichiers son seul défaut c'est qu'il accepte fichier vide

    s'il vous plait comment je peux tester si mes input type file sont rempli ainsi si ils sont vide mon script dois rien faire

    voila mon script uploader un fichier uniquement
    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
     
    if(isset($_POST['valider'])){
     
    $dated=$_POST['dated']; //date debut
    $titre=addslashes($_POST['titre']); //titre actualite
     
    if(!empty($dated) && !empty($titre)){
     
    $dossier = "uploads/";
     
     
     
    $fichier = basename($_FILES['photo']['name']);
     
    $taille_maxi = 100000;
    $taille = filesize($_FILES['photo']['tmp_name']);
     
    $extensions = array('.jpg', '.gif', '.png');
     
    $extension = strrchr($_FILES['photo']['name'], '.');
     
     
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = '1';
    }
    if($taille>$taille_maxi)
    {
          $erreur = '2';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         //On formate le nom du fichier ici...
         $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     
         if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
    	 print("upload avec sucee");
     
    	 $file = $dossier . $fichier; 
     
    $fp   = fopen($file, "rb");   // le b c'est pour les windowsiens
    $attachment = fread($fp, filesize($file))
    fclose($fp);
     
    }
         else //Sinon (la fonction renvoie FALSE).
         {
             print("erreur upload fichier resseyer plus tard");
         }
    }
    else
    {
         if ($erreur=='1'){
    print("taille de photo tres lourde");
    	 }
    	 else
    	 {
    	print("format photo inconnu");
    	 }
    }
    }
    ?>
    ceci est resumé de mon code, mon code un defaut c'est que il verifier le champs file malgré qu'il est vide ainsi il m'indique "taille de photo tres lourde"

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    Déjà pour commencer tu as inversé tes codes d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = '1';
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($erreur=='1'){ // Devrait être '2'
    print("taille de photo tres lourde");
    	 }
    	 else
    	 {
    	print("format photo inconnu");
    	 }
    Le message d'erreur est donc cohérent (pas d'extension)

    Ensuite, il te suffit de tester $_FILES. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_FILES) && !empty($_FILES)) {
    // l'upload commence
    }
    Tu peux utiliser un tableau pour ce que tu veux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="file" name="photo[]">
    <input type="file" name="photo[]">
    <input type="file" name="photo[]">
    <input type="file" name="photo[]">
    <input type="file" name="photo[]">
    Puis:
    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
    if(isset($_FILES) && !empty($FILES)) {
     
    	if(isset($_FILES['photo'])) {
     
    		foreach($_FILES['photo'] as $file) {
     
    			// contrôler:
    			// - l'extension
    			// - le poids (ni trop gros, ni trop petit)
    			// - les dimensions si c'est une image 
    			// - etc.
     
    			$fichier = basename($file['name']);
     
    			// (...)
    		}
    	}
    }
    C'est une simple suggestion, le foreach n'est pas forcément des plus adpatés ici (si le visiteur modifie le type du champ HTML et enlève les [], tu auras des surprises ), mais j'espère que ça te donnera une idée...

Discussions similaires

  1. [upload d'un fichier] Bloquer sur l'input type file VBA
    Par awesome33 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/07/2014, 13h15
  2. Choisir le répertoire de départ lors d'un upload de fichier (input type="file")
    Par _jey_ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 16/07/2010, 16h42
  3. upload d'un fichier sans passer par <input type=file
    Par al3alwa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 31/05/2007, 17h48
  4. Connaitre type d'un fichier (<input type="file"..>) avec javascript
    Par goldorax113 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 09h00
  5. IE et les input type=file
    Par bibendum dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/03/2006, 17h25

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