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