私は、ログインしたメンバーが家族や友人に紹介を送信して、サインアップを勧めることができる紹介システムを開発しました。
すべて正常に機能しますが、昨日、24時間以内に送信できる紹介の最大数を制限することにしました。私はこれを1日あたり最大3つの紹介に制限しました。
問題があると思われるコードを以下に投稿しました。私が抱えている問題は、どのように見えても、今日の最大紹介数に達したというエラーメッセージが表示されることです。コードで何が間違っているのかわかりません。
// referral query
$referral_limit = mysql_query("SELECT 'created_on' FROM 'user_referrals'
WHERE `referrer_uid` = $referrer_uid ") or die(mysql_error());
if(mysql_num_rows($referral_limit) > 0){
while($row = mysql_fetch_assoc($referral_limit)){
$db_time = $row['created_on'];
if((time() - $db_time) > 86400){
// is within 24 hours and has reached maximum daily referral allowance
$error[] = "You have reached the maximum referrals for today.";
}
}
}
$ db_timeをエコーアウトしようとしましたが、すべてを実行すると、created_onであるフィールド名であり、この場合はタイムスタンプを表示する実際の値ではありません。データベースのcreated_onフィールドには、紹介が行われたタイムスタンプが含まれています。これをチェックして、紹介しているユーザーが過去24時間以内に紹介を行っていないことを確認します。
また、1日あたり3ビットに制限する余分なビットを追加していないことに気付くでしょうが、この問題を最初に修正できるまで、そのビットを追加したくありませんでした。
データベーステーブルは次のようになります。
CREATE TABLE IF NOT EXISTS `user_referrals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`referrer_uid` int(11) NOT NULL,
`recipient_username` varchar(15) NOT NULL,
`referrer_email` varchar(254) DEFAULT NULL,
`referred_id` char(32) NOT NULL,
`referred_email` varchar(254) NOT NULL,
`status` char(9) NOT NULL,
`created_on` int(11) NOT NULL,
`updated_on` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `referred_id` (`referred_id`),
KEY `referrer_uid` (`referrer_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=72 ;
編集
これがいくつかの支援の後の私のコードです。紹介はありませんが、過去24時間以内に紹介が行われたとのことです。
エラーチェックを間違えていると思います。
$referral_limit = mysql_query("
SELECT COUNT(*)
FROM `user_referrals`
WHERE `referrer_uid` = $referrer_uid
AND `created_on` > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))") or die(mysql_error());
if($referral_limit > 0) {
$error[] = "You have reached the maximum referrals for today.";
}