1

mysql データが変更されたときに、php チャット スクリプトを自動更新するのに問題があります。私はかなりの調査を行いましたが、他の人の解決策の多くは私が必要とするものよりも複雑であるようです (私は非常に基本的なものを探しています)。

私はjavascriptを知らないので、jsが関係している場合は詳細なコメントをいただければ幸いです。

これが私が作成したphpスクリプトです。それは機能しています(少なくとも私にとっては)。

    include 'connect2.php';
    echo "
            Enter a Message:
            <form method=post action='' name=chat>
            <input type=text name=message>
            <input type=submit name=chat value=Submit>
            </form>
    ";

    if (isset($_POST['chat'])) {
    $message = $_POST['message'];
    mysql_query("INSERT INTO chat set message='$message',user='$_SESSION[username]'");
    }

    $sql = "select * from chat order by id desc limit 15";
    $result = mysql_query($sql) or die ("An error has occured with in the database.");

    while ($data = mysql_fetch_assoc($result)) {
    $db_message = $data['message'];
    $db_user = $data['user'];
    echo "$db_user : $db_message <br>";
    }

    ?>

どんな助けでも大歓迎です、ありがとう!:)

4

2 に答える 2

0

ajax関数を使用setIntervalしてライブラリ化して、それを確認できます。jQuery

たとえば、次のようにするのは非常に簡単ですjQuery

$(document).ready(function() {
  // check once in five seconds
  setInterval(function() {
    $.get('/script.php', {do: 'new_messages'}, function(response) {
      if(response == 1) {
        window.location.reload();
      }
    });
  }, 5000); 
});

そしてサーバーのどこかに:

if(isset($_GET['do']) && $_GET['do'] == 'new_messages') {
  // some your code that detects if there's any new messages, and sets
  // $there_are_new_messages to true, if there's any
  ...
  if($there_are_new_messages) {
     echo 1; 

     exit; // avoid further output
  }
}

これが機能するためには、予期しない結果になる可能性があるため、ajax ブロックの前に出力がないことを確認する必要があることを覚えておいてください。

また、スクリプトにすべて問題がないことを示すために出力を使用することは、まったく良い方法ではないことも考慮してください。より良い方法は、対応する応答コードを含む HTTP ヘッダーを設定することです。

于 2013-10-28T22:16:57.803 に答える
0

あなたのケースでこれを行う最善の方法は、おそらく Ajax (および jQuery) を使用し、X 秒ごとに更新することです。

Ready Handler - http://api.jquery.com/ready/

Javascript タイマー - http://www.w3schools.com/js/js_timing.asp

Ajax リクエスト - http://api.jquery.com/jQuery.post/

PHP json_encode- http://php.net/manual/en/function.json-encode.php

$( document ).ready(function() { //set up refresh timer on page load
    var refreshTimer = setInterval(function(){refreshMessages()},5000); //creates timer to request every 5 seconds
});

function refreshMessages(){
    $.post( "getMessages.php", function( data ) { //fire ajax post request
        alert("Got messages: " + data); // this just alerts the data when the request is done, you'll probably want to format/print
    });
}

getMessages.php 側では、通常の方法でデータベースからメッセージを取得する必要があります。この場合、php メッセージ配列を json エンコードすると、返されたオブジェクトを反復処理する簡単な方法になります。

<?php
$messages = // get messages array from database
echo json_encode($messages);
?>
于 2013-10-28T22:21:57.110 に答える