PHP在更新SQL表之前检查文件是不是存在

Posted

技术标签:

【中文标题】PHP在更新SQL表之前检查文件是不是存在【英文标题】:PHP check if file exists before updating SQL tablePHP在更新SQL表之前检查文件是否存在 【发布时间】:2020-11-16 08:30:22 【问题描述】:

我目前正在进行员工工作监控,他们作为编码器的输出将通过记录他们开始和完成所需文件的时间来监控。

完成编码后,他们根据类别将最终数据保存在服务器中。所以数据不是只存储在一个文件夹中,而是有多个文件夹。

示例:数据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;


?>

【问题讨论】:

@HoldOffHunger 抱歉,但不确定您的意思? 【参考方案1】:

您的 checkData.php 脚本正在返回一个布尔值(truefalse),但它没有返回完整的 HTTP 响应。您的脚本应返回完整的 HTTP 响应,并将结果编码为 JSON format 之类的内容,如下所示:

$data = [ 'exists' =>
  (fopen($cat1,"r") || fopen($cat2,"r"))
];
header('Content-Type: application/json');
echo json_encode($data);

那么,你的 JS .done() 函数应该 parse the returned JSON response,检查服务器返回的值,并做出相应的响应,如下所示:

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

【讨论】:

您提供的 JSON 格式不起作用...您能提供如何根据我的代码返回完整的 HTTP 响应吗? 抱歉,我的 PHP 代码中有错字。 : 应该是 =&gt;。我已经更改了 PHP 示例。您可能还必须更改您的 $.ajax 调用以适应接收 JSON 数据。我在回答中提供的链接应该对此有所帮助。

以上是关于PHP在更新SQL表之前检查文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何在合并数据集之前检查行是不是存在(SQL Server)

如何在sql中检查表中是不是存在所有元素?

Liquibase:Migrate.sql 不检查前提条件

Sql Server 2008如何检查表中是不是存在列? [复制]

SQL 表变量 - 添加检查匹配行集是不是存在的约束

检查 SQL CASE 语句中是不是存在