我有一个文件验证过程,通过调用ajax来检查数据库中是否已经有文件名。如果existing-filenames.php中只有1个文件名得到响应,这就可以了,但我不知道如何循环返回数据,将多个文件输入中的每个文件名与existing-file names.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'];
}
在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');
未经测试,但应能在上运行
var fileNames = $('.file-name').text();
fileNames.forEach(function(fileName){
$.get('url',{filename: fileName},function(data){
....
});
});
我的方法是将文件名放入一个数组中,并在每次
时使用不同的参数发出get请求尝试将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。