首页 > 解决方案 > 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;
}

?>

标签: javascriptphpfile-exists

解决方案


您的checkData.php脚本返回一个布尔值(truefalse),但它没有返回完整的 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!');
  }
}

推荐阅读