2012-05-31 3 views
1

Я работаю над веб-сайтом, и моя задача - взять изображение продукта у пользователя и сохранить это изображение в базе данных. Я использую базу данных mysql. Мой код HTML формы как: -Ошибка mysql при вставке изображения в базу данных mysql

 <FORM action="testimage1.php" ENCTYPE="multipart/form-data" method="post"> 
       <div style="font:bold 10px arial,serif;" >Product Name*</div> 
       <input type="text" name="myuserName" maxlength="50" /><br /> 
      <div style="font:bold 10px arial,serif;" >Upload a photo</div> 
       <input name="uploadimage" type="file" /></br> 
       <div style="font:bold 10px arial,serif;">Product Description:</div> 
       <input type="text" name="product" value=""></br> 
       <input id="submit" type="submit" value="submit" /><br /> 
    </FORM> 

Мой код testimage1.php как: -

  require_once("dbconnect.inc.php");      
    $db_name="thinstrokes";          //for localhost databasename 
    $tbl_name="product"; 
    $db_selected=mysql_select_db("$db_name")or die("cannot select DB"); 

    $myusername=$_POST['myusername']; 
    $mypassword=$_POST['product']; 
    $filename=$_FILES['uploadimage']['tmp_name']; 
    $imgData = file_get_contents($filename); 
    $size = getimagesize($filename); 
    $sql = "INSERT INTO product 
    (productname, image_id , image_type ,image, image_size, image_name, productdesc)VALUES 
    ('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}', 
    '{$_FILES['userfile']['name']}','$productdesc')"; 
    $result=mysql_query($sql) or die("error in uploading/*"); 

и я получаю сообщение об ошибке, как: -ошибка в загрузке/* как могу я исправить?

+0

изменить это, чтобы увидеть, что такое реальная ошибка: $ result = mysql_query ($ sql) или die (mysql_error()); – bumperbox

+0

Попробуйте добавить 'mysql_error()' в 'или die()'. На самом деле вы не должны использовать 'или die()', поскольку это плохая практика. Он убивает сценарий. Используйте правильную обработку ошибок. – Tikkes

+0

печатает ошибку как: - сервер MySQL ушел – Neeraj

ответ

0

попробовать изменить это:

$sql = "INSERT INTO product 
(productname, image_id , image_type ,image, image_size, image_name, productdesc)VALUES 
('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}', 
'{$_FILES['userfile']['name']}','$productdesc')"; 

с этим :

$size_mime = mysql_real_escape_string($size['mime']); 
$size3 = mysql_real_escape_string($size[3]); 
$filename = mysql_real_escape_string($_FILES['userfile']['name']); 
$sql = "INSERT INTO product 
(productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES 
('{$myusername}','11', '{$size_mime}', '{$imgData}', '{$size3}', 
'{$filename}','$productdesc')"; 

и редактировать это:

$myusername=$_POST['myusername']; 
$mypassword=$_POST['product']; 
$filename=$_FILES['uploadimage']['tmp_name']; 

с этим:

$myusername = mysql_real_escape_string($_POST['myusername']); 
$mypassword = mysql_real_escape_string($_POST['product']); 
$filedata = mysql_real_escape_string($_FILES['uploadimage']['tmp_name']); 

вы должны абсолютно избежать SQL-инъекции!

+0

все еще печатает ошибку как: -MySQL-сервер ушел – Neeraj

+0

Я не понимаю, что ошибка ...? – Neeraj

+0

и в коде я печатаю свою ошибку sql..это все еще дает .... Сервер MySQL ушел – Neeraj

0

Вам нужно бежать $imgData и все остальное с mysql_real_escape_string, прежде чем положить его в запрос.

+0

Я получаю сообщение об ошибке: -MySQL-сервер ушел – Neeraj

+0

Гош, интересно, куда он пошел. Насколько большой этот образ вы пытаетесь вставить в него? – Okonomiyaki3000

0

Необходимо использовать переменные bound. Сначала вы широко открыты к атакам SQL injection.

Пусть кто-то обработал имя файла \';DROP product; и загрузил его ...

Это, как говорится, встраивание двоичные данные в запрос просто не будет работать 99% времени.

Для связанных параметров ваш запрос становится примерно таким, и вы вызываете bind_parm для привязки данных к каждому.

$sql = "INSERT INTO product (productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES (?,?,?,?,?,?,?)"; 
+0

Я получаю сообщение об ошибке вроде ...Сервер MySQL ушел – Neeraj

+0

Попробуйте открыть изображение в текстовом редакторе. Это то, что вы здесь делаете. Это просто не сработает. Используйте связанные переменные, или если вы должны сделать это таким образом, используйте bin2hex() -> http://php.net/manual/en/function.bin2hex.php для данных изображения перед их вложением. –

0

Сначала я думаю, что вы не должны загружать изображения непосредственно в Mysql. Вместо этого используйте каталог и поместите все там. Так что с тем, что попробовать что-то вроде этого:

//target to the path of my files 
$target_path = "uploads/product_images/"; 
if(!is_dir($target_path)) mkdir($target_path); 
$uploadfile = $target_path . basename($_FILES['userfile']['name']); 

//Move the uploaded file to $taget_path 
(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)); 

Тогда вы можете получить на загруженный файл, используя следующие:

echo "<a href=" . $target_path . basename($row['userfile']) . "> 
    {$row['userfile']}</a>"; 
+0

Если вы храните на диске, вам необходимо убедиться, что имена файлов уникальны или загрузка одного пользователя может сбивать другую. Я бы предложил создать имя файла для дискового хранилища и использовать таблицу для хранения поиска из имени файла пользователя в имя файла диска. Если у вас будет много изображений, создание подкаталогов также является хорошей идеей или вы можете запустить из inode каталога. –

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