【问题标题】:Form won't post text input with file upload to SQL table with PHP表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表
【发布时间】: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 代码之前,但一切正常。是描述输入有问题。

标签: php sql forms post input


【解决方案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命令行界面上运行,会报错吗?

    你没有清理描述字符串,所以也可以在那里注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 2011-08-12
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多