Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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 如何在jQuery/php/mySQL中显示最近的通知?_Javascript_Php_Jquery_Pdo - Fatal编程技术网

Javascript 如何在jQuery/php/mySQL中显示最近的通知?

Javascript 如何在jQuery/php/mySQL中显示最近的通知?,javascript,php,jquery,pdo,Javascript,Php,Jquery,Pdo,假设有一个新行插入到数据库中。如何在div中显示一次通知,但在关闭它之后,它不会再次显示?我知道我不能使用setInterval,因为它会在一个时间间隔(比如说10秒)后不断弹出。我的想法是,它每10秒检查一次更新,如果有新行,它将显示通知,但在我按下“x”后,它将关闭。10秒后,它将再次检查,现在它将检查行的id是否与以前相同。如果没有,则显示新的祝酒词 因此,我使用了setTimeout函数并再次触发它 (function poll(){ setTimeout(fun

假设有一个新行插入到数据库中。如何在div中显示一次通知,但在关闭它之后,它不会再次显示?我知道我不能使用
setInterval
,因为它会在一个时间间隔(比如说10秒)后不断弹出。我的想法是,它每10秒检查一次更新,如果有新行,它将显示通知,但在我按下“x”后,它将关闭。10秒后,它将再次检查,现在它将检查行的id是否与以前相同。如果没有,则显示新的祝酒词

因此,我使用了
setTimeout
函数并再次触发它

    (function poll(){
        setTimeout(function(){
            $.ajax({ url: "ravimDataCount.php", success: function(data){
                //check if the id is the same or not here

                $("#noti-box").append('<div class="alert alert-info "><button data-dismiss="alert" class="close close-sm" type="button"><i class="fa fa-times"></i></button>New form filled out by Dr.</div>');

                poll();
            }, dataType: "json"});
        }, 5000);
    })();
(函数轮询(){
setTimeout(函数(){
$.ajax({url:“ravimDataCount.php”),成功:函数(数据){
//检查此处的id是否相同
$(“#noti box”).append('博士填写的新表格');
poll();
},数据类型:“json”});
}, 5000);
})();
我已经和它斗争了很长时间了。谢谢你的帮助

编辑 如以下答案所述。我在DB中添加了一个名为seen的neew列。默认值为0。如果我理解正确,那么我需要在通知显示后立即将SEED=0更改为1,这样它就不会再循环,并向我显示无限数量的相同通知

这就是我目前的情况:

        function fetch_notification(){
            setInterval(function(){ 
                //GET ALL DATA WHERE SEEN=0
                $.ajax({ 
                    url: "fetchResults.php", 
                    success: function(data){ 
                        $.each(data.vormid, function(i, vormid) {
                            $("#noti-box").append('<div class="alert alert-info "><button data-dismiss="alert" class="close close-sm" type="button"><i class="fa fa-times"></i></button>New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'</div>'); 
                        });
                        update_notification();

                    }, dataType: "json"}); 
            }, 5000);
        } 
        fetch_notification();   

        //UPDATE SEEN=0 to 1
        function update_notification(){
            console.log("updating");
        }  
函数获取通知(){
setInterval(函数(){
//获取看到的所有数据=0
$.ajax({
url:“fetchResults.php”,
成功:函数(数据){
$.each(data.vormid,function(i,vormid){
$(“#noti box”).append('Dr.+data.vormid[i].arsti#u eesnimi+''+data.vormid[i].arsti#u perekonnanimi+''填写的新表格);
});
更新通知();
},数据类型:“json”});
}, 5000);
} 
获取通知();
//更新SEEN=0到1
函数更新通知(){
控制台日志(“更新”);
}  
我的两个PHP文件是fetchResults.PHP和updateResults.PHP

fetchResults.php:

<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';



$stmt4 = $DB_con->prepare("SELECT * FROM ravim WHERE seen =0 ORDER BY date_created DESC");
$stmt4->execute();
$vormid = $stmt4->fetchAll(PDO::FETCH_ASSOC);

echo json_encode(array("vormid" => $vormid));
?>
<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';

$ravim_id = $_POST['ravim_id'] ;

$stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id");
$stmt4->execute();
?>

updateResults.php:

<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';



$stmt4 = $DB_con->prepare("SELECT * FROM ravim WHERE seen =0 ORDER BY date_created DESC");
$stmt4->execute();
$vormid = $stmt4->fetchAll(PDO::FETCH_ASSOC);

echo json_encode(array("vormid" => $vormid));
?>
<?php
header('Content-Type: application/json');
include_once '../dbconfig.php';

$ravim_id = $_POST['ravim_id'] ;

$stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id");
$stmt4->execute();
?>


我想不出来。我知道我必须将通知的正确行ID传递给updateResults.php。

创建一个全局变量,在其中保留最后一个ID:

var lastID;
然后在函数内部,在注释下,假设数据包含新行的id,只需选中:

if (lastID != data)
    showNotification();

// update lastID
lastID = data;

创建保留最后一个id的全局变量:

var lastID;
然后在函数内部,在注释下,假设数据包含新行的id,只需选中:

if (lastID != data)
    showNotification();

// update lastID
lastID = data;
我所知道的实现方法是

  • 根据需要添加一个名为
    seen
    的列(INT)或您喜欢的内容

  • seen
    设置为默认值0

  • 显示所有不可见行的通知,即
    seen=0的值

  • 显示通知后,对于所有具有
    seen=0
    的行,将列
    seen
    更新为1

  • 就这些


  • jQuery部分是

  • 首先创建一个函数,比如说
    fetch\u notification()
    ,包括ajax,用于选择
    seen=0
  • 然后创建另一个函数,比如说
    update\u notification()
    ,将具有
    seen=0
    的每一行更新为
    seen=1
  • 然后在间隔调用
    fetch\u notification()之后
  • 更新

    另一个想法是
    创建一个表,将新通知添加到表中,并在用户显示或关闭通知时删除每一行

    假设您想发出关于新用户的管理员通知

  • 将每个新用户id添加到新表中
  • 当管理员在每个通知中单击“关闭”时,逐个删除相应的行

  • jQuery部分

  • 使用ajax检查表(新通知表)的行号是否大于1, 如果大于1,则向管理员显示所有用户id作为通知
  • 如果管理员单击关闭以获得通知,请使用另一个ajax删除该行
  • 因此,您需要创建一个函数来频繁检查行数是否大于1
  • 还有一个使用ajax删除行的函数,它只需要在管理员单击x(关闭)时才能工作
  • 这个想法更好,因为它不会给服务器端带来太多负载(实际上是说没有负载)。

    数据库的主要功能是插入、删除和检查行号

    我所知道的实现方法是

  • 根据需要添加一个名为
    seen
    的列(INT)或您喜欢的内容

  • seen
    设置为默认值0

  • 显示所有不可见行的通知,即
    seen=0的值

  • 显示通知后,对于所有具有
    seen=0
    的行,将列
    seen
    更新为1

  • 就这些


  • jQuery部分是

  • 首先创建一个函数,比如说
    fetch\u notification()
    ,包括ajax,用于选择
    seen=0
  • 然后创建另一个函数,比如说
    update\u notification()
    ,将具有
    seen=0
    的每一行更新为
    seen=1
  • 然后在间隔调用
    fetch\u notification()之后
  • 更新

    另一个想法是
    创建一个表并将新通知添加到表a中