【问题标题】:Redirect an user on database update在数据库更新时重定向用户
【发布时间】:2017-08-17 06:04:25
【问题描述】:

这里还有一个初学者问题:/...

我有一个 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 上被重定向。

我知道这可以通过一些 AJAX 来实现,方法是使用 setInterval() 方法不断调用 php 文件,但我找不到任何东西来处理重定向函数。到目前为止,我发现的只是可以更新 HTML 页面中的 div 容器的脚本,例如:

<script>
setInterval(
(function () {
$("#somediv").load("file.php");
}), 10000);
</script>
<div id="somediv"></div>

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

提前致谢:)

【问题讨论】:

  • 无需关注数据库更新。最好通过重定向第一个ajax调用成功。like $("#somediv").load("file.php",function(){ //do with redirection })

标签: php jquery mysql ajax


【解决方案1】:

您对 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 现在有两个调用,依此类推。您应该改用$.ajax、complete 回调。
  • 这很好。我没有考虑到它可能需要一段时间才能运行。我不确定如何使用complete 回调来处理这个问题,但我已经使用另一种方法实现了一个解决方案并相应地更新了答案。
  • 非常感谢@Nick Coons,我会进一步研究,这里已经很晚了,我明天试试,但再次感谢它看起来正是我所需要的 :)
  • 我试图支持你的答案,但我仍然错过了一个该死的 4 声誉哈哈
  • @DjShoucrout 不再,我只是赞成你的问题。 :-)
【解决方案2】:

你可以简单地让你的 SQL 做你的事,检查 sql 是否更新了表,然后做一个标题位置,像这样:

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

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

【讨论】:

  • “这个”用户没有更新数据库,而是在“page1.php”上等待,如果数据库以某种方式更新,他将被重定向到“page2.php”。
  • 哦,那我误解了这个问题,对不起。我建议尼克库恩斯回答:)
  • 没问题,我的问题应该更具体,谢谢您的帮助 :)
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
相关资源
最近更新 更多