Загрузка нескольких файлов и сохранение только одного пути к файлу в базе данных MySQL

#php #mysql #file-upload

#php #mysql #загрузка файла

Вопрос:

Это простой код HTML-файла

  <form action="upme.php" method="post" enctype="multipart/form-data">
      <input type="file" name="files[]" multiple>
      <button type="submit">Upload</button>       
 </form>
 

Это простой код файла PHP

 <?php
$IMG = isset($_POST['files']) ? $_POST['files'] : array();

if (!empty($IMG)) 
{
$uploads_dir = 'images/';
foreach ($IMG["error"] as $key => $error)
{
  if ($error == UPLOAD_ERR_OK)
{
      $tmp_name = $IMG["tmp_name"][$key];
      $name = $IMG["name"][$key];
      move_uploaded_file($tmp_name, "$uploads_dir/".$name);
      $name_array=mysql_real_escape_string($name);
      $value_insert[] = "('" . $name_array . "')";
   }
}
$values_insert = implode(',', $value_insert);
  $query = "INSERT INTO upload (FILE_NAME) VALUES" . $values_insert;
  $result = mysql_query($query);
  }else{
 echo 'empty array';
  }

 ?>
 

когда я использую этот код, он выдает ошибку «пустой массив», но файл не загружается.

Комментарии:

1. $IMG = isset($_POST[‘files’]) ? $_POST[‘files’] : array(); изменить на $IMG = isset($ _FILES[‘files’]) ? $_FILES[‘files’] : array();

2. Уважаемый, просто под html-кодом.

3. @NIRANJANS хранит свои данные в БД, но каждый файл хранится в отдельном столбце БД, но я хочу сохранить в одном столбце.

4. просто сделайте перед foreach $i=1; в условии if ($i==1) {your sql query} $i ; foreach это произойдет один раз.

5. @SamirNabil можете ли вы предоставить демонстрационный код,

Ответ №1:

 <?php
    $IMG = isset($_FILES['files']) ? $_FILES['files'] : array();

    if (!empty($IMG)) 
    {
        $uploads_dir = 'images/';
        $value_insert = '';
        foreach ($IMG["error"] as $key => $error)
        {
            if ($error == UPLOAD_ERR_OK)
            {
              $tmp_name = $IMG["tmp_name"][$key];
              $name = $IMG["name"][$key];
              move_uploaded_file($tmp_name, "$uploads_dir/".$name);
              $name_array=mysql_real_escape_string($name);
              $value_insert .= $name_array . ",";
            }
        }
         $values_insert = rtrim($value_insert, ',');
          $query = "INSERT INTO upload (FILE_NAME) VALUES" . $values_insert;
          $result = mysql_query($query);
     }else{
        echo 'empty array';
     }

?>
 

Комментарии:

1. каждый файл хранится в отдельном столбце db, но я хочу сохранить в одном столбце

2. если я изменю $IMG = isset($_POST[‘files’]) ? $ _POST[‘files’] : array(); изменить на $IMG = isset($ _FILES[‘files’]) ? $_FILES[‘files’] : array();

3. Обратите внимание: неопределенная переменная: value_insert в F:XAMPPhtdocsuptimeupme.php в строке 43

4. Дорогой, он просто загружает файл в папку, но не сохраняет путь в БД

5. $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА)» . $values_insert; изменить на $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА) (» . $values_insert . «)»;

Ответ №2:

вот демонстрационный код

 <?php
$IMG = isset($_FILES['files']) ? $_FILES['files'] : array();

if (!empty($IMG)) 
{
    $uploads_dir = 'images/';
    $i = 1;
    foreach ($IMG["error"] as $key => $error)
    {
        if ($error == UPLOAD_ERR_OK)
        {
          $tmp_name = $IMG["tmp_name"][$key];
          $name = $IMG["name"][$key];
          move_uploaded_file($tmp_name, "$uploads_dir/".$name);
          $name_array=mysql_real_escape_string($name);
          if ($i == 1) {
             $query = "INSERT INTO upload (FILE_NAME) VALUES" . $name_array;
             $result = mysql_query($query);
             if (!$result) {
                 die('Invalid query: ' . mysql_error());
             }
          }
          $i  ;
        }
    }         

 }else{
    echo 'empty array';
 }

?>
 

Комментарии:

1. он просто загружает файл в папку, но не сохраняет путь к базе данных

2. я просто меняю свой запрос $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА) (‘$name_array’);»;

3. он работает, но хранит только одну информацию о файле в bd, но я выбираю три файла.