2016-03-21 3 views
1

ここから継続的な質問How can we show recent notifications in jQuery/php/mySQL?最近の通知をjQuery/php/mySQLでどのように表示できますか?更新

以下の回答に記載されています。私はDBと見なされた新しい列を追加しました。デフォルト値は0です。私が正しく理解していれば、通知が表示されるとすぐにseen = 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"); 
     } 

私の2つの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)); 
?> 

updateResults.php:

<?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(); 
?> 

EDIT 私は通知を一度しか表示できませんでした。私の質問は今オーディオと一般的に私が書いたコードは "大丈夫"または何かを変更する必要がありますが付属しています。 音声:通知が来るたびに音を鳴らしたいですが、最初は1回だけ再生し続けます。ループカウンターを追加して、オブジェクトが空であるかどうかをチェックしましたが、機能しません。どのようにオーディオを処理するためのアドバイスや良い練習?

コード:

$.ajaxSetup ({ 
     cache: false 
    }); 
    var loopLimit = 1; 
    var loopCounter = 0; 
    setInterval(function(){ 
     $.getJSON('fetchResults.php', function(data) { 
      $("#loadingDiv").show(); 
      $('#noti-box').empty(); 
      $("#notificationTitle").empty(); 

      if(jQuery.isEmptyObject(data)){ 
       console.log("there is no data"); 
      }else{ 
       console.log(data); 
       if (loopCounter < loopLimit){ 
        var sound = $("#notification")[0]; 
        sound.currentTime = 0; 
        sound.load(); 
        sound.play(); 
        loopCounter++; 
       } 
       $.each(data.vormid, function(i, vormid) { 
        $("#noti-box").append('<div class="alert alert-info"><button id='+data.vormid[i].ravim_id+' data-dismiss="alert" class="close close-sm" type="button"><i class="fa fa-times"></i></button>New form filled out by Dr. <b>'+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+' </b> at '+data.vormid[i].date_created+'</div>'); 
        var id= $(".alert.alert-info").val(); 
        $("#notificationTitle").append('<li style="font-size: 14px; padding: 0; margin: 0 0 10px 10px; color: #666666;" >New form filled out by Dr. '+data.vormid[i].arsti_eesnimi+' '+data.vormid[i].arsti_perekonnanimi+'</li>'); 
        $(".close").on('click', function() { 
         var ravim_id = $(this).attr('id'); 
         $.ajax({ 
          type: "POST", 
          url:'updateResults.php', 
          data:"ravim_id=" + ravim_id, 
          success:function(data){ 
           console.log("success"); 
          },error: function(data){ 
           console.log("not saved"); 
          } 
         }); 
        }); 
       }); 
      } 
      $("#loadingDiv").fadeOut("slow"); 
     }); 
    }, 5000); 

答えて

2

問題が何であるか、必ずしも明らかではないが、ここでは、あなたのコード内のエラーを持っている:

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

あなたがバインドされたパラメータを使用しているが、あなたはありませんそれを束縛する。​​メソッドに配列を追加するか、または別のステートメントで手動でバインドすることで解決できます。あなたは、おそらく1があるときになるように、あなたに通知を受けることを行う必要がありますので、それは問題に実行したときにもセットアップPDOが例外をスローすることができます

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

注:最初のオプションを使用して

+0

私の質問は、成功通知から見た値を1に更新して、同じ通知をもう一度表示しないようにする方法です。 – raqulka

+0

あなたがそれを手伝ってくれたらとてもうれしいです – raqulka

+0

@raqulkaあなたは更新機能を呼び出すjavascriptを追加する必要があります。いつ、どのようにしてそれをしたいのかを見ることは不可能ですが、関数自体は結果を取得するために使用した関数に似ています。 – jeroen

関連する問題