繁体   English   中英

如果 MySQL 获得新的最高 ID,如何触发 PHP?

[英]How can I trigger PHP if a MySQL gets a new highest ID?

我试图让我的网页在我的 SQL 表中的最高 ID (auto_increment) 增加的事件上执行操作(在这种情况下播放声音),这在注册新用户时发生。 例如:3 个用户注册,最高 ID = 3。当新用户注册时,最高 ID = 4。如果发生这种情况,网页会回声/播放声音。 Js和PHP分别是:

 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function() { setInterval(function () { $('#show').load('data.php') }, 3000); }); </script>
 <?php include ('../includes/dbh.inc.php'); if ($conn->connect_error) { die("Connection error: " . $conn->connect_error); } $result = $conn->query("SELECT * FROM signs WHERE id = (SELECT MAX(id) FROM signs)"); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo $row['firstName']; echo $row['lastName']; echo $row['inOrOut'] . '<br>'; $numId = $row['ID'] . '<br>'; echo $numId; } $value = 1; $value = $numId; if ($value < $numId) { //echo '<script type="text/javascript">play_sound();</script>'; echo "increased"; } else echo "nothing detected"; } } ?>

如您所知,我尝试通过比较最后一个和最新的 ID 值来做一些事情,但失败了。

我的尝试是为 oldID 存储一个初始值,然后在替换它之前将其与 newID 进行比较。

你不能只用 PHP 做到这一点。 但是你可以这样做:如果你有一个网站,你在 php.ini 的输出中设置当前的最高 ID。 您可以使用 javascript 每 5 分钟(或您认为有意义的任何其他时间跨度)调用另一个 php 脚本,以返回当前的最高数字。 如果 php 脚本中的数字高于 javascript 中的数字,则可以让 javascript 为您播放声音。

假设您的 php 脚本返回这样的 id:

{"id":4}

javascript调用的一个例子是:

<html>
<head></head>
<script>

let highestId = 2;

window.setInterval(async function(){
    const response = await fetch('http://localhost/jstest/index.php');
    const myJson = await response.json();
    console.log(console.log(myJson.id));
    if (highestId < myJson.id) {
        highestId = myJson.id
        // here you can play your sound
        $s = document.getElementById('myId');
        $s.innerHTML = highestId;
    }
}, 5000);

</script>
<body>
<span id="myId">0</span>
</body>
</html>

您可以使用 cookie 变量来执行此操作。 使用 php 设置 cookie 值并使用 php 文件调用发送 cookie 值。 通过这种方式,您可以识别新的最高 ID。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        setInterval(function () {
            var id = getCookie("highest_id");
            $('#show').load('data.php?id='+id)
        }, 3000);
    });
</script>

如果更改了值,请在代码中添加 set cookie。

<?php
include ('../includes/dbh.inc.php');
if ($conn->connect_error) {
    die("Connection error: " . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM signs WHERE id = (SELECT MAX(id) FROM signs)");
if ($result->num_rows > 0) {
    $numId = 0;
    if ($row = $result->fetch_assoc()) {
        $numId = $row['id'];
    }
    $value = $_GET['id'] ?? 0;
    if ($value < $numId) {
        //echo '<script type="text/javascript">play_sound();</script>';
        echo "increased";
        setcookie("highest_id", $numId, time() - 3600);
    } else {
        echo "nothing detected";
    }
}
?>

注意要点:

在 PHP 中: setcookie("highest_id", $numId, time() - 3600);

在脚本中: getCookie("highest_id");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM