2017-06-15 1 views
1

J'essaie de valider tous mes fichiers téléchargés, en fait, je fais la taille du fichier et la validation du type de fichier. Si la validation échoue pour un fichier, j'enregistre ce fichier pour le message d'erreur.J'utilise pour chaque boucle le traitement du fichier et si la condition pour la taille du fichier et la validation du type de fichier, mais le problème est seulement si la condition est évaluée et la seconde n'est pas testé. Les deux si mensonges à l'intérieur de chaque boucle. Toute aide sera appréciée ...Validation de téléchargement de fichiers multiples en PHP ne fonctionne pas

Code

public function validate_my_files(){ 

    foreach($this->files_from_user_validateit['name'] as $key => $value){ 
     $name = $this->files_from_user_validateit['name'][$key]; 
     $size = $this->files_from_user_validateit['size'][$key]; 
     $type = $this->files_from_user_validateit['type'][$key]; 
     //$error[$key] = $this->files_from_user_validateit['error'][$key]; 
     //$tmp_name[$key] = $this->files_from_user_validateit['tmp_name'][$key]; 

     //not allowed file extensions 
     $not_allowed_ext = array('php','js','asp','aspx','py','c','c++','jsp','perl','cfg','css','java', 
            'json'); 
     //lets find the extension of the filename 
     $est = explode('.',$name); 
     $ext = $est[count($est)-1]; 
     if(in_array($ext,$not_allowed_ext)){ 
      //putting in session for later message 
      $_SESSION['ext'][] = $name; 
     } 

     //lets check for file size now, lets not allow file greater than 50MB 
     if($size > 47185920){ 
      $_SESSION['size'][] = $name; 
     } 
    } 
    print_r($_SESSION);die(); 
    } 

seule extension de fichier si on teste alors si la condition pour la taille ne pas fonctionne ...

EDIT

Malheureusement, il est énorme problème avec mon formulaire de téléchargement. Les fichiers sélectionnés plus tard ne sont traités que par $ _FILES, j'utilise le téléchargement de fichiers multiples et l'affichage des fichiers sélectionnés sur la table dans la même page en utilisant le script java. disons que je sélectionne 5 fichiers au début (les 5 fichiers affichés sur la table) et sélectionnez à nouveau 3 fichiers, maintenant il y a 8 fichiers sur la table.Mais seulement les 3 derniers fichiers que j'ai sélectionnés 2ème fois est disponible dans le tableau $ _FILES. S'il vous plaît quelqu'un a la solution pour cette ...

Rééditer

Id « myfiles » est pour la tenue de plusieurs fichiers à partir du champ de fichier d'entrée. Id 'dataS' est div cette table créée par ci-dessous donnée JS. SI 'tot' est une taille totale du fichier sur la table. FORMULAIRE ENTREE:

<form id="uploadform" method="post" action="" enctype="multipart/form-data"> 
     <div id="datas"></div> 

     <div id="tot"><h3>TOTAL SIZE:</h3> <span id="zise">0 MB</span></div> 

     <div id="addfiles"><input type="file" name="addfiles[]" value="Add Files" multiple="multiple" id="myfiles" ></div> 

     <input type="submit" name="sbmtfile" style="color:green;font-size: 17px;"> 

    </form> 

Mes JS:

