表单不会使用 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 表的主要内容,如果未能解决你的问题,请参考以下文章

PHP 表单元素未显示。

PHP表单文件上传到Mysql和服务器

从表单输入上传照片和文本并使用 php 发送到电报机器人

图片上传太慢php

带有文件上传附件的 PHP 联系表

如何使用 JQuery 和 formData 正确获取表单数据