javascript - PHP在更新SQL表之前检查文件是否存在
问题描述
我目前正在从事员工工作监控,他们作为编码器的输出将通过记录他们开始和完成所需文件的时间来监控。
在他们完成编码后,他们根据类别将最终数据保存在服务器中。所以数据不仅仅存储在一个文件夹中,它有多个文件夹。
示例:数据1:
server/category1/000000-1/000000-1-final data.pdf
server/category2/000000-2/000000-2-final data.pdf
正如您在此示例图像中看到的,在工作人员完成一个输出之前,他们必须先单击一个按钮。如果存在,此按钮将检查或搜索服务器中的数据(文件名与工作代码相同)。这样做的原因是确保它们正确编码数据的标准文件名。如果文件名不正确/不存在,他们将无法完成一个输出。
我怎样才能实现这种逻辑?它必须在哪里搜索不同的文件夹来检查数据。
如果存在,则通过时间戳更新 SQL 表作为完成列的值。
这是我尝试过的按钮功能:
var id = $(this).attr('id').split('-')[1]
var work_code = document.getElementById('work_code-'+id).value;
$.ajax({ /// CHECK PHP SCRIPT IF TRUE
type:'post',
url: 'checkData.php',
data:{
work_code: work_code
},
success: function() { /// if file found
$("#CheckButton").css("display","none"); // hides the button when click
$('#Finished-'+id).html(CurrentTimestamp) // make column value to timestamp
var value = (CurrentTimestamp);
var column = $("#Finished-"+id).attr('id').split('-')[0]
$.ajax({ /// if file found then update value of sql
type:'post',
url: 'editable.php',
data:{
value: value,
id: id,
column: column
}
}).done(function(data){
GrowlNotification.notify({
title: 'DATA FOUND!',
description: 'Plan Successfully Finished',
showProgress: false,
image: {
visible: true,
customImage: 'Images/success.png'
},
type: 'success',
position: 'top-right',
closeTimeout: 2000
});
setTimeout(function(){
sessionStorage.reloadAfterPageLoad = true;
window.location.reload(); // then reload the page.(3)
}, 2500);
})
},
error: function() { // if file not found
swal("DATA NOT FOUND!", "Please double check data's filename.", {
icon: 'error',
button: false,
timer: 1900,
});
}
});
})
这是脚本checkData.php
:(这部分是我不知道该放什么来检查服务器中的数据。)
<?php
$server = 'http://10.000.00.00:0000/';
$cat1 = $server.'/category1'.$_REQUEST["work_code"].'/'.$_REQUEST["work_code"].'-final data.pdf';
$cat2 = $server.'/category2'.$_REQUEST["work_code"].'/'.$_REQUEST["work_code"].'-final data.pdf';
// condition to check if file exist
if (fopen($cat1,"r") || fopen($cat2,"r")) {
return true;
}else{
return false;
}
?>
解决方案
您的checkData.php
脚本返回一个布尔值(true
或false
),但它没有返回完整的 HTTP 响应。您的脚本应返回完整的 HTTP 响应,并将结果编码为JSON 格式,如下所示:
$data = [ 'exists' =>
(fopen($cat1,"r") || fopen($cat2,"r"))
];
header('Content-Type: application/json');
echo json_encode($data);
然后,您的 JS.done()
函数应该解析返回的 JSON 响应,检查服务器返回的值,并做出相应的响应,如下所示:
done(function(data){
if (data.exists) { // 'exists' is the key returned by PHP
console.log('The file exists!');
} else {
console.log('The file does NOT exist!');
}
}
推荐阅读
- python - 将由 ',' 分隔的数字对组成的字符串转换为 int 类型的元组
- php - Facebood SDK 在标头中返回 HTTP/2
- r - R警告:需要缺失值
- laravel - laravel 的令牌无效问题
- highcharts - 如何从已经聚合的数据中制作直方图?
- mysql - 数据库连接错误(2):无法连接MySQL。数据库连接错误(2):无法连接MySQL
- analytics - 堆叠面积图可视化画面
- java - 当所有节点日志条目都已提交时,如何安全地删除 raft 中的历史日志
- javascript - 通过 JavaScript 更改主要音频设备
- android - 带有回收器视图的 Android 可扩展列表视图作为子视图