<script type="text/javascript"> 
    var s = 1; 
    var totsize = 0; 

    myfiles.onchange = function(){ 
     var a = document.getElementById('myfiles').files; 
     var b = document.getElementById('datas'); 
     var total = document.getElementById('tot');//for table title 

    var c = document.createElement('TABLE'); 
    c.className = 'showtable'; 
    c.border = '1px'; 
    c.cellspacing = '0'; 
    c.cellpadding = '2'; 
    c.width = '100%' 

    for(var i = 0; i < a.length; i++){ 
     var f = document.createElement('TR'); 
     c.appendChild(f); 
     //for total file size 
     totsize = totsize + a[i].size; 

     var r = document.createElement('TD'); 
     r.align = 'center'; 
     r.width = '152px'; 
     f.appendChild(r); 
     r.appendChild(document.createTextNode(s++)); 

     var y = document.createElement('TD'); 
     y.align = 'left'; 
     y.width = '610px'; 
     y.appendChild(document.createTextNode(a[i].name)); 
     f.appendChild(y); 

     var z = document.createElement('TD'); 
     z.align = 'center'; 
     r.width = '152px'; 
     z.appendChild(document.createTextNode(Math.round((a[i].size)/1024))); 
     f.appendChild(z); 

     var x = document.createElement('TD'); 
     x.align = 'center'; 
     x.width = '152px'; 
     x.appendChild(document.createTextNode('DELETE')); 
     f.appendChild(x); 
    } 

    b.appendChild(c); 
    document.getElementById('zise').innerHTML = Math.round((totsize/(1024*1024)))+ ' MB'; 
} 

</script> 
+0

est-ce que 'files_from_user_validateit()' est une fonction personnalisée? Puisque vous vérifiez 'if ($ size> 47185920)', qui est essentiellement 'if ($ this-> files_from_user_validateit ['size'] [$ key];> 47185920)', vous devez vérifier la valeur renvoyée. – Sean

+0

@Sean ($ this-> files_from_user_validateit) détient tous mes fichiers téléchargés, que je reçois à partir du formulaire, c'est à dire qu'il s'agit d'un tableau de fichiers et qu'il fonctionne bien, je peux obtenir tous mes fichiers téléchargés ici ... – mindre

Répondre

0

que vous cherchez l'élément linguistique else?

if (in_array($ext,$not_allowed_ext)) { 
      //putting in session for later message 
      $_SESSION['ext'][] = $name; 
} else { 
    #### 
    //lets check for file size now, lets not allow file greater than 50MB 
    if ($size > 47185920) { 
     $_SESSION['size'][] = $name; 
    } 
} 

Vérifiez uniquement la taille si ce n'est pas une violation d'extension.

(pas un bel exemple que je fait cela, et il y a aussi d'autre si, mais si vous ne saviez pas d'autre, je pense qu'il est plus important de voir les autres en premier)

+0

Bro , j'ai besoin de vérifier à la fois le type ainsi que la taille ... – mindre

0

Comme vous avez dit notre premier si l'état fonctionne bien, mais ne fonctionne pas pour le repos chose donc je la question en pour loop.So simplement vérifier cette chose i il aidera

validate_my_files public function() {

foreach($this->files_from_user_validateit as $key => $value){ 
    $name = $value['name'][$key]; 
    $size = $value['size'][$key]; 
    $type = $value['type'][$key]; 
    //$error[$key] = $this->files_from_user_validateit['error'][$key]; 
    //$tmp_name[$key] = $this->files_from_user_validateit['tmp_name'][$key]; 

    //not allowed file extensions 
    $not_allowed_ext = array('php','js','asp','aspx','py','c','c++','jsp','perl','cfg','css','java', 
           'json'); 
    //lets find the extension of the filename 
    $est = explode('.',$name); 
    $ext = $est[count($est)-1]; 
    if(in_array($ext,$not_allowed_ext)){ 
     //putting in session for later message 
     $_SESSION['ext'][] = $name; 
    } 

    //lets check for file size now, lets not allow file greater than 50MB 
    if($size > 47185920){ 
     $_SESSION['size'][] = $name; 
    } 
} 
print_r($_SESSION);die(); 

} changer juste

$this->files_from_user_validateit['name'] 

Avec

$this->files_from_user_validateit 

Et

$this->files_from_user_validateit['name'][$key] 

avec

$value['name'][$key] 

Il peut vous aider.

+0

Apprécier que bro, mais malheureusement, il y a un gros problème avec ma forme (comme mentionné dans la section d'édition). Si vous avez une solution alors s'il vous plaît suggérer ... – mindre

+0

Je pense que vous avez un problème dans le script Java, alors pouvez-vous montrer le script ici pour télécharger des fichiers. –

+0

s'il vous plaît, jetez un oeil à js et champ de saisie je viens d'ajouter ... – mindre