【问题标题】:Get date from database and control if a month has passed从数据库中获取日期并控制是否过了一个月
【发布时间】:2022-06-10 20:59:17
【问题描述】:

我创建了一个表单,用户可以在其中更改自己的姓名,并将其保存在数据库中。我想在提交后控制用户是否已经在不到一个月前更改了他的名字。

在我的数据库中,我有一个名为“name_changed”的列,其中默认数据是 0000-00-00,当名称更改时,日期保存在“name_changed”中。但我不知道如何控制月份。

这里是 HTML 代码:

<form action="#" method="POST">
   <input type="text" class="..." name="name" required>
   <input class="..." type="submit" name="change-name">
</form>

这里是 PHP 代码:

if(isset($_POST['change-name']) && $_POST['name'] != ""){ // take data form
                $errors = "0";
                    if(strlen($_POST['name']) < 21){ // control length
                        $name = "$_POST[name]";
                        $sql = "SELECT * FROM user_db WHERE email = '$_SESSION[email]'";
                        $date_today = date('Y-m-d'); // i don't know if it's right
                        $data_today_month = // take only month
    
                        $date_db = $fetch_info['name_changed']; // take date on db from column "name_changed"
                        $date_db_month = // take only month
                        $diff_between_date_today_month_and_data_db_month = $date_today_month - $date_db_month;
                        if($data_db == '0000-00-00' or $diff_between_date_m_and_data_db_m>= '1'){
                            $update_pass = "UPDATE user SET name = '$name' WHERE email = '$_SESSION[email]'";
                            $run_query = mysqli_query($con, $update_pass);
                            if($run_query){
                                $sql = "SELECT * FROM user WHERE email = '$_SESSION[email]'";
                                $update_pass = "UPDATE user SET name_changed = '$date' WHERE email = '$_SESSION[email]'";
                                $run_query = mysqli_query($con, $update_pass);
                            }
                        }else{
                            $count_error = '1';
                            $errors = "you can only change your name once a month!";
                        }
                        
                        
                        }else{
                            $count_error = '1';
                            $errors['db-error'] = "Something wrong!";
                        }
}

谢谢

【问题讨论】:

  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: php html mysql sql


【解决方案1】:

在您的应用程序中考虑这一点 SELECT DATEDIFF(NOW(),name_changed);对于天数的差异。如果小于 30,则停止努力。保持简单。

【讨论】:

【解决方案2】:

看看php日期格式:https://www.adminschoice.com/php-date-format

如你所愿

date('Y-m-d')

你也可以

date("m") --> for only the month. 

但是通过按月进行检查,当用户在 1 月 31 日和 2 月 1 日更改姓名时,您可能会有一个月的差异:第 1 个月和第 2 个月。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多