2012-12-19 6 views
5

私は作成している小さなブログを持っています。データベースから情報を取得します。ログインしたユーザーに、他の誰かが新しいコメントを入力したことを示すようにしたいと思います。私はold_count、new_count、postsという3つのページを作成しました。私はnew_countとold_countの両方のセッションを作成して、それらを投稿で引くつもりでした。結果はdivにユーザーに表示されます。 old_countとnew_countの両方が同じ情報を持っているので、このアイデアは廃止されました。投稿の結果は常に0になります。私が探しているのはTwitterのようなものです。新しいエントリがあれば、 1新しい投稿 - 。私はこれを行う方法を探しています。誰かが私を助けてくれますか? (注:完全に与えられたスクリプトを説明してください....ありがとうございました!!!!)新しいコメントが入力されたことをユーザーに示す方法

+3

AJAXポーリングやWebSocketをまたはロングポーリングを次のように、このページのコードです。それは良い飛び降りのポイントになるはずです。 –

答えて

0

コンテンツを最後に確認した時のタイムスタンプを設定します。

そして、JavaScriptを使用して、結果> 0後、表示回数場合created_timestamp> {$のlast_checked_timestamp}

投稿SELECT * FROM(サーバーをポーリング。

更新のタイムスタンプ。

+0

これの小さなサンプルを私に提供してもらえますか?私が最後にチェックしたときにタイムスタンプを設定すると、jqueryまたはajaxでページをリフレッシュするたびにタイムスタンプがリフレッシュされます。私は信じている!!!わからない!!!サンプルをお願いします! – Bryan

+0

ページの更新時にタイムスタンプの更新が正しく行われました。しかし、これは正常な動作でなければなりません。ページを更新すると、新しいタイムスタンプをNOWに設定し、最新のすべての投稿を表示する必要があります。この質問に回答する:私はあなたのサイトにアクセスします、2分ごとに私の画面を新しい投稿で更新しますか?または、前回訪問して以来、サイトにアクセスしていくつの新しい投稿を表示してもらいたいですか? –

+0

私はあなたがページを読んでコメントを読むことができるようにしたいと思います。これはあなたの時間の読みを取っている間に新しいコメントが入力された場合、私は小さなdivを表示したいのです。これをクリックすると、新しい投稿が表示され、全体の手順が再び開始されます。私はコンテンツを使ってdivを更新する方法を知っています。それは私が得ることのできない新しい投稿メッセージを表示することです。 – Bryan

0

質問です:コメントはいつ新しいコメントになるのですか?最新のクリックと現在のクリックの間に作成された場合、またはユーザーがまだそれを見ていない場合は

"既知の"コメントを保存するのが最も簡単な方法です(例えば、ID)セッションと現在利用可能なコメントと照合します。

+0

セッションにIDの束を格納し、それらのIDを別のセットと照合すると、コメントカウントが重要な数値であれば、非常に効率が悪くなります。 – Samsquanch

+0

@ BurninlEOあなたはこのサンプルを私に提供してもらえますか? – Bryan

+0

- あなたはそれを表示するためにコメントを検索しなければなりません。その間、IDを配列に書き込むことができます。また、この配列をarray_diff()で格納された別の配列と簡単に比較できます。セッションに配列を格納するには、単純に '' $ SESSION ['comments'] = $ comments; ''を実行します。整数IDのコメント数が100未満の場合、オーバーヘッドはユーザーあたり1KB未満です。利点は、彼/彼女に新しいコメントを各ユーザーに表示できることです。ただし、クリック間の変更のみを表示したい場合は、タイムスタンプで十分で効率的です。 – BurninLeo

0

ログインタイムスタンプユーザーを保存する必要があります。おそらくDBまたはセッションで。コメントのタイムスタンプと照合してください。 あなたは以下の条件

  1. Comment_Timestamp < User_Login_Timestamp

    にデータベースに挿入されているすべてのコメントの通知を表示し、固執する必要があります。
  2. (CURRENT_TIMESTAMP - Comment_Timestamp)< = REFRESH_INTERVAL

PHP:デビッドにより投稿された提案で

<?php 

/* 
    DB CONNECT AND SQL TO SELECT COMMENTS FROM THE TABLE. YOU CAN OPTIMIZE QUERY TO REDUCE THE NUMBER OF 
    TUPLES 
*/ 

$current_ts = strtotime(date('m/d/Y h:i:s a'); 
$notified = array(); 

foreach($all_comments as $comment) { 
    if(strtotime($comment['ts']) < strtotime($_SESSION['user_login_ts'])) { 
     if(($current_ts - strtotime($comment['ts']) <= REFRESH_INTERVAL) { 
      $notified[] = $comment;  
     } 
    } 
} 

echo json_encode($notified); 

?> 

JS AJAX

setInterval(function(){ 
    $.ajax({ 
     url: "server", 
     success: function(data) { 
      /* Data is the JSON Object for new comments for that user */ 
     }, 
     dataType: "json" 
    }); 
}, <?=REFRESH_INTERVAL?>); 
+0

これは、たとえば、20人のユーザーがログインし、1人がクリックして新しい投稿を表示すると、データベース内の新しい投稿が1に設定されることを意味します。これは、DIVが他の19人のユーザーのためにリフレッシュすると、0の新しい投稿を表示することを示しています。私は正しい?または私はちょうど推測ですか?これが意味する汚名はありません – Bryan

+0

コメントをユーザーに関連させますか?だから私が1年後にログインすると、私が逃したすべてのコメントの通知が届くだろうか?または特定の期間の新しいコメント? – user1190992

+0

ログイン後の新しいコメント。ただし、あなたが提供した回答は現在のユーザーに影響します。私が言ったように、私はそれがそうであると推測しています。私は知らないのでここにいます........あなたは私が正しいかどうか教えてください!!!!!または間違った!!!!! – Bryan

0

、私は以下を思い付きました私が先に質問した質問に対する解決策。

  1. 私はログイン時にタイムスタンプを作成しました。
  2. これを使用して、データベースで検索を実行します。

この情報を含むDIVは10秒ごとに更新され、タイムスタンプリセットページへのクリック可能なリンクです。

<?php 
session_start(); 

$reset = $_POST['reset']; 

if($reset == 'reset') 
{ 
$_SESSION['time_stamp'] = time(); 
echo "done";//confirmation purpose 
} 
?> 

と全体のショーを制御私のjavascript:

<script type="text/javascript"> 
<!-- 
$(document).ready(function(){ 
$('#divname').click(function(){ 
var r="reset"; 

$.ajax({ 
type: "POST", 
url: "reset_time.php", 
data: r, 
success: function(html){ 
if(html == 'done') 
{ 
$('#divwithinfo').reload(/*my blog page url*/); 
} 
}); 
}); 
}); 
--> 
</script>