0

我有一个文件验证过程,它通过进行 ajax 调用来检查文件名是否已经在数据库中。如果在 existing-filenames.php 中仅回显 1 个文件名,则此方法有效,但我不知道如何循环返回数据以检查多个文件输入中的每个文件名与现有文件名的每个结果。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;
        }
      }
  });

并在“现有文件名.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 回答