【发布时间】:2014-11-27 15:53:36
【问题描述】:
此代码将文件传输到指定的文件夹和 db 表,但是当我在浏览器上启动/打开/运行页面时,它会自动向 db 表发送一些内容,并且文件名字段为空。我什至没有点击/上传了任何东西。我不知道我是否解释得当。问题是当我打开页面时,我检查了 db 表行并创建了一个空行。顺便说一句,id 递增,文件名字段为空。(尚未上传任何内容.) 代码有什么问题?
<?php
if(isset($_FILES['filename'])){
$errors= array();
$file_name = $_FILES['filename']['name'];
$file_size =$_FILES['filename']['size'];
$file_tmp =$_FILES['filename']['tmp_name'];
$file_type=$_FILES['filename']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['filename']['name'])));
$expensions= array("jpeg","jpg","png");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"uploads/".$file_name);
echo "Success";
}else{
print_r($errors);
}
}
?>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "admin";
$filename = false;
if(isset($_FILES['filename'])){
$filename = $_FILES['filename']['name'];
}
// Create connection
mysql_connect($servername, $username, $password) or die ('MySQL Not found // Could Not Connect.');
mysql_select_db("admin") or die(mysql_error()) ;
mysql_query("INSERT INTO upload_test (fileName)
VALUES ('$filename')") ;
?>
我的表格:
<form name="form" method="POST" enctype="multipart/form-data" >
<input name="filename" type="file" id="filename" />
<input name="submit" type="submit" id="submit"/>
</form>
【问题讨论】:
-
是的,您的查询将始终运行,无论是否有上传。 1) 你为什么不把它放在第一个
if块 2) 你 主要 容易受到 SQL 注入,修复它 3) 不要将mysql_函数用于新代码,它们'被弃用 -
警告:这非常不安全,因为这些参数不是properly escaped。您应该绝不将
$_POST数据直接放入查询中:它会创建一个巨大的SQL injection bug。mysql_query是一个过时的接口,不应使用,它已从 PHP 中删除。像PDO is not hard to learn 这样的现代替代品。像 PHP The Right Way 这样的指南解释了最佳实践。 -
感谢您的建议。我会试试那些。不过还是个菜鸟。
标签: mysql file-upload filenames filefield