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

如何在jQuery/php/mySQL中显示最近的通知?更新,php,jquery,pdo,Php,Jquery,Pdo,继续提问 如以下答案所述。我在DB中添加了一个名为seen的neew列。默认值为0。如果我理解正确,那么我需要在通知显示后立即将SEED=0更改为1,这样它就不会再循环,并向我显示无限数量的相同通知 这就是我目前的情况: function fetch_notification(){ setInterval(function(){ //GET ALL DATA WHERE SEEN=0 $.a

继续提问

如以下答案所述。我在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();
?>

编辑 所以我只显示了一次通知。现在,我的问题来自音频,一般来说,我写的代码是“好的”,还是应该更改一些内容。 音频:我想在每次收到通知时播放一个声音,但一开始它会一直播放一次。我尝试添加一个loopcounter,并检查对象是否为空,但它不起作用。如何处理音频有什么建议或良好的实践吗

代码:

$.ajaxSetup({
缓存:false
});  
var loopLimit=1;
var-loopCounter=0;
setInterval(函数(){
$.getJSON('fetchResults.php',函数(数据){
$(“#加载div”).show();
$(“#noti box”).empty();
$(“#notificationTitle”).empty();
if(jQuery.isEmptyObject(数据)){
console.log(“没有数据”);
}否则{
控制台日志(数据);
if(loopCounter由Dr.+data.vormid[i]填写的新表格;
$(“.close”)。在('click',函数(){
var ravim_id=$(this.attr('id');
$.ajax({
类型:“POST”,
url:'updateResults.php',
数据:“ravim_id=“+ravim_id,
成功:功能(数据){
控制台日志(“成功”);
},错误:函数(数据){
console.log(“未保存”);
} 
});
});
});
}
$(“#加载div”).fadeOut(“慢”);
});
}, 5000);

问题所在并不完全清楚,但您的代码中有一个错误:

$stmt4 = $DB_con->prepare("UPDATE ravim SET seen=1 WHERE ravim_id=:ravim_id");
$stmt4->execute();
您正在使用绑定参数,但未绑定它。您可以通过向
execute()
方法添加一个数组或在单独的语句中手动绑定来解决这个问题

使用第一个选项:

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

请注意,您还可以设置PDO,以便在遇到问题时抛出异常,因此您可能应该这样做,以便在出现异常时得到通知。

我的问题是,如何将成功调用中的SEED值更新为1,使其不会再次显示相同的通知。如果您能帮助我解决此问题,我将非常高兴it@raqulka您需要从添加调用更新函数的javascript开始。我们不可能看到您希望何时以及如何执行此操作,但函数本身与用于获取结果的函数类似。好的。如果我是正确的,那么我需要将通知的ID传递给更新函数,对吗?这就是我被卡住的地方。@raqulka您只需向ajax调用添加一个
data
键,该键的值是一个对象,其中包含要发送到php脚本的键值对。这里有很多这样的例子。