PHP несколько файлов лимит загрузки - PullRequest
0 голосов
/ 05 июня 2018

У меня такая ситуация: у меня есть несколько входных файлов, но мне нужно ограничить изображения в базе данных.Поэтому я устанавливаю лимит, и каждый раз, когда происходит загрузка, лимит проверяется, но у меня возникают проблемы с циклом.

Если лимит равен 4 изображениям, в БД хранятся 2 изображения, и пользовательотправить 5 файлов, он вставляет 5 файлов.Он должен вставить 2 и отбросить 3 других изображения.

Мне нужен цикл, который выполняет эту математику.

Пока это мой код:

$prod_id    = $_POST['prod_id'];
$img_limit  = 4;
# ----------------------------------------
$sql        = "SELECT * FROM images WHERE prod_id = ?";
$arrayParam = array($prod_id);
$data_img   = $crud->getSQLGeneric($sql, $arrayParam, true);
$total_img  = count($data_img);
# ----------------------------------------
if($total_img == $img_limit)
{
  echo '<script type="text/javascript">';
  echo 'alert("You already have '.$img_limit.' images inserted");';
  echo 'window.history.back();';
  echo '</script>';
  exit;
}
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{
  $allowed_ext = array('bmp','jpg','jpeg','png','svg');
  $array_ext   = explode('.', $_FILES['img_file']['name'][$i]);
  $file_ext    = strtolower(end($array_ext));
  # -----
  $img_path = 'upload/';
  $img_tmp  = $_FILES['img_file']['tmp_name'][$i];
  $img_name = md5(date('d_m_Y_H_i_s').'_'.$_FILES['img_file']['name'][$i]).'.'.$file_ext;
  # -----
  $arrayInsert = array('prod_id' => $prod_id, 'img_name' => $img_name);
  $return      = $crud->insert($arrayInsert);
  # -----
  move_uploaded_file($img_tmp, $img_path.$img_name);
}
echo "Image(s) uploaded!";

Любая помощьДобро пожаловать!=) Спасибо

1 Ответ

0 голосов
/ 05 июня 2018

Ваш цикл for не ищет ограничения:

# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{

должен стать

# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $max_files; $i++)
{

, и даже если пользователь разместит 5 изображений (пример), он загрузится только какмного изображений в виде свободных слотов у вас есть в вашей БД (ограничение 4 - всего 2, затем будет загружено 2)

...