PHP MySQL文件上传仅偶尔工作

时间:2012-10-11 18:00:19

标签: php mysql

基本上我编写了一个脚本,允许后端用户上传图库的图片。该脚本应该将文件上传到服务器,然后将文件名和信息发布到数据库中。

它总是将文件上传到服务器,但是由于某种原因它只是偶尔将它发布到数据库。有时它工作正常,但是10次上传文件就是8次,就是这样,脚本如下。

<?php  

 //This is the directory where images will be saved  
 $target = "images/";  
 $target = $target . basename( $_FILES['photo']['name']);  

 //This gets all the other information from the form  
 $name=$_POST['name'];  
 $caption=$_POST['caption'];  
 $pic=($_FILES['photo']['name']);  
 $live=$_POST['live']; 

 //Connecting to the database 
 require_once('../Connections/tim.php');  


 //Writes the information to the database  
 mysql_query("INSERT INTO `gallery` VALUES ('$name', '$caption', '$pic', '$live')") ;  

 //Writes the photo to the server  
 if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))  
 {  

 //Tells you if its all ok  
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded successfully, press back to upload more";  
 }  
 else {  

 //Gives and error if its not  
 echo "Sorry, there was a problem uploading your file.";  
 }  
 ?>  

2 个答案:

答案 0 :(得分:2)

这可能是因为你有sql注入漏洞:如果标题(或任何其他发布的字段)包含例如',它将破坏你的查询。

您应该转储mysql_*函数并切换到使用PDO或mysqli的预准备语句。并始终添加错误处理。

答案 1 :(得分:1)

你真的应该阅读SQL Injection上的内容,应该使用PDO或mysqli (如jeroen)建议。

但是你可以通过以下方式进行调试:

mysql_query("INSERT INTO `gallery` VALUES ('$name', '$caption', '$pic', '$live')") ;  
if( mysql_errno() != 0){
     // mysql error
     // note: message like this should never appear to user, should be only stored in log
     echo "Mysql error: " . htmlspecialchars( mysql_error());
     die();
}

您必须至少按mysql_real_escape_string()转义数据库输入。