Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL在一定时间后停用高级会员资格?_Php_Mysql_Time_Countdown - Fatal编程技术网

PHP MySQL在一定时间后停用高级会员资格?

PHP MySQL在一定时间后停用高级会员资格?,php,mysql,time,countdown,Php,Mysql,Time,Countdown,我最近刚刚研究出如何使用PayPal IPN在用户支付一定金额时启动高级会员资格。一旦用户单击升级帐户,他们将被定向到PayPal进行支付,然后IPN开始更新数据库以显示用户是高级用户。我希望在他们的帐户恢复正常之前,这会持续一段时间,但不知道如何做到这一点?例如,他们升级,2年后,会触发MySQL更新,使他们的帐户恢复到平均水平。以下是我正在使用的IPN脚本: <?php include 'core/init.php'; //DONT CHANGE THESE VARIABLES $

我最近刚刚研究出如何使用PayPal IPN在用户支付一定金额时启动高级会员资格。一旦用户单击升级帐户,他们将被定向到PayPal进行支付,然后IPN开始更新数据库以显示用户是高级用户。我希望在他们的帐户恢复正常之前,这会持续一段时间,但不知道如何做到这一点?例如,他们升级,2年后,会触发MySQL更新,使他们的帐户恢复到平均水平。以下是我正在使用的IPN脚本:

<?php 
include 'core/init.php';

//DONT CHANGE THESE VARIABLES
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$receiver_email = $_POST['receiver_email'];
$username = $_POST['custom'];


if($payment_status =="Completed")
{
$purchase_check = mysql_query("SELECT premium FROM users WHERE username='$username'");
while($row = mysql_fetch_assoc($purchase_check))
{
    $paid = $row['premium'];
}
if($paid=="0")
{
    if($receiver_email=="aidan6141@hotmail.co.uk")
    {
        if($payment_amount=="6.99" && $payment_currency=="GBP")
        {
            $update_premium = mysql_query("UPDATE users SET premium='1' WHERE username='$username'");
        }
    }
}
}
else
{
echo "Access Denied!";  
}

?>
所以更新他们升级的日期不应该是个问题,问题是我怎样才能回忆起这些信息,所以在时间戳之后的2年内,他们会被发回给普通会员?我也希望能显示一个倒计时日期或其他什么,这样他们就知道他们的帐户还剩多长时间了


任何帮助都将不胜感激,谢谢

为什么不在数据库中添加

upgraded = tinyint: to store a 0 for not upgraded and a 1 for upgraded
upgraded_date = datetime: to store the date this was done

然后设置一个cron作业来运行(可能一天几次,或者在用户登录时检查),以检查时间是否已过期,如果它已将“升级”重置为0,为什么不使用unix时间戳而不是在数据库中使用布尔值

您可以说,数据库中的
premium
字段将保存premium成员资格的过期时间


然后,您可以进行检查,查看当前时间戳是否大于字段
premium
中保存的值,然后它就过期了。。。如果它是
Null
0
他从来都不是特级的,如果它小于保存的值,那么他的成员资格是有效的,然后你可以计算当前时间戳和保存的时间戳之间的差异,看看它还有多长时间过期。

你可能需要一个其他条件来检查年份

就像这样:

  while($row = mysql_fetch_assoc($purchase_check))
{
    $paid = $row['premium'];
                 $timestamp_start = $row['upgrade_date'];
                 $timestamp_end = date("Y/m/d");
                 $difference = abs($timestamp_end - $timestamp_start);
                 $years = floor($difference / (365*60*60*24));
}
if($paid=="0")
{
    if($receiver_email=="aidan6141@hotmail.co.uk")
    {
        if($payment_amount=="6.99" && $payment_currency=="GBP")
        {
            $update_premium = mysql_query("UPDATE users SET premium='1' WHERE username='$username'");
        }
    }
}else if($years == 2){ do update here and set premium to 0}
          else{do what you like here}
}
else
{
echo "Access Denied!";  
}
  while($row = mysql_fetch_assoc($purchase_check))
{
    $paid = $row['premium'];
                 $timestamp_start = $row['upgrade_date'];
                 $timestamp_end = date("Y/m/d");
                 $difference = abs($timestamp_end - $timestamp_start);
                 $years = floor($difference / (365*60*60*24));
}
if($paid=="0")
{
    if($receiver_email=="aidan6141@hotmail.co.uk")
    {
        if($payment_amount=="6.99" && $payment_currency=="GBP")
        {
            $update_premium = mysql_query("UPDATE users SET premium='1' WHERE username='$username'");
        }
    }
}else if($years == 2){ do update here and set premium to 0}
          else{do what you like here}
}
else
{
echo "Access Denied!";  
}