0

私は、ajax呼び出しを行うことによってファイル名がすでにデータベースにあるかどうかをチェックするファイル検証プロセスを持っています。これは、existing-filenames.phpにエコーされるファイル名が1つしかない場合に機能しますが、戻りデータをループして、既存のfilenames.phpからのすべての結果に対して複数ファイル入力のすべてのファイル名をチェックする方法がわかりません。ループ。どんなアドバイスも大歓迎です。ありがとう

var file = $('#file')[0];
$.get('existing-filenames.php', function(data){

  for (var i=0; i<file.files.length; i++) {
       var fname = file.files[i].name;

        if(fname == data){ 
          alert("these files already exist:" + data); 
          return false;
        }
      }
  });

および'existing-filenames.php'

$allfiles = $db->query("SELECT filename FROM files WHERE email = '$_SESSION[email]'");

    while($result = $allfiles ->fetch_assoc()) {
    echo $result['filename'];
}
4

3 に答える 3

1

PHPファイルでは、スペースや改行なしですべてのファイルパスを印刷しているだけです。また、クエリにはプリペアドステートメントを使用する必要があります$_SESSION['email']。チェックなしでインクルードすることはまったく安全ではありません。

ちなみに、PHPファイルを次のように編集してみてください。

$allfiles = $db->query("SELECT filename FROM files WHERE email = '$_SESSION[email]'");

$fileList = array();
while($result = $allfiles ->fetch_assoc()) {
    $fileList[] = $result['filename'];
}

echo json_encode($fileList);

そしてあなたのJSコードはこのようになります:

$.get('existing-filenames.php', function(data){
      for (var i=0; i<file.files.length; i++) {
       var fname = file.files[i].name;

        if(data.indexOf(fname) >= 0){ 
          alert("these files already exist:" + data); 
          return false;
        }
      }
  }, 'json');

テストされていませんが、動作するはずです

于 2013-03-26T17:06:28.730 に答える
1

JSを次のように変更してみてください。

var file = $('#file')[0];
$.getJSON('existing-filenames.php', function(data){

  for (var i=0; i<file.files.length; i++) {
     var fname = file.files[i].name;

      if(~data.indexOf(fname)){ 
        alert("these files already exist:" + data); 
        return false;
      }
  }
});

そしてあなたのPHPファイルで:

$result = [];
while( $files = $allfiles ->fetch_assoc() ){
    $result[] = $files['filename'];
}
echo json_encode($result);

... おもう。PHPを書くことはほとんどありません。

于 2013-03-26T17:06:31.823 に答える
1
var fileNames = $('.file-name').text();

fileNames.forEach(function(fileName){
     $.get('url',{filename: fileName},function(data){
                  ....
       });
 });

私のアプローチは、ファイル名を配列に取得し、毎回異なるパラメーターを使用してgetリクエストを作成することです。

于 2013-03-26T17:07:22.143 に答える