2

ライブディスカッションフォームに取り組んでいます。このページはMySQLからスレッドをロードし、4秒ごとにAJAXを介して更新されます。各スレッドの最後のコメントの後に、コメント用のテキスト入力があります(Facebookと非常によく似ています)。

ユーザーが入力を書き込んでページが更新されるとメッセージが消えることを除いて、すべてが正常に機能します。このプロジェクトの主な目標はセキュリティとプライバシーです。そのため、Cookieを使用したくありません。私は多くの解決策を試し、解決策を数時間検索しましたが、何も機能しないようです。

  1. $_postそのページが更新されるたびに可能な解決策はありますか?
  2. 入力した値をキャッシュして$_sessionローカルストレージから取得する場合、より具体的なアプローチを提案できる人はいますか?すなわち:リスナーを置く場所:)
  3. 入力の値が「」と異なる場合にページの再読み込みを防ぐ関数を作成しようとしましたが、これでも機能しませんでした。

これが私の更新コードです:

<script type="text/javascript">
    var PHP = "msgboard.php";  

    function updateShouts(){
        $('#msgboard').load(PHP);       
    }

    window.setInterval( "updateShouts()", 4000 );
</script>

そして、これが主なPHP関数です。

while($row = mysql_fetch_array($resultados)) { 

    echo '<div class="post">
            <div class="user"><b>'.$row["user"].'</b></div>';
    echo '  <div class="txt">'.$row["msg1"].'</div>
          </div>';

        $sql2="SELECT * FROM table WHERE masterid = '".$row['id']."'ORDER BY id ASC";
        $resultados2 = mysql_query($sql2);
        while($row2 = mysql_fetch_array($resultados2)) { 
            echo '<div class="comment">
                    <div class="txt"><b>'.$row2['user'].'</b>';
            echo '  '.$row2['msg1'].'</div>
                  </div>';
        }

    echo '<div class="commentform">
            <form action="board.php" method="post">
            <input type="text" size="75" name="message" id="message1">
            <input type="hidden" name="masterid" value="'.$row['id'].'">
            <input type="submit" name="Submit" value="Enviar"></form>
        </div>' ;
}

前もって感謝します!

4

2 に答える 2

0

ステートフルHTTP接続を調べる必要があるPerhaphs。したがって、サーバー側のボードに新しいメッセージが追加されるたびに、すべてのクライアントに通知されます。これにより、ページを不必要に更新する必要がなくなります。HTML5は、それを可能にするWebSocketsをサポートしています。ここに私が出くわしたいくつかのリンクがあります。

WebSocketのHTML5WebSocketsWikipediaページを使用してPHPサーバーへの双方向接続を作成します

socketo.me

于 2012-12-12T22:36:05.570 に答える
0

@aziz がコメントで指摘したように、コメントを更新したいだけなら、ページのその部分だけを更新する必要があります。

ステップ 1: コンテナーをコメントに追加して、更新の対象をそのコンテナーにできるようにする

<div id="comments_contaner">コードにすべてのコメントを含む新しい div があることに気付くでしょう。

<?= $variable ?>また、HTML を出力している場合、HTML に PHP 変数を配置する必要がある場合は、PHP タグを閉じて使用する方が簡単で適切です。

msgboard.php:

<?
while($post = mysql_fetch_array($resultados))
{
?>
    <div class="post">
        <div class="user"><b><?= $post["user"]?></b></div>
        <div class="txt"><?= $post["msg1"]?></div>
    </div>
    <div id="comments_contaner">
<?
    // This code can be ommited as you can just call updateShouts() upon page load to fetch the comments
    $comments = mysql_query("SELECT * FROM table WHERE masterid = '{$post['id']}' ORDER BY id ASC");
    while($comment = mysql_fetch_array($comments))
    {
?>
        <div class="comment">
            <div class="txt"><b><?= $comment['user'] ?></b> <?= $comment['msg1'] ?></div>
        </div>
<?
    }
?>
    </div>
    <div class="commentform">
        <form action="board.php" method="post">
            <input type="text" size="75" name="message" id="message1">
            <input type="hidden" name="masterid" value="<?= $post['id'] ?>">
            <input type="submit" name="Submit" value="Enviar">
        </form>
    </div>
<?
}
?>

ステップ 2: コメントを更新する PHP 関数を作成する

masteridこの関数はコメントのみを出力します。どのコメントを出力するかを知るには、パラメータとしてが必要です。

updateComments.php:

<?
    $masterid = $_GET['masterid']
    $comments = mysql_query("SELECT * FROM table WHERE masterid = '{$masterid}' ORDER BY id ASC");
    while($comment = mysql_fetch_array($comments))
    {
?>
        <div class="comment">
            <div class="txt"><b><?= $comment['user'] ?></b> <?= $comment['msg1'] ?></div>
        </div>
<?
    }
?>

ステップ 3: コンテナ div を対象とするスクリプトで PHP update 関数を呼び出す

$row['id']URL のパラメーターとしてを渡す必要があります。

<script type="text/javascript">
    var PHP = "updateComments.php?masterid=<?= $post['id']?>";  

    function updateShouts(){
        $('#comments_contaner').load(PHP);       
    }

    window.setInterval( "updateShouts()", 4000 );
</script>

PD:私はこのコードをテストしていません。主なアイデアを示すだけです。

編集:変数名を修正し、コメントを追加しました。

于 2012-12-13T00:00:55.097 に答える