我有一个简单的表单,允许用户上传图像并为图像添加标签,我将用它来搜索特定的图像。
运行我的SQL查询时出现问题:所有内容都成功上传到数据库但是当我检查数据库时 - 图像表我名为tags
的列显示为乱码,我似乎无法弄清楚为什么
我在PHP代码中回显了变量中的值,我可以看到它们没问题。我也尝试更改字符集,但仍然没有运气。
我是PHP的初学者。其中大部分都是我自己学到的,但我对它很不利。
在高级
中为您提供帮助和考虑这是我的表单
<html>
<title>Upload Image </title>
<body>
<form enctype="multipart/form-data" action="storeImage.php" method="POST">
<table border=0 align=center bgcolor=black width=100%>
<tr><td colspan=2><h2> </h2></td></tr>
</table>
<table border=0 align=center bgcolor=blue>
<tr><td colspan=2><h2>Upload Image</h2></td></tr>
<tr>
<td>Image Name</td><td><input type=text name="name"></td>
</tr>
<tr>
<td>Image Tags</td><td><input type=text name="tags"></td>
</tr>
<tr>
<td>Image</td><td><input type=file name="images"></td>
</tr>
<tr>
<td></td><td><input type=submit name="submit" value="Store Image"></td>
</tr>
</table>
</form>
</body>
</html>
这是我用来存储图片的代码
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$conn = mysql_connect ("localhost","root","vertrigo");
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("site_upload",$conn);
if(!$db)
{
echo mysql_error();
}
$name = $_POST['name'];
$tags = $_POST['tags'];
$images = addslashes (file_get_contents($_FILES['images']['tmp_name']));
$imagechk = getimagesize($_FILES['images']['tmp_name']);//to know about image type etc
$image_type = $imagechk['mime'];
$q ="INSERT INTO images VALUES('','$name','$tags','$images','$image_type')";
$s =mysql_query($q,$conn);
if($s)
{
echo "Image stored successfully";
echo"$tags";
}
else
{
echo mysql_error();
}
?>
和我的数据库结构
CREATE SCHEMA IF NOT EXISTS site_upload DEFAULT CHARACTER SET utf8 ;
USE site_upload ;
-- -----------------------------------------------------
-- Table site_upload.images
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS site_upload.images (
image_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
images LONGBLOB NOT NULL,
tags LONGTEXT NOT NULL,
image_type VARCHAR(45) NOT NULL,
PRIMARY KEY (image_id)
)
答案 0 :(得分:1)
这是因为您将图像插入标记字段,反之亦然。您声明您的表格为&#34; image_id,name,images,tag,...&#34;但是当你插入时你去了image_id,name,tag,images,..&#34;一个好的标准是始终在insert语句中包含列名,以避免出现这种情况。
话虽如此,Technidev也是正确的:其他问题。
答案 1 :(得分:0)
除了您的脚本容易受到SQL注入,没有错误处理,没有<form>
开放标记并使用过时的PHP库这一事实之外,它发生的原因是您将原始图像存储在数据库中
如果要输出图像,则必须使用正确的标题输出图像的内容,在您的情况下可能是image / jpeg或image / png。
我认为这就是你的意思?