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']は、1つのファイルではなく、配列内の複数のファイルを保持するようになりました。

各ファイルには、

$_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

$_FILES['file_name']['name'] は文字列ではなく配列のように見えるので、$_FILES['file_name']['name']['key'] を試してください

于 2012-07-10T19:26:30.310 に答える
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 に答える
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 に答える