Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当某个表获得新行(PHP)时,如何刷新页面?_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript 当某个表获得新行(PHP)时,如何刷新页面?

Javascript 当某个表获得新行(PHP)时,如何刷新页面?,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我一直在寻找一些脚本,它可以在我的页面注意到数据库特定表中的一个新条目后刷新我的页面。所以基本上。。。脚本将每隔五秒钟左右检查一次表,如果它注意到任何时间戳大于time()(加载页面的时间,显然不是当前时间)且id列值为例如14的内容,它将刷新页面 为了解决这个问题,我在网上查阅了很多资料,但似乎没有找到正确的答案。你看,问题是JavaScript和AJAX对我来说并不是那么熟悉 对不起,如果这看起来像个愚蠢的问题,那么它现在对我来说真的意味着整个世界。 其他答案也很受欢迎。。。比如,我如何使用

我一直在寻找一些脚本,它可以在我的页面注意到数据库特定表中的一个新条目后刷新我的页面。所以基本上。。。脚本将每隔五秒钟左右检查一次表,如果它注意到任何时间戳大于time()(加载页面的时间,显然不是当前时间)且id列值为例如14的内容,它将刷新页面

为了解决这个问题,我在网上查阅了很多资料,但似乎没有找到正确的答案。你看,问题是JavaScript和AJAX对我来说并不是那么熟悉

对不起,如果这看起来像个愚蠢的问题,那么它现在对我来说真的意味着整个世界。 其他答案也很受欢迎。。。比如,我如何使用Comet或长套接字来实现它? 因为我百分之百的无知

以下是我当前(减少的)该页面代码:

