0

私は PHP/SQL の初心者ユーザーです....初めての PHP Web サイトを仕上げています。この質問は、次の場所にある最初の質問に似ています。

http://forums.phpfreaks.com/topic/266235-modifying-database-after-a-set-time-limit/

しかし、私は答えを完全には理解していませんでした。そのユーザーと同様に、データベース ( challengeと呼ばれる) の列全体 ( statusと呼ばれる) があり、ステータスの3 つの値(「非アクティブ」、「保留中」、または「アクティブ」) を取ることができます。Web サイト操作の通常の流れでは、通常、ユーザー A はボタン (イベント 1 ) をクリックして、データベースに (一意の *challenge_id* を持つ) 新しい行を作成し、その行で「保留中」のステータスをトリガーします。ユーザー B は、ステータスを「非アクティブ」または「アクティブ」に設定できる他のクリックされたボタンでステータスを変更できます。

望ましくないシナリオの 1 つは、ユーザー B が何もしない (つまり、イベント トリガーがない) ことです。この場合、ユーザー A は残念ながら、ステータスが「保留中」から「アクティブ」または「非アクティブ」に変わるのを待ってから、クリックして次のイベントをトリガーすることができなくなります 1。この状況は、たとえば、ユーザー B がサイトに飽きて使用しなくなり、「保留中」の要求に応答しないままになった場合に発生する可能性があります。

明らかに、SQL を手動で変更して、特定の制限時間後に「保留中」ステータスを「非アクティブ」に変更できます。最初はこれで問題ありませんが、サイトが人気になると、さらに時間がかかります。すべての「保留中」ステータス SQL エントリが特定の制限時間後に自動的に変更されるこの「イベント トリガーなし」シナリオを考慮して、PHP 以外のプログラムを作成する方法はありますか? または、PHPでこれを行うことができますか? ユーザーがログインするたびにデータベースをスイープする php スクリプトを書いてみました (注: *challenge_id* は、別の PHP ページでトリガーされたイベントによって作成されます)。

<?php session_start();

if ((($_SESSION['role']) != SHA1('user')) && (($_SESSION['status']) != SHA1('active')))     
{
header( 'Location: index.php' ) ;
session_destroy();
} else 


include 'connect.php';

$_SESSION['login_id'];

$universaltime = time();

$sqlt = mysql_fetch_assoc(mysql_query("SELECT challenge.challengetime, 
challenge.status FROM challenge"); //Selects an array of all values for challengetime 
//and status for all users I presume


while ((($universaltime - $sqlt['challengetime']) > 1000) && 
($sqlt['status'] == 'pending'))   
{

$sqlt1 = mysqli_query("UPDATE challenge SET $sqlt['status'] ='inactive'"); 
//Also tried with if instead of while

}



?>

私のコードを改善できると確信しています...どんな助けでも大歓迎です! または、PHP 以外のものを使用する必要がありますか?

4

2 に答える 2

0

Web および PHP サーバーが Linux で実行されている場合 (これはよくあることです)、遅延xが数分を超える場合 (つまりx>=5 分)、 crontab(1)を使用してcrontab(5 )エントリ。そこで絶対パスを使用することを忘れないでください。そのエントリは、MySQL データベースを更新する何らかのスクリプト (PHP でコーディングできますが、Python や OCaml などの他のスクリプト言語でもコーディングできます) を (定期的に) 実行します。

于 2013-09-02T05:07:06.883 に答える