Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL文件上传只是偶尔工作_Php_Mysql - Fatal编程技术网

PHP MySQL文件上传只是偶尔工作

PHP MySQL文件上传只是偶尔工作,php,mysql,Php,Mysql,基本上,我已经编写了一个脚本,允许后端的用户为画廊上传图片。脚本应该将文件上传到服务器,然后将文件名和信息发布到数据库中 它总是将文件上传到服务器,但由于某些原因,它只是偶尔将其发布到数据库。有时它工作得很好,但是10次中有8次它上载文件,就是这样,脚本如下 <?php //This is the directory where images will be saved $target = "images/"; $target = $target . basename(

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

它总是将文件上传到服务器,但由于某些原因,它只是偶尔将其发布到数据库。有时它工作得很好,但是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.";  
 }  
 ?>  

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


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

您真的应该在上面阅读一些内容,您应该按照建议使用PDO或mysqli

但在您的情况下,可以通过以下方式进行调试:

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();
}

而且,您必须至少通过以下方式逃避数据库输入。

几乎完全没有错误处理:您假定上载成功,您假定DB查询成功;你很容易受到SQL注入攻击,你不过滤上传的文件,所以任何人都可以上传他们想要的任何东西并在你的服务器上执行,等等。。。简言之,这段代码是一个安全灾难至少使用
mysql\u real\u escape\u string
在将整个应用程序(一些大型门户、企业应用程序、在过时系统上运行的应用程序)转换为现代应用程序时,会出现一些情况(我并不是说它们在“真实世界”中是好的或需要的,但它们只是发生了),新的和安全的方式不是一个选项:(。我觉得值得一提的是“坏的,不推荐的解决方案”仅仅是为了这些。但是你是对的,这不是它应该的方式+1@Vyktor没错,我可能只是厌倦了这里所有的
mysql.*
问题。不过我还是不推荐:-)非常感谢您的帮助,我是PHP和MySQL新手,非常感谢您在这方面的帮助。我已经在中添加了代码,现在当我按upload时,它会显示“Mysql错误:列计数与第1行的值计数不匹配”不太确定这意味着什么?谢谢again@JamesLeist这意味着表
gallery
有3,5,6,。。。只有4列。