2012-07-10 58 views
1

林停留在一个问题,多个上传PHP

我已经创建了一个乘载,它工作得很好,直到我想我上传到注册数据库中的文件名的文件, 该错误消息我得到的是

警告:mysql_real_escape_string()预计参数1是字符串,在C中给出 阵列:\瓦帕\ WWW \ bookstyled \上线profile.php 16

我的线16是可变FILE_NAME

$file_name = mysql_real_escape_string($_FILES['file_name']['name']); 

如果我删除了mysql_real_escape_string,它实际上保存到数据库中,但不作为文件名,但其表示,“阵列”

这是一些代码

if(isset($_FILES['file_name'])) { 
    foreach ($_FILES['file_name'] ['tmp_name'] as $key => $tmp_name){ 

$file_name = mysql_real_escape_string($_FILES['file_name']['name']); 


$dt1=date('y-m-d H:m:s'); 
$ip=$_SERVER['REMOTE_ADDR']; 

    mysql_query("INSERT INTO `files` (`file_name`, `user_name`,`file_time`,`file_ip`) VALUES ('$file_name', '{$_SESSION['username']}','$dt1','$ip')") ; 
move_uploaded_file($tmp_name, "core/files/{$_FILES['file_name']['name'][$key]}"); 
} 
} 

而且如果我没有提到它 正在上传文件。

感谢

回答

3

您已启用多个上传。所以我猜你的html名称的字段是数组。例如:

<input type="file" name="file_name[]" multiple="multiple"> 

现在$ _FILES [ 'FILE_NAME'] [ '名']不成立一个文件,但多个文件在数组中。

由于您使用

$file_name = mysql_real_escape_string($_FILES['file_name']['name']) 

每个文件都是单独通过

$_FILES['file_name']['name'][$i] //where $i is a 0,1,2..... 

访问的功能mysql_real_escape_string没有被赋予一个字符串作为参数,但完整的阵列持有的每文件上传到'file_name'。

的解决方案很简单,您需要使用

file_name = mysql_real_escape_string($_FILES['file_name']['name'][$key]) 

$关键,因为我看到你已经在使用,在move_upload_file功能

+0

谢谢!它一直在唠叨我洞天:) 谢谢 – Dymond 2012-07-10 19:53:41

+0

同样的答案比我的,但更多的解释。 +1 – DontVoteMeDown 2012-07-10 19:57:28

1

如果当你在这个句子中move_uploaded_file($tmp_name, "core/files/{$_FILES['file_name']['name'][$key]}");使用[$key]改变这种

$file_name = mysql_real_escape_string($_FILES['file_name']['name']); 

这个

$file_name = mysql_real_escape_string($_FILES['file_name']['name'][$key]); 

我认为你应该上线16使用太多。

0

未经测试,但可以工作。

if(isset($_FILES['file_name'])) { 
    foreach ($_FILES['file_name'] as $file){ 

     $file_name = mysql_real_escape_string($file['tmp_name']); 


     $dt1=date('y-m-d H:m:s'); 
     $ip=$_SERVER['REMOTE_ADDR']; 

     mysql_query("INSERT INTO `files` (`file_name`, `user_name`,`file_time`,`file_ip`) VALUES ('$file_name', '{$_SESSION['username']}','$dt1','$ip')") ; 
     move_uploaded_file($tmp_name, "core/files/{$file['name']}"); 
    } 
} 
1

看起来像$ _FILES [ 'FILE_NAME'] [ '名']是不是字符串,所以尽量$阵列_FILES [ 'FILE_NAME'] [ '名称'] [ '钥匙']