我正在一个网站上工作,我的任务是从用户那里获取产品图片并将该图像存储在数据库中......我正在使用mysql数据库。 我的html表单代码如下: -
<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/*");
我收到的错误是:-error在上传/ * 我怎么能纠正它?
答案 0 :(得分:0)
在将$imgData
放入查询之前,您需要使用mysql_real_escape_string
转义{{1}}和 其他所有 。
答案 1 :(得分: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 (?,?,?,?,?,?,?)";
答案 2 :(得分: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>";
答案 3 :(得分: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注入!