我遇到了一个问题,
我已经创建了一个multiply uploader,它运行良好,直到我希望上传的文件在数据库中注册名称,我收到的错误信息是
警告:mysql_real_eescape_string()要求参数1为字符串,第16行C:''wamp''www''bookstyled''profile.php中给出的数组
我的第16行是变量file_name
$file_name = mysql_real_escape_string($_FILES['file_name']['name']);
如果我删除mysql_real_eescape_string,它实际上会保存到数据库中,但不是作为文件名,而是写着"Array"
这是的一些代码
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]}");
}
}
如果我没提正在上载文件。
感谢
您已经启用了多次上传。所以我猜字段的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_realescape_string没有被赋予一个字符串作为参数,而是一个完整的数组,其中包含上传到filename的每个文件。
解决方案很简单,您需要使用
file_name = mysql_real_escape_string($_FILES['file_name']['name'][$key])
$key,因为我看到您已经在move_upload_file函数中使用了它
如果您更改此
$file_name = mysql_real_escape_string($_FILES['file_name']['name']);
到这个
$file_name = mysql_real_escape_string($_FILES['file_name']['name'][$key]);
当你在句子move_uploaded_file($tmp_name, "core/files/{$_FILES['file_name']['name'][$key]}");
中使用这个[$key]
时,我认为你也应该在第16行使用。
看起来$_FILES['file_name']['name']是一个数组,而不是字符串,所以请尝试$_FILES['filename']['name]['key']
未测试,但可以工作。
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']}");
}
}