2009-08-06 12 views
0

私は、データベースに書いたことを「バンプ」することができるようにしたいが、同時に入力を一度に1つのテーブルにしか入れることはできない。例についてはユーザーは1時間ごとに送信した入力をバンプすることができますか?

Jimのコードでは、ジムは彼のコードを入力し、それが表の一番下に放つ5555です。 34分後、彼は彼のコードをもう一度入力しようとするが(他のさまざまな人たちが今やっている間にコードを入力しているので)、表示エラーが表示され、26分待っていることがわかる。

ジョーはコードを入力して1時間5分待ってコードをもう一度最後まで押し戻すことができます。

基本的には、テーブルの下から上に向かってデータを表示しています。

これを簡単に行う方法はありますか?

function some_more_custom_content() { 

    $output="<BR>"; 

    ob_start(); 

    if ($_REQUEST['code'] != "") { 
     $code = $_REQUEST['code']; 
     $query="INSERT INTO `fc` (`code`,`datetime`) values ('" . mysql_real_escape_string($code) . "', now())"; 
     $result=mysql_query($query); 
     $entry['datetime'] = strtotime($entry['datetime']); 

     while ($fetch_array = mysql_fetch_array($result)) { 
      $seconds = time() - strtotime($fetch_array["datetime"]); 

      if ((time() - $entry['datetime']) < 60*60) { 
       echo ("The code " . htmlentities($code) ." was updated less than an hour ago."); 
      } else { 
       echo ("Inserted " . htmlentities($code) ." into the top."); 
      } 
     } 
?> 

構文エラーが発生します。それがどこですか?

UPDATE:

ないようにハード

Parse error: syntax error, unexpected $end

+0

私はすでにコードを入力しているので、now()スタンプを取得して、それがどれくらい前に入力されたかを表示します。タイムスタンプが1時間以内であることを確認し、そのエラーを表示するにはどうすればよいですか?それは私の問題 –

+1

私はあなたのコードを適切にインデントして、あなた自身で問題を見ることができるはずです。ヒント: "}" – deceze

+1

あなたの開き中括弧 '{'と中括弧 '}'を数えれば、後者のいくつかが欠落しています。 – deceze

答えて

0

:のエラーを取得

"時間をバンプ" 最後のタイムスタンプを使用してください。

コードを入力するときに、コードがすでにデータベースに存在するかどうかを確認します。
そうでない場合は、それを挿入し、バンプタイムスタンプをnow()に設定します。
存在する場合は、タイムスタンプが1時間以内であったかどうかを確認します。 この場合、エラーを表示します。
そうでない場合は、now()にリセットしてください。

バンプタイムスタンプで表示データをソートします。

EDIT:

$entry = /* get entry from database, assuming the case where it already exists */; 

// depending on the format of timestamp you get from the database, 
// you may have to convert it to a UNIX timestamp: 
$entry['timestamp'] = strtotime($entry['timestamp']); 

if ((time() - $entry['timestamp']) < 60*60) { // 60*60 is one hour in seconds 
    // display error 
} else { 
    // reset bump 
} 
+0

私はすでにコードを入力しているので、now()スタンプを取得し、それがどれくらい前に入力されたか表示します(私はそこにテーブル全体を投げます)。タイムスタンプが1時間以内であることを確認し、そのエラーを表示するにはどうすればよいですか?それは私の問題です。 –

+0

答えが更新されました。 – deceze

+0

UNIXのタイムスタンプに慣れていない場合:http://en.wikipedia.org/wiki/Unix_timeすべてが秒単位で表現されているという考えに慣れたら、それを使って計算するのは簡単です。 – deceze

2

あなたがコードフィールドに一意のインデックスを持つテーブルを作成し、その後のようなクエリを使用する必要がありますとき、これが唯一の例でlastUpdatedフィールドを更新します

 
INSERT INTO CODES (code) 
    VALUES (555) 
    ON DUPLICATE KEY UPDATE lastUpdated = 
       case when NOW() - INTERVAL 5 MINUTE > lastUpdated 
        then NOW() 
        else lastUpdated end 

それは5分以上です

関連する問題