【问题标题】:Alert if echo'd SQL table has been modified如果回显的 SQL 表已被修改,则发出警报
【发布时间】:2016-04-26 03:24:14
【问题描述】:

我有一个 HTML 表,它正在从我的 SQL 数据库中回显数据。 我需要的是,每当表中的某个字段从其他地方在数据库中更新时,就会在 HTML 页面上弹出警报。

在我的表格所在的主页上,它显示了我的 getTable.php 文件中的表格。

我想要更新的特定列是一个注释列,它会定期收到工厂操作员的输入。

我不确定什么代码有助于理解这种情况,但我正在寻找关于非 JavaScript 函数的任何建议,这些函数可以简单地保持一个标签是否正在编辑 SQL 表。

这是向我表明存在注释的单元格的代码:

$conN = mysqli_connect(DB_HOST, DB_USER);
        if (!$conN) {die('Could not connect: ' . mysqli_error($conN));} // Check Connection
        mysqli_select_db($conN,"jms");

        $jid = $row['jobID'];
        $opn = $row['operation'];
        $highlight = mysqli_query($conN,"SELECT notes FROM operations WHERE jobID=$jid AND operation=$opn");
        while ($data = mysqli_fetch_array($highlight))
            if (isset($data['notes']) && $data['notes'] != "") {
            echo "<td id='notes' style='background-color:red;width:1%;' onChange='alert(\"New note on Job No " .$jid. "\")'><input id='target' type='text' value='" .$data["notes"]. "' >" . "</td>";
            } else {
            echo "<td style='background-color:palegreen;width:1%;'>" . "</td>";
            }
        echo "</tr>"; // End the row
        $index++;

【问题讨论】:

  • 我创建了一个单元格来呼应笔记的值,并将其作为输入,以便我可以手动更改它。当我更改其中的文本时,它会弹出一个警报,但是当它从 PHP 查询本身发生更改时,它不会给我通知。

标签: php html mysqli html-table


【解决方案1】:

这可能比您预期的要复杂。

有几个选项可以实现这一点,它们取决于您对更大系统的控制权。最终,使用 PHP,您可能需要使用轮询方法。

举一个简单的例子,您可以使用 JavaScript 来访问 AJAX PHP 脚本,并将当前数据数组 POST 给它。然后,PHP 可以检查当前数据,并比较两个数组。这可能不是很有效,但它可以让您知道字段何时发生变化。

为了使这更加优化,您可以在每一行上存储一个修改时间。然后你只需要发送最后的最高修改时间,并使用索引来检查更新的记录。 AJAX PHP 脚本只有在更新时才会发回数据。您可能仍然需要一个数组来判断哪个特定字段发生了变化,但这可以在客户端完成。

另一种选择是使用触发器(如果您的数据库引擎支持它们),它可以使用更改信息更新单独的表。然后您可以使用光标通过 AJAX 轮询发送此信息。

继续往下走,您可以将 AJAX 替换为 websocket。如果您需要尽可能实时的信息,这可能会更有效。不过,它最终连接的代码仍然需要轮询(除非它是一个长期存在的应用程序,更新也会通过......不过,如果你使用的是 PHP,这不太可能。)

无论如何,你需要的成分是:

  1. JavaScript 每隔 X 时间或通过长期存在的 websocket 请求服务器进行更改。
  2. 一种识别数据何时不同的方法(如修改时间、结果集、TRIGGER 更改日志表等)
  3. 服务器上有东西可以检查并报告信息。
  4. JavaScript 在发生更改时向用户显示更改。

【讨论】:

  • 你说得对,这绝对比我想象的要复杂。我只是各种脚本的初学者。这大约是我在某处作为机械工程师工作时使用 html、php 和 js 的第二个月。
  • 如果你真的想避免 JavaScript,你可以将数据存储在 $_SESSION 中,然后每隔 X 时间刷新一次页面(使用en.wikipedia.org/wiki/Meta_refresh),然后使用 PHP 输出警报.甚至,如果您可以在没有警报的情况下生活,元刷新将使其自动更新,或多或少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多