2014-12-21 4 views
1

Я планирую иметь веб-галерею. Тем не менее, мне трудно использовать PHP для вставки DB. Следующий код:Загрузите несколько изображений в базу данных MYSQLI

HTML - Я хочу создать форму, которая имеет категорию и несколько изображений, которые могут быть вставлены в БД одновременно.

<form action="upload" method="POST" enctype="multipart/form-data"> 
    <p> Upload : <input type="file" id="file" name="images" /> </p> 
    <p> Category : <input type="text" name="imageCategory"> </p> 
    <p> <input type="submit" name="submit" value="Upload!" /> </p> 
</form> 

DATABASE

I am using imageName as VARCHAR not BLOB TYPE.

PHP

<?php 
include ("dbConnect.php"); 

    if(isset($_POST["submit"])) { 

     $image = $_POST['images']['tmp_name']; 
     $imageName = $_POST['images']['name']; 
     $imageSize = $_POST['images']['size']; 
     $imageType = $_POST['images']['type']; 
     $imageCategory = $_POST['imageCategory']; 

     $result = $mysqli->query("INSERT INTO imageTable (imageName, imageCategory, imageSize, imageType) 
            VALUES ('$imageName', '$imageCategory', '$imageSize' , '$imageType');") 

        or die(mysqli_error($mysqli)); 

    } else { 

     echo "<p> It is not working </p>"; 

    } 

    header("location: index"); 

    $mysqli->close(); 
?> 

Проблема заключается в том, категория является только один успешно вставлен в базу данных. Но не с imageName, imageType и imageSize. А также я хочу, чтобы изображение было сохранено в базе данных, чтобы я мог получить изображение из БД на другой веб-странице. Есть идеи?

ответ

2

Вы можете использовать «несколько» свойство в «ввода» тега, как это:

<form action="file-upload.php" method="post" enctype="multipart/form-data"> 
    Send these files:<br /> 
    <p> <input name="userfile[]" type="file" multiple='multiple' /> </p> 
    <p> Category : <input type="text" name="imageCategory"> </p> 
    <input type="submit" value="Send files" /> 
</form> 

Пользователь может выбрать несколько файлы и загрузить их. А на сервере вы будете делать это:

if (isset($_FILES["userfile"]) && !empty($_FILES["userfile"])) { 
     $image = $_FILES['userfile']['tmp_name']; 
     $imageName = $_FILES['userfile']['name']; 
     $imageSize = $_FILES['userfile']['size']; 
     $imageType = $_FILES['userfile']['type']; 
     $imageCategory = $_POST['imageCategory']; 
     $len = count($image); 
     $path = "images/"; 
     for ($i = 0; $i < $len; $i++) { 
      if (isset($imageName[$i]) && $imageName[$i] !== NULL) { 
       if(move_uploaded_file($image[$i], $path.$imageName[$i])) { 
        $result = $mysqli->query("INSERT INTO imageTable (imageName, imageCategory, imageSize, imageType) VALUES ('$imageName[$i]', '$imageCategory', '$imageSize[$i]' , '$imageType[$i]')"); 
       } 
      } 
     } 
} 
$mysqli->close(); 
header("location: index"); 
+0

Ничего себе, это действительно здорово! Он работает очень хорошо. В любом случае, вы знаете, что я использую varchar. Но есть ли у вас идея вернуть изображения назад? А также путь к каталогу для изображения? – Anthosiast

+0

Я не понимаю ваш вопрос! Что значит «вернуть изображения назад»? –

+0

Хорошо, я хотел бы получить изображение из базы данных. Я пытался использовать 'SELECT', и он не работает. Есть идеи? – Anthosiast

0

Во-первых информации файла не будет в глобальной переменной $ _POST будет находиться в $ _FILES

От http://php.net/manual/en/features.file-upload.multiple.php (модифицированный):

Форма

<form action="file-upload.php" method="post" enctype="multipart/form-data"> 
    Send these files:<br /> 
    <p> <input name="userfile[]" type="file" /> </p> 
    <p> <input name="userfile[]" type="file" /> </p> 
    <p> Category : <input type="text" name="imageCategory"> </p> 
    <input type="submit" value="Send files" /> 
</form> 

Разбираем глобальную файловую переменную в массив (мы предположим, что это вспомогательная функция, называемая parseFiles.php):

<?php 

function reArrayFiles(&$file_post) { 

    $file_ary = array(); 
    $file_count = count($file_post['name']); 
    $file_keys = array_keys($file_post); 

    for ($i=0; $i<$file_count; $i++) { 
     foreach ($file_keys as $key) { 
      $file_ary[$i][$key] = $file_post[$key][$i]; 
     } 
    } 

    return $file_ary; 
} 

Переместить файлы и вставить информацию о файле в базу данных:

<?php 

include ("dbConnect.php"); 
include ("parseFiles.php"); 

if ($_FILES['upload']) { 
    $file_ary = reArrayFiles($_FILES['userfile']); 

    foreach ($file_ary as $file) { 

     $image = $file['tmp_name']; 
     $imageName = $file['name']; 
     $imageSize = $file['size']; 
     $imageType = $file['type']; 
     $imageCategory = $_POST['imageCategory']; 

     $result = $mysqli->query("INSERT INTO imageTable (imageName, imageCategory, imageSize, imageType) 
            VALUES ('$imageName', '$imageCategory', '$imageSize' , '$imageType');") 

        or die(mysqli_error($mysqli)); 
    } 

} else { 

    echo "<p> It is not working </p>"; 

} 

header("location: index"); 

$mysqli->close(); 

Хотелось бы надеяться, что должен делать эту работу. Я не проверял это я просто слепой закодировал так что могут быть некоторые ошибки

+0

Эмм, я думаю, что я понимаю ваш ответ, но я постараюсь его. В любом случае, вы можете сделать все это? Просто хочу сделать пользователей дружелюбными. – Anthosiast

+0

Я пробовал, и он работает не очень хорошо. Вы можете это заметить? – Anthosiast

Смежные вопросы