2013-03-26 96 views
0

我有一个文件验证过程,通过进行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; 
     } 
     } 
    }); 

和现有的-filenames.php'

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

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

回答

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'); 

没有测试,但它应该工作

+0

感谢,工程巨大。你碰巧知道如何制作它,以便它只列出已被选择的文件。现在如果警报被触发,它将列出所有的文件。 – user2014429 2013-03-26 17:24:24

+0

如何选择文件?你能发布你的代码吗? – Uby 2013-03-26 17:29:13

+0

文件输入是这样的: user2014429 2013-03-26 17:33:07

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。

+0

'fname == data [i]'只会检查'data'列表中的1个元素 – Uby 2013-03-26 17:28:01

+0

啊,对。固定。谢谢。 – 2013-03-26 17:32:34

+0

谢谢,伙计。测试和运行良好。 +1 – user2014429 2013-03-26 17:42:32

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

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

我的做法会得到文件名到一个数组,每一次拍使用不同的参数GET请求