2014-09-11 2 views
1

Я пытаюсь вставить изображение .jpg в таблицу mysql, но он не работает.Как загрузить изображение в таблицу mysql

Он выводит следующее сообщение об ошибке:

Предупреждение: file_get_contents(): Имя файла не может быть пустым

Как это исправить?

Это мой код:

<form action="image.php" method="POST" enctype="multipart/form-data"> 
    <label>File: </label><input type="file" name="image" /> 
    <input type="submit" /> 
</form> 


<?php 
$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
$image_name = addslashes($_FILES['image']['name']); 
$sql = "INSERT INTO `images` (image,image_name) VALUES ('$image', '$image_name')"; 
if (!mysql_query($sql)) { // Error handling 
    echo "Something went wrong! :("; 
} 

?> 
+0

Это предупреждение потому, что при каждой загрузке страницы он пытается вставить запись в базу данных, даже если ничего не опубликовано. Оберните свой PHP-код в 'if (! Empty ($ _ FILE ['image'])) {...}' check. – Tom

ответ

1

Во-первых, вы должны проверить, если ваш столбец изображения типа BLOB!

Я ничего не знаю о вашей таблице SQL, но если я попытаюсь сделать свой собственный пример.

Мы получили поля id (int), изображение (blob) и image_name (varchar (64)).

Так что код должен выглядеть следующим образом (предположим, ID всегда «1», и мы будем использовать этот mysql_query):

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence! 
$image_name = addslashes($_FILES['image']['name']); 
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')"; 
if (!mysql_query($sql)) { // Error handling 
    echo "Something went wrong! :("; 
} 

Вы делаете это неправильно во многих отношениях. Не используйте функции mysql - они устарели! Используйте PDO или MySQLi. Вы также должны подумать о сохранении местоположений файлов на диске. Использование MySQL для хранения изображений считается Bad Idea ™. Обработка таблицы SQL с большими данными, например изображениями, может быть проблематичным.

Также ваша форма HTML не соответствует стандартам. Он должен выглядеть следующим образом: метод

<form action="insert_product.php" method="POST" enctype="multipart/form-data"> 
    <label>File: </label><input type="file" name="image" /> 
    <input type="submit" /> 
</form> 
1

file_get_contents не используется, чтобы сохранить JPG изображения, он используется для чтения содержимого файла в виде строки. Потому что он будет использовать методы сопоставления памяти, если это поддерживается сервером, для повышения производительности. Итак, сначала создайте папку в корневой папке или в любом месте внутри корневой папки, где хотите, а затем установите путь для сохранения jpg-изображения.

    <?php 
    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_FILES["image"]["name"]); 
    $extension = end($temp); 

    if ((($_FILES["image"]["type"] == "image/gif") 
    || ($_FILES["image"]["type"] == "image/jpeg") 
    || ($_FILES["image"]["type"] == "image/jpg") 
    || ($_FILES["image"]["type"] == "image/pjpeg") 
    || ($_FILES["image"]["type"] == "image/x-png") 
    || ($_FILES["image"]["type"] == "image/png")) 
    && ($_FILES["image"]["size"] < 20000) 
    && in_array($extension, $allowedExts)) { 
     if ($_FILES["image"]["error"] > 0) { 
     echo "Return Code: " . $_FILES["image"]["error"] . "<br>"; 
     } else { 
     echo "Upload: " . $_FILES["image"]["name"] . "<br>"; 
     echo "Type: " . $_FILES["image"]["type"] . "<br>"; 
     echo "Size: " . ($_FILES["image"]["size"]/1024) . " kB<br>"; 
     echo "Temp file: " . $_FILES["image"]["tmp_name"] . "<br>"; 
     if (file_exists("upload/" . $_FILES["image"]["name"])) { 
      echo $_FILES["image"]["name"] . " already exists. "; 
     } else { 
      $file_name = $_FILES["image"]["name"]; 
      move_uploaded_file($_FILES["image"]["tmp_name"], 
      "upload/" . $file_name); 
      echo "Stored in: " . "upload/" . $file_name; 
      $sql = "INSERT INTO images (image,image_name) VALUES ('$image', '$file_name')"; 
      if (!mysql_query($sql)) { // Error handling 
       echo "Something went wrong! :("; 
      } 
     } 
     } 
    } else { 
     echo "Invalid file"; 
    } 
    ?> 
+0

Я пытаюсь вставить jpg изображение. но отображается Неверный файл – Tje

+0

Используя мой код? – WordpressCoder

+0

Пожалуйста, замените $ _FILES ["file"] на $ _FILES ["image"], потому что ваше имя поля - это изображение. Поэтому используйте print_r ($ _ FILES), и здесь вы можете найти все свои данные и использовать их. – WordpressCoder

0

Проверить код ниже:

--- HTML ---

<form enctype="multipart/form-data" action="add.php" method="POST"> 
Image: <input type="file" name="photo"> 
<br> 
<input type="submit" value="Add"> 
</form> 

- PHP -

//This is the directory where images will be saved 
$target = "images/"; 
$target = $target . basename($_FILES['image']['name']); 
//This gets all the other information from the form 
$image_name=mysql_real_escape_string(addslashes($_FILES['image']['name'])); 
$image = mysql_real_escape_string(addslashes(file_get_contents($_FILES['image']['tmp_name']))); 
// Connects to your Database 
mysql_connect("YOUR_HOST", "USERNAME", "PSSWORD") or die(mysql_error()) ; 
mysql_select_db("YOUR_DATABASE") or die(mysql_error()) ; 
//Writes the information to the database 
mysql_query("INSERT INTO `product_images` VALUES ('', '$image', '$image_name')") ; 
//Writes the photo to the server 
if(move_uploaded_file($_FILES['image']['tmp_name'], $target)) { 
//Tells you if its all ok 
echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
} else { 
//Gives and error if its not 
echo "Sorry, there was a problem uploading your file."; } 
?> 
+0

Это предупреждение Предупреждение: move_uploaded_file (images/1.jpg): не удалось открыть поток: нет такого файла или каталога в C: \ wamp \ www \ test \ image.php в строке 12 – Tje

+0

Убедитесь, что вы создали изображения в папке /! –

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