if (isset($_GET['view'])) {
$duel_id = mysqli_real_escape_string($query, $_GET['view']);
$result = mysqli_query($query, "SELECT * FROM duels WHERE `id` = '$duel_id' LIMIT 0, 1") or die(mysqli_error($query));
$row = mysqli_fetch_array($result);
if ($row['member_1'] !== $member_id && $row['member_2'] !== $member_id) {
    echo '<meta http-equiv="refresh" content="0; url=redirect.php" />';
    exit;
} else {
    //IRRELEVANT FUNCTIONS
    if ($my_turn == false && $row['winner'] == 0) {
        //IRRELEVANT FUNCTIONS
    } else {
        echo '<center><form action="spell.php" method="post"><table style="margin: 20px;">';
        //300 LINES OF DYNAMIC FORMS AND INPUTS             
        echo '</form></center>';
        }
    }
    echo '<center><table style="margin: 20px; margin-top: 40px;">';
    $result = mysqli_query($query, "SELECT * FROM duelling WHERE `duel_id` = '$duel_id' ORDER BY `timestamp` DESC") or die(mysqli_error($query));
    //THIS IS THE WHILE LOOP WHICH DISPLAYS ALL LOGS ON REFRESH
    while ($row = mysqli_fetch_array($result)) {
        //$spell, $name, $defence ARE DEFINED HERE, ANOTHER 20 LINES
        echo '<tr><td style="padding: 5px; color: #a20d0d; font-family: \'Courier New\', Courier, monospace; text-align: right;">' . date('d.m.y H:i', $row['timestamp']) . '</td><td style="padding: 5px;">' . $name . ' used ' . $spell . '. <span style="font-family: \'Courier New\', Courier, monospace; color: #a20d0d; font-size: 10px;">' . $defence . '</span></td></tr>';
    }
    echo '</table></center>';
}
if(isset($\u GET['view'])){
$duel\u id=mysqli\u real\u escape\u string($query,$\u GET['view']);
$result=mysqli_query($query,“从`id`='$duel_id'限制为0,1的决斗中选择*”)或die(mysqli_error($query));
$row=mysqli\u fetch\u数组($result);
if($row['member\u 1']!==$member\u id&&$row['member\u 2']!=$member\u id){
回声';
出口
}否则{
//无关函数
如果($my_turn==false&&$row['winner']==0){
//无关函数
}否则{
回声';
//300行动态表单和输入
回声';
}
}
回声';
$result=mysqli_query($query,“从决斗中选择*,其中`duel_id`='$duel_id'按`timestamp`DESC'排序”)或die(mysqli_error($query));
//这是WHILE循环,在刷新时显示所有日志
while($row=mysqli\u fetch\u数组($result)){
//$spell,$name,$defence在这里定义,另外20行
回显“”。日期('d.m.y H:i',$row['timestamp'])。$name。'used'.$SPALL.'.$defence'.';
}
回声';
}

使用
setInterval
和jQuery的
$。获取

setInterval(function(){
    $.get( "page.php", function( data ) {
            //Write data to div
            $( "#result" ).html( data );
    });
},5000);
当然,这将涉及到编辑当前脚本以允许
page.php
获取结果,以及向客户端显示的页面具有

您的
page.php
只需在表中显示数据(这是您的原始帖子建议的首选输出),而不需要其他任何内容,因为它将每隔
5000
毫秒调用一次;5秒

差点忘了。确保包含jQuery库

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

另外,还有一个提示:不要使用内联样式可能会对您很有用,因为如果样式不是全部在一个(或两个)css文件中,那么以后更新样式会对您造成麻烦。

使用
setInterval
和jQuery的
$。获取

setInterval(function(){
    $.get( "page.php", function( data ) {
            //Write data to div
            $( "#result" ).html( data );
    });
},5000);
当然,这将涉及到编辑当前脚本以允许
page.php
获取结果,以及向客户端显示的页面具有

您的
page.php
只需在表中显示数据(这是您的原始帖子建议的首选输出),而不需要其他任何内容,因为它将每隔
5000
毫秒调用一次;5秒

差点忘了。确保包含jQuery库

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

此外,还有一个提示:不要使用内联样式可能会对您很有用,因为如果样式不是全部包含在一个(或两个)css文件中,那么以后更新样式会让您感到麻烦。

所以您猜对了。如果您不介意每5秒一次请求造成的服务器负载,那么您需要ajax。 要实现这一点,您需要一些类似以下的js代码:

var startTime = Math.round(new Date().getTime() / 1000);
function checkTables(startTime)
{
    $.get( "checkdb.php?startTime=" + startTime, function(res) {
        if(res == "1")
        location.reload();
    });
}
setInterval("checkTables(" + startTime + ")",5000);
您可能会看到checkdb.php如下所示:

$startTime = $_GET['startTime']; //do appropriate sanitizing/escaping
$result = mysqli_query($query, "SELECT * FROM duelling WHERE `duel_id` = '$duel_id' AND `timestamp` > " . $startTime) or die(mysqli_error($query));
if(mysqli_num_rows($result) > 0)
echo "1";

所以你猜对了。如果您不介意每5秒一次请求造成的服务器负载,那么您需要ajax。 要实现这一点,您需要一些类似以下的js代码:

var startTime = Math.round(new Date().getTime() / 1000);
function checkTables(startTime)
{
    $.get( "checkdb.php?startTime=" + startTime, function(res) {
        if(res == "1")
        location.reload();
    });
}
setInterval("checkTables(" + startTime + ")",5000);
您可能会看到checkdb.php如下所示:

$startTime = $_GET['startTime']; //do appropriate sanitizing/escaping
$result = mysqli_query($query, "SELECT * FROM duelling WHERE `duel_id` = '$duel_id' AND `timestamp` > " . $startTime) or die(mysqli_error($query));
if(mysqli_num_rows($result) > 0)
echo "1";
  • 您可以编写一个ajax请求(使用设置的间隔或websockets)来检查页面内容是否已使用更改

    文件获取内容(“,false)

  • 您可以存储最后一项的索引,并检查是否有新的索引

  • 我还建议不要刷新整个页面,只需使用ajax和函数或纯JavaScript更改更新区域

  • 您可以编写一个ajax请求(使用设置的间隔或websockets)来检查页面内容是否已使用更改

    文件获取内容(“,false)

  • 您可以存储最后一项的索引,并检查是否有新的索引


  • 我还建议不要刷新整个页面,只需使用ajax和例如function或pure JavaScript更改更新区域

    你需要学习JavaScript和ajax。你需要学习JavaScript和ajax。我如何允许page.php获取结果,那么page.php实际上包含什么呢?基本上与上面的内容相同。连接到数据库,获取结果,在表中呈现结果。好的,我想我得到了这个。。。数据是否必须在返回函数中而不是在echo中?请使用
    echo
    ,因为您希望数据呈现时就像有人在浏览器上浏览一样。我已经更新了我的答案。我将如何允许page.php获取结果,以及page.php中实际包含哪些内容?基本上与上面的内容相同。连接到数据库,获取结果,在表中呈现结果。好的,我想我得到了这个。。。数据是否必须在返回函数中而不是在echo中?请使用
    echo
    ,因为您希望数据呈现时就像有人在浏览器上浏览一样。我已经更新了答案。我需要在checkdb.php中添加任何内容吗?这似乎是我正在寻找的代码,但我真的不知道如何使用checkdb.php…您需要在这里添加数据库连接参数。另外,我不知道查询中是否需要$duel\u id。只需更改查询以获得比页面加载更新的结果,我们将其作为$startTimecheckdb发送。php只需检查