【问题标题】:Getting a users Date of birth? php mysql获取用户的出生日期? php mysql
【发布时间】:2011-04-09 11:22:34
【问题描述】:

大家好,我需要以表格形式获取用户的出生日期...您认为我应该怎么做?我想在文本字段中保持简单,但我还需要验证它。

之后我需要将它存储在我的数据库中,数据库有一个时间戳字段是正确的还是我应该使用不同的东西? (MYSQL)

我现在可以使用它,但它还在数据库中显示时间为 00:00:00。

我正在使用这个

        $DOB = strtotime($DOB);

我该怎么做?有没有更好的办法?这要求他们输入 dob 作为 YYYY/MM/DD 有没有办法我可以做得更好...

在此之后,我还需要确保他们已年满 18 岁。那我该怎么做呢?

【问题讨论】:

    标签: php mysql arrays date time


    【解决方案1】:

    要让用户输入日期,您可以使用 jQuery's Datepicker 之类的东西:它允许您的用户输入日期,输入日期,或使用某些日历小部件选择日期。


    要将日期存储在 MySQL 数据库中,您应该使用 DATE 字段——而不是:

    • DATETIME,其中包含时间
    • 也不是 TIMESTAMP,其中包含时间,并且仅限于 1970 年-2038 (感觉不太适合出生日期)


    为了使用strtotime(),您的日期应该看起来像YYYY-MM-DD (就像在数据库中,使用DATE 字段时),而不是DD/MM/YYYYMM/DD/YYYY (这些可能会令人困惑)

    在 PHP 中,您还应该使用 DateTime 类,而不是 UNIX Timestamps :它们仅限于 1970-2038 (在 32 位平台上)

    【讨论】:

    • 我不能在这个项目上使用 jquery,它是用于课堂作业,如果我使用类似的东西,我会被标记下来。
    • 哼,太糟糕了 :-( (太糟糕了,仍然有一些学校在工作时对公司工作方式的现实如此脱节......)
    • 我觉得更多是因为老师懒得标注哈哈,我需要使用一些描述的功能创建一个简单的约会网站。稍后我们必须做一个更复杂的网站版本。这在某种意义上就像一个小里程碑。
    • 老实说,在选择遥远的过去或未来的日期时,日期选择器很糟糕。尝试将字符串解析为日期格式有什么问题?这样,您可以让您的用户以他们喜欢的任何格式键入日期。如果解析失败,通知他们错误。
    • 好的日期选择器不应该阻止你自己输入日期,如果需要的话:-)
    【解决方案2】:

    像这样转换日期('Y-m-d',strtotime($DOB))

    【讨论】:

      【解决方案3】:

      在您的客户端脚本或 HTML 文件中:

      <form action="myphp.php">
      
      Day 
      <select size="1" name="day">
      <option value="01" label="1st">1st</option>
      <option value="02" label="2nd">2nd</option>
      ...
      </select>
      
      Month
      <select size="1" name="month">
      <option value="01" label="Jan">Jan</option>
      <option value="02" label="Feb">Feb</option>
      ...
      </select>
      
      Year <select size="1" name="year">
      ...
      <option value="1979" label="1979">1979</option>
      <option value="1980" label="1980">1980</option>
      ...
      </select>
      
      </form>
      

      在你的.php后端:

      $DOB = $_REQUEST['year']."/".$_REQUEST['month'].$_REQUEST['day'];
      

      现在$DOB 处于可用格式,您可以随意验证$_REQUEST[...]。但我建议在 HTML 页面上使用 JQuery 以及服务器端验证。

      【讨论】:

        【解决方案4】:

        您应该使用字段类型“DATE”,它只会存储它的日期部分。否则,您可以在选择时使用 select DATE(fieldname) ...。

        要验证用户的年龄,您可以使用 DATE_SUB 从今天的日期计算年龄,然后减去用户的生日。

        【讨论】:

          【解决方案5】:

          首先,您不能使用时间戳来存储生日,因为时间戳从 1970 年开始计算,并且世界上有一些 40 岁以上的人,因此使用日期代替(不是日期时间,因为您不需要存储时间,只需出生日期)

          您可以通过简单的文本字段从用户那里获取日期,但您应该通知他预期的日期格式(d/m/y,m/d/y,...) 2/4/2011 可以代表 2011 年 2 月 4 日或 2011 年 4 月 2 日

          在你知道你除了用正则表达式检查输入之外

          例如,$_POST['birthday'] = '11/3/2011' 我们除了格式 m/d/y

          $birthday = $_POST['birthday'];
          if(preg_match('/^(\d){1,2}\/(\d){1,2}\/(\d){4}$/',$birthday)){
                list($month,$day,$year) = explode('/',$birthday);
                // here you should check that $day isn't bigger then days_in_month($month), and $month is between 1-12
                if(date('Y')-$year<18){ // you need to take into account $month to be more strict
                   // user under 18
                }
          }
          

          希望对你有帮助

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-20
            • 2011-07-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-02
            • 2012-08-02
            • 1970-01-01
            相关资源
            最近更新 更多