1

我卡在一个问题上,

我创建了一个多重上传器,它工作正常,直到我希望我上传的文件在数据库中注册名称,我得到的错误消息是

警告:mysql_real_escape_string() 期望参数 1 是字符串,数组在第 16 行的 C:\wamp\www\bookstyled\profile.php 中给出

我的第 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]}");
}
}

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

谢谢

4

4 回答 4

3

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

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

现在 $_FILES['file_name']['name'] 不保存一个文件,而是一个数组中的多个文件。

每个文件都通过单独访问

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

由于您正在使用

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

函数 mysql_real_escape_string 没有被赋予一个字符串作为参数,而是一个完整的数组,其中包含上传到“file_name”的每个文件。

解决方法很简单,你需要使用

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

$key 因为我看到您已经在 move_upload_file 函数中使用它

于 2012-07-10T19:40:21.960 回答
1

如果你改变这个

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

对此

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

当您[$key]在这句话中使用它时,move_uploaded_file($tmp_name, "core/files/{$_FILES['file_name']['name'][$key]}");我认为您也应该在第 16 行使用。

于 2012-07-10T19:24:29.150 回答
1

看起来 $_FILES['file_name']['name'] 是一个数组而不是字符串,所以试试 $_FILES['file_name']['name']['key']

于 2012-07-10T19:26:30.310 回答
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']}");
    }
}
于 2012-07-10T19:24:59.497 回答