数据库更新后重定向用户

3

这里又是一个初学者的问题 :/...

我有一个MySQL数据库和一个包含一些PHP文件的Web应用程序,比如说page1.php和page2.php。

当用户在page1.php页面时,当我的数据库得到特定的更新时,我需要自动将他重定向到page2.php。 让表 "foo" 为:

-------------------
| ID | NAME | AGE |
-------------------
| 1  | Bob  | 32  |
-------------------
| 2  | Ken  | 28  |
-------------------

如果数据库更新了,例如Ken的年龄变成30岁,我希望在page1.php页面上的用户被重定向到page2.php。我知道可以通过使用setInterval()方法不断调用一个php文件来实现这一点,但我无法找到任何处理重定向函数的东西。到目前为止,我发现的所有脚本都是更新HTML页面中的div容器的脚本。
<script>
setInterval(
(function () {
$("#somediv").load("file.php");
}), 10000);
</script>
<div id="somediv"></div>

显然,这并不能帮助我重定向用户。我已经花了几个小时在这上面了,相信我,我做了很多研究。那么编写一个脚本自动查找指定数据插入到MySQL数据库的最佳方法是什么,然后将用户从page1.php重定向到page2.php呢?

提前感谢 :)


不需要关注数据库更新。最好在第一个ajax调用成功后重定向,例如 $("#somediv").load("file.php",function(){ //do with redirection }) - prasanth
2个回答

2

您的想法是正确的,可以使用 AJAX 调用,但是不要使用 $.load(),而应该使用类似于 $.get() 的东西:

<script type="text/javascript">
    function check_db() {
        $.get( 'file.php', function( result ) {
            if ( result == 'changed' ) {
                location.href = 'page2.php';
            }

            setTimeout( 'check_db', 10000 );
        } );
    }

    check_db();
</script>

如果发生了你要查找的数据库更改,则让file.php输出“已更改”。

上述JavaScript将每隔10秒调用file.php,以检查数据库更改。如果发生了更改,则会输出“change”,并且location.href方法将使用JS将您重定向到page2.php

@vher2提出了一个很好的观点,即file.php可能需要太长时间才能返回。我修改了示例以考虑这一点。因此,调用将不是每隔10秒运行一次,而是在一次调用结束和下一次调用开始之间间隔10秒。


setInterval将每隔10秒运行一次。如果对file.php的调用时间超过了10秒,接下来的运行将再次调用file.php,这样就会出现两个调用,以此类推。您应该使用$.ajaxcomplete回调代替。 - vher2
这是一个很好的观点。我没有考虑到它可能需要一段时间才能运行。我不确定如何使用“complete”回调来处理这个问题,但我已经使用另一种方法实现了解决方案,并相应地更新了答案。 - Nick Coons
非常感谢,@Nick Coons。我会进一步研究这个问题,现在已经很晚了,明天再试试。但还是非常感谢,看起来基本符合我的需求 :) - DjShoucrout
我尝试点赞您的回答,但我仍然缺少可恶的 4 点声望哈哈。 - DjShoucrout
@DjShoucrout 不是了,我刚刚给你的问题点了个赞。 :-) - Nick Coons
非常感谢,它完美地运行了,@vher2也非常感谢你的帮助 :) - DjShoucrout

0

你可以简单地让你的SQL完成你的事情,检查SQL是否更新了表格,然后之后执行一个header location,像这样:

$query = $DB->query("UPDATE something SET age = '$30' WHERE member_id = '$member_id'");

if($query) {
 header('Location: page2.php');
}

这个用户并没有更新数据库,相反他一直在等待“page1.php”的响应,如果数据库被更新了,他会被重定向到“page2.php”。 - DjShoucrout
哦,那我误解了问题,抱歉。我建议采用Nick Coons的答案 :) - Emil Kidi
没问题,我应该在我的问题中更具体,谢谢你的帮助 :) - DjShoucrout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接