もちろん、「last_payment」という列を作成します。MySQL を使用している場合は、これを DATE フィールドとして作成できます。毎月の支払いを受け取るたびに、クレジット カード請求会社が Web サイトのスクリプトに何かを投稿すると思います。(つまり、paypal は IPN を送信します)。これを受け取るたびに、次のようなクエリを実行します。
UPDATE members SET `last_payment`=CURDATE() WHERE user_id='$user_id';
24 時間ごとに 1 回実行され、次のクエリを実行するスクリプトを CRON で実行することをお勧めします。
UPDATE members SET paid_up='N' WHERE DATEDIFF(CURDATE(),last_payment) > '30';
これにより、支払いが 30 日以上行われていないすべてのレコードが更新され、paid_up フィールドが N に設定されます。その後、通常のログイン コードが機能します。
CRON を使用したくない場合は、ログイン クエリを次のように変更できます。
SELECT 1 FROM members WHERE
username='$user' AND password='$password'
AND DATEDIFF(last_payment) <= '30';
ちなみに、クレジット カード処理会社は、サブスクリプションがキャンセルされたときに POST を送信する方法を持っている場合があり、これにより、paid_up フィールドを N に設定できます。
お役に立てれば。ご不明な点がございましたら、お気軽にコメントしてください:)