Limiter le nombre d'upload

Eléphant du PHP | 205 Messages

01 déc. 2018, 19:50

Bonsoir à tous,

je cherche à limiter le nombre d'image après l'upload. J'utilise un script java pour charger les images et les voir au fur et à mesure. Une fois 5 images uploader, je voudrais afficher une message avec java "nombre d'image maxi atteint" pas exemple.

Je limite l'upload avec PHP, je vous met les scripts que j'utilise ça sera mieux pour comprendre.
<div class="form-group">
  
    <input type="file" name="multiple_files" id="multiple_files"  class="file" multiple />
    <span class="text-muted">Uniquement au format .jpg, png, .gif et poids maximum 2 Mo</span>
	<div class="input-group col-xs-12">
      <span class="input-group-addon"><i class="glyphicon glyphicon-picture"></i></span>
      <input type="text" class="form-control input-lg" disabled placeholder="Charger une image">
      <span class="input-group-btn">
        <button class="browse btn btn-primary input-lg" type="button"><i class="glyphicon glyphicon-search"></i> Choisir une image</button>
      </span>
    </div>
    <span id="error_multiple_files"></span>
 
     <br />
   <div class="row" id="image_table">
    
   </div>
  </div>
Le code java que j'utilise dans le fichier html
  var error_images = '';
  var form_data = new FormData();
  var files = $('#multiple_files')[0].files;
  if(files.length > 3)
  {
   error_images += 'Vous ne pouvez pas t&eacute;l&eacute;charger plus de 3 images';
  }
  else
  {
   for(var i=0; i<files.length; i++)
   {
    var name = document.getElementById("multiple_files").files[i].name;
    var ext = name.split('.').pop().toLowerCase();
    if(jQuery.inArray(ext, ['gif','png','jpg','jpeg']) == -1) 
    {
     error_images += '<p>Fichier invalide !</p>';
    }
    var oFReader = new FileReader();
    oFReader.readAsDataURL(document.getElementById("multiple_files").files[i]);
    var f = document.getElementById("multiple_files").files[i];
    var fsize = f.size||f.fileSize;
    if(fsize > 200000)
    {
     error_images += '<p>L\'image est trop grosse</p>';
    }
    else
    {
     form_data.append("file[]", document.getElementById('multiple_files').files[i]);
    }
   }
  }
  if(error_images == '')
  {
   $.ajax({
    url:"upload.php",
    method:"POST",
    data: form_data,
    contentType: false,
    cache: false,
    processData: false,
    beforeSend:function(){
     $('#error_multiple_files').html('<br /><label class="text-primary"><img src="img/ajax-loader.gif" /> T&eacute;l&eacute;chargement en cours...</label>');
       
    },   
    success:function(data)
    {
     $('#error_multiple_files').html('<br /><label class="text-success">T&eacute;l&eacute;chargement termin&eacute;</label>');
     load_image_data();
    }
	
   });
  }
  else
  {
   $('#multiple_files').val('');
   $('#error_multiple_files').html("<span class='text-danger'>"+error_images+"</span>");
   return false;
  }
 
et le code PHP pour limiter et uploader les images
<?php session_start();
//upload.php
include('config.inc.php');


 if(count($_FILES["file"]["name"]) > 0)
{
 //$output = '';
 sleep(3);
 

 
 for($count=0; $count<count($_FILES["file"]["name"]); $count++)
 {
  $file_name = $_FILES["file"]["name"][$count];
  $tmp_name = $_FILES["file"]['tmp_name'][$count];
  $file_array = explode(".", $file_name);
  $file_extension = end($file_array);
  if(file_already_uploaded($file_name, $bdd))
  {
   $file_name = $file_array[0] . '-'. rand() . '.' . $file_extension;
  }
 	if(file_count($count, $bdd))
	{
   $location = 'img/' . $file_name;
  
  if(move_uploaded_file($tmp_name, $location))
  {
  $query = "
   INSERT INTO tbl_image (image_name, id_membre, image_description) 
   VALUES ('".$file_name."', '".$_SESSION['id']."', '')
   ";
   $statement = $bdd->prepare($query);
   $statement->execute();
   }
 }
	}
	
	}


function file_already_uploaded($file_name, $bdd)
{
 
 $query = "SELECT * FROM tbl_image WHERE image_name = '".$file_name."'";
 $statement = $bdd->prepare($query);
 $statement->execute();
 $number_of_rows = $statement->rowCount();
 if($number_of_rows > 0)
 {
  return true;
 }
 else
 {
  return false;
 }
}

function file_count($count, $bdd)
{

 $query = "SELECT * FROM tbl_image WHERE id_membre = '".$_SESSION['id']."'";
 $nb = $bdd->prepare($query);
 $nb->execute();
 $nb_of_rows = $nb->rowCount();
 if($nb_of_rows < 5)
 {
 return true;
 }
 else
 {
 return false; 
 }
 }

?>
Merci de votre aide...

Mammouth du PHP | 832 Messages

06 déc. 2018, 16:47

Est-ce que ton code - tel qu'il est présenté ci-haut - fonctionne ?
( J'entends, à l'exception de la vérification files.length > 3)

As-tu vérifié la valeur de files.length ?
Pour ce faire, il te suffit d'un alert("Voici la valeur évaluée : " + files.length) ;

Si tes usagers sont préalablement avisés des limites, tu peux réduire ton nombre d'occurrence de traitement.
En lieu et place de
for(var i=0; i<files.length; i++)

Tu y mettrais alors une valeur en dur, conforme à ta limite
for(var i=0; i<3; i++)
Soyez artisans de paix