插入查询后,表单中的数据在数据库中显示为乱码

时间:2016-05-06 00:51:57

标签: php mysql sql sql-server database

我有一个简单的表单,允许用户上传图像并为图像添加标签,我将用它来搜索特定的图像。

运行我的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>&nbsp</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)
 )

2 个答案:

答案 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。

我认为这就是你的意思?