表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表
Posted
技术标签:
【中文标题】表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表【英文标题】:Form won't post text input with file upload to SQL table with PHP 【发布时间】:2012-03-29 20:52:55 【问题描述】:我想让这个图片上传脚本正确,但出于某种原因它不喜欢描述输入。在我添加描述输入之前它工作得很好,我想不出可能有什么问题,因为它看起来很好。 我的代码不喜欢表单中的描述输入,有什么问题?感谢您的帮助!
html 表单
<h1>Image Gallery</h1>
<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
Description: <textarea maxlength="255" name="description" id="description"></textarea><br />
<input type="submit" value="Upload" />
</form>
PHP代码(前面有代码但没关系)
$userid = mysql_real_escape_string($_SESSION['UserID']);
$imageid = mysql_real_escape_string($i);
$image = mysql_real_escape_string($rename);
$description = mysql_real_escape_string($_POST['description']);
$registerquery = mysql_query("INSERT INTO imageupload (UserID, ImageID, Image, Description) VALUES('".$userid."', '".$imageid."', '".$image."', '".$description."')");
if($registerquery)
header( 'Location: manage.php' ) ;
else
echo "<h1>Error</h1>";
echo "<p>Sorry, an error occured. Please go back and try again.</p>";
【问题讨论】:
你在哪里处理图片??? 在我输入 PHP 代码之前,但一切正常。是描述输入有问题。 【参考方案1】:描述栏是什么数据类型?
将您当前的查询替换为:
$description = mysql_real_escape_string(strip_tags(stripslashes($_POST['description'])));
$register = "INSERT INTO imageupload (UserID, ImageID, Image, Description) VALUES('$userid', '$imageid', '$image', '$description')";
$registerquery = mysql_query($register) or die (mysql_error());
if($registerquery)
header( 'Location: manage.php' ) ;
else
echo "<h1>Error</h1>";
echo "<p>Sorry, an error occured. Please go back and try again.</p>";
【讨论】:
嗯,错误告诉我我的问题是什么,我修复了它。显然我不小心使用了错误的值作为表上的唯一键,所以它不会发布......呃......好吧,谢谢你的帮助!【参考方案2】:也许您插入的描述包含 db 的奇怪字符,例如 ";'等等……?
如果使用数据库 php 库转义功能转义从帖子中获得的描述...这也是避免 sql 注入的好习惯
如果你使用mysql:http://www.php.net/manual/en/function.mysql-real-escape-string.php
【讨论】:
【参考方案3】:尝试替换
$description = $_POST['description'];
与
$description = mysql_real_escape_string($_POST['description']);
【讨论】:
我之前尝试过认为这是问题所在,但添加它并没有使它起作用。不过我会再次添加它。 啊。在这种情况下,我建议遵循@AviateX14 给出的指示,如果仍然无法正常工作,请告诉我们错误状态。我还可能建议您对正在使用的表执行 DESCRIBE TABLE 查询,以找出描述字段期望的数据类型。【参考方案4】:打印出查询并尝试在mysql命令行界面上运行,会报错吗?
你没有清理描述字符串,所以也可以在那里注入。
【讨论】:
以上是关于表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章