0

私が開発しているウェブサイトでは、ユーザーを禁止および禁止解除するためのシステムを作成しています。

私のデータベースには、禁止に関するフィールド(userID、アクティブ、作成日、理由ecc)を含む「禁止」テーブルがあります。

私がしたいことは:

有効期限の別のフィールドを追加し、この日付が発生すると、フィールド「アクティブ」を自動的に0に変更します。

どうすればそれができますか?

4

4 に答える 4

3

active禁止解除日に達したときにフィールドを元に戻すタスクに依存したくないので、私はあなたのように2つのフィールドを使用しません。


banned_until代わりに、 ; のように呼ばれる1つの日時フィールドのみを使用します。このフィールドは次のいずれかになります。

  • ユーザーNULLが禁止されていないときである、
  • または、ユーザーが禁止されるまでの日付を含めます。

次に、ユーザーが何か(ログイン、投稿、...)を実行しようとすると、次のことを確認します。

  • このフィールドはですNULL。この場合、ユーザーは禁止されません。
  • または、このフィールドに含まれる日付が過去のものであり、ユーザーが禁止されている可能性がありますが、現在はそうではありません。

NULL2番目のケースでは、禁止解除日に達したため、フィールドをにリセットすることもできます。

于 2012-05-20T09:19:20.783 に答える
2

cronスクリプトを使用するか、禁止されたユーザーを取得するときに、where句を適用して、禁止が期限切れになっているかどうかを確認します。

于 2012-05-20T09:27:50.517 に答える
0

有効期限が過ぎているかどうかを確認するphpスクリプトを作成します。SQLは次のようになります。

UPDATE banned SET active=0 WHERE expire_date<=NOW()

たとえば、それを保存しますtask.php

次に、でcronタスクを作成しますcrontab -e

*/10 * * * * php /path/to/your/taks/task.php

これにより、このスクリプトが10分ごとに実行され、禁止されているすべてのpplの禁止が解除されます。

-

他の方法、おそらくPascalが説明したようなより良い方法がありますが、この答えはあなたの考えのためです。

于 2012-05-20T09:22:38.420 に答える
0

expiry_date値をと比較しcurrent_dateて、ユーザーがログイン時にアクティブであるかどうかを確認できます。

SELECT 
 ( DATE_FORMAT( expiry_date_field, '%Y-%m-%d' )
   < 
   DATE_FORMAT( CURRENT_DATE, '%Y-%m-%d' )
 ) AS isActive
FROM
 banned 
WHERE
 user_id=?;  

0返されたものは、非アクティブな1ステータスおよびアクティブであることを表します。

ただし、ユーザーのログインに関係なく、ユーザーのアクティブステータスを維持する場合は、イベントスケジューラを使用してこれを実現できます。

次の例は、1つを実装する際のアイデアを示しています。

drop event if exists event_user_bans_scheduling;
delimiter //

create event if not exists event_user_bans_scheduling
--  on schedule every 86400 second starts 00:00:00
--  at timestamp( adddate( current_date, 1 ),'00:00:00' )
  on schedule every 1 day starts timestamp( current_date + 1, '00:00:01' )

  comment 'Scheduler to update active status of users'
  do
    UPDATE my_app_db.banned
      SET ACTIVE=0
      WHERE
        date_format( expiry_date_field,'%Y-%m-%d' ) = date_format( CURRENT_DATE, '%Y-%m-%d' );
;
//
delimiter ;


グローバルevent_schedulerシステム変数は、イベントスケジューラが有効でサーバー上で実行されているかどうかを決定します。Event Scheduler ConfigurationMySQLイベントに取り組む前に、に関する完全なメモをお読みください

于 2012-05-20T11:03:46.273 に答える