0
<?php

mysql_connect('localhost','root','');
mysql_select_db('ditwhales');

$studno=$_POST['studno'];

$command=mysql_query("SELECT * FROM chat WHERE studno= 

'$studno'");
$numrs=mysql_num_rows($command);

if ($numrs==0){
print 'Sorry but you are not one of the Whales. Please contact the web 

master and ask for registration of your Student No. Thank you!';
}

else{
$all=mysql_query("SELECT * FROM msgs");

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

echo $row['message'] . "<br />";

};
}




?>

私はこのコードを持っています。しかし、問題は、他の人が1秒ごとに更新することです。それも可能ですか?return関数は機能すると思いますが、使い方がわかりません。誰か助けてもらえますか?

4

3 に答える 3

1

1秒ごとにjavascriptajaxを使用してphpファイルをロードできます。また、無制限のループを使用してsleep(1)を配置することもできます。1秒ごとに更新します

于 2012-06-24T10:32:36.680 に答える
1

Mohammadが示唆しているように、この問題に対してクライアント側のスクリプトを使用して、サーバー上のphpファイルの場所を呼び出し、回答を返すことができます。次に例を示します。

<script type="text/javascript">
function callphp(){
    setTimeout('callphp()', 1000);
    xmlhttp = null;
    count = 0;
    var d = new Date();
    if (window.XMLHttpRequest){
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else{
        // IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
RndString = d.getFullYear() + "" + d.getMonth() + "" + d.getDate() + ""  + d.getHours() + "" + d.getMinutes() + "" + d.getSeconds() + "" + count++;
    xmlhttp.open("GET",'file.php?C=' + RndString,false);
    xmlhttp.send(null);
    if(xmlhttp.responseText != ""){
        document.getElementById("div").innerHTML = xmlhttp.responseText;
        }
}
</script>

それをチェックして、何が起こるか教えてください。

于 2012-06-24T10:59:26.387 に答える
0

あなたは一種の紛らわしい役割です: php はサーバー側で実行され、クライアントに表示するデータを返します。通常はブラウザーが直接表示する本格的な HTML ですが、使用するとjsonXMLなどのさまざまな形式のデータだけを返すこともできます。これはRPCのプロバイダーとして使用されます。これは、php ファイルのエンドポイントを使用して関数を呼び出し、データを返すという手の込んだ方法です。

クライアント側 (通常は Web ブラウザー) がユーザーと対話する方法を操作する場合は、その特定のコンテキストで対話するコードを記述する必要があります。ブラウザーでこれを行う統一された方法は、JavaScriptを使用することです。

javascript を使用すると、 setIntervalを使用して X 秒ごとにルーチンを呼び出すなど、さまざまな方法でページを (相互に) アクティブにすることができます。

var cMR;

function callMyResults(){
}

window.onload = function(){
    cMR = setInterval('callMyResults',5000);
}
;

ページがロードされたときにコードが自動的に呼び出されるようにするには、onLoadイベント ハンドラーに関数をアタッチします。これにより、割り当てられた関数のすべてが実行されます。毎回 CallMyResults() 関数。setInterval の結果は cMR グローバルに保存されるため、後で必要に応じて間隔で実行されているコードを停止するために使用できます。

したがって、現在、このコードは何もしません。Javascript は他のページを呼び出すことができるため、現在AJAXと一様に呼ばれているものによってデータを取得できます。元々、これは XML ドキュメントを取得するためのものでした。これ、後で操作する (または単に現在表示されているドキュメントに書き込むだけ) ものでした。その後、これは json を使用するように進化しました。これは、javascript ネイティブ要素を返すため、使いやすく、ネットワーク接続を介して転送するサイズが一般的に小さくなり、ページがより高速になります。

これを簡単に行うための多くのライブラリが存在します。最も人気のあるライブラリの 1 つはjqueryですが、 XMLHttpRequestオブジェクト (AJAX の基礎)を使用して独自の呼び出しを記述することもできます。json データを取得するための this one のように、この例は Web 上にたくさんあります。

一般的に言えば、使いやすさ、独自の正気、およびより優れた簡単にアクセスできるコーディングのために、確立されたライブラリを使用することをお勧めします。

最後に、PHP 側では、通常どおりデータを収集するだけですが、独自の指定した形式の XML として、またはjson_encodeを使用して json として返すことによって、少し異なる方法で出力します。これは次のように簡単です。

<?php
$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1',$user,$password);
$result = $pdo->query('SELECT * FROM msgs');
print json_encode($result->fetchAll());

PHP データ オブジェクト(一般に PDO と呼ばれる) を使用してデータベースにアクセスしたことに注意してください。これにより、現在使用している RDBMS (mysql) とは別のRDBMSに切り替える場合に備えて、データベースにアクセスするための統一された方法が提供されます。その場合に適応する必要があるのは、インスタンス化するときにPDOオブジェクトに提供する DSN 文字列です。PDO のもう 1 つの非常に大きな利点は、自動的に引用される (したがって保護される)パラメーターを提供する準備済みステートメントを簡単に作成するメソッドを提供することによって、SQL インジェクションから保護することです。mysql_* 関数ファミリーの使用は推奨されなくなりました。PDO を使用するか、mysqli を使用してください。

だから、あなたに実用的な例を与えるために:

1 つのクライアント ページがあります: display.html と、データを生成して返すための 2 つのサーバー側ページ (fillList.php と retrieveList.php )

fillList.php

<?php
    // we work with the following table
// create table list_data (`when` DATETIME NOT NULL);

    // make sure to adapt these settings to yours, including username and password
$pdo = new PDO('mysql:dbname=scratch;host=localhost','username','password');
$pdo->exec('INSERT INTO list_data VALUES (NOW())');

これにより、テーブルのwhen列内に新しい値が挿入されますlist_data

検索リスト.php

<?php
    // make sure to adapt these settings to yours, including username and password
    $pdo = new PDO('mysql:dbname=scratch;host=localhost','scratch','scratch');
    print json_encode($pdo->query('SELECT `when` FROM list_data 
                                   ORDER BY `when` DESC'
                                  )->fetchAll(PDO::FETCH_ASSOC)
                      );

list_data降順で並べられたテーブルで見つかったすべての値を取得し、結果の連想配列を json オブジェクトとして返します。

jquery を使用したクライアント ページの例を示すことにしました。最新のjquery-1.7.2.jsをダウンロードして、このファイルと同じディレクトリに配置してください。

display.html

<html><head><title>Refreshing List</title>
<script src="http://localhost/jquery-1.7.2.js" />
</head>
<body>

<p>this list refreshes every 5 seconds, a new value is inserted every 2 seconds</p>
<ul id="toRefresh">
<li>base</li>
</ul>
<script>

function fillList(){
  // we insert a new value in the database by calling fillList.php
  $.get("http://localhost/fillList.php");
}

function refreshList(){
  /* 
    we retrieve the json encoded data returned by retrieveList.php 
    and process it in our anonymous function
  */
  $.getJSON("http://localhost/retrieveList.php",function (data){
    var items = [];
// loop through the returned array
    $.each(data,function(key,val){
      // we passed an associative array so we can use the columnname: 'when'
      items.push("<li>when: " + val['when'] + "</li>");
});
    // clear the list and append the data to it
$("#toRefresh").empty();
$("#toRefresh").append(items.join(''));
  });
}

// jquery uses .ready() instead of window.onload = function(){}
$(document).ready(function (){
  // retrieve the data every 5 seconds
  setInterval(function(){refreshList();},5000);
  // insert additional new data every 2 seconds
  setInterval(function(){fillList();},2000);

  // we fill the list with its initial values
  refreshList();

});
</script>
</body>
</html>

ご覧のとおり、jquery を使用すると、これらの操作を簡単に実行できます。display.html ページを実行すると、mysql の datetime 値のリストが常に増えて更新されていることがわかります。

于 2012-06-24T12:55:59.337 に答える