根据多个文件输入检查现有文件名

时间:2013-03-26 16:59:17

标签: php javascript jquery ajax

我有一个文件验证过程,通过进行ajax调用来检查数据库中是否已存在文件名。如果在existing-filenames.php中只回显了1个文件名,那么这是有效的,但是我无法弄清楚如何循环返回数据以检查多文件输入中的每个文件名,而不是来自existing-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'];
}

3 个答案:

答案 0 :(得分: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');

未经测试,但应该可以使用

答案 1 :(得分: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。

答案 2 :(得分:1)

var fileNames = $('.file-name').text();

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

我的方法是将文件名转换为数组并每次使用不同的参数发出get请求