【问题标题】:How to validate drop down menus in php?如何验证php中的下拉菜单?
【发布时间】:2009-04-01 14:42:26
【问题描述】:

我们必须插入出生日期(这是一个包含 DD/MM/YYYY 的下拉框) 在 MySql 中通过验证它。如何做呢?


它是由用户从下拉菜单中的选项输入的出生日期的表单验证。我的问题是如何使用 PHP 在 MySql 中插入该输入 DOB

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你可以首先做(对于每个字段):

    if((int) $field == 0)
    {
        return false;
    }
    

    然后你可以这样做:

    $birthday = date('Y-m-d', strtotime($day . '-' . $month . '-' . $year));
    mysql_query("INSERT INTO your_table(birthday) VALUES('" . $birthday . "')";
    

    【讨论】:

      【解决方案2】:

      你的问题有点混乱。 “通过验证”插入数据没有意义。

      如果您想知道如何插入数据,这是一个基本的 MySQL 问题,最好通过咨询 online documentation 来回答。

      如果您想知道如何验证数据,则必须指定所需的验证类型——正如桑德斯所回答的那样。这有点像问“我如何制作 GUI?”有无数种方法可以做到。这个问题太模糊了。

      如果您只是想检查提交的值是否是有效日期,那么一种快速而肮脏(懒惰)的方法就是将其插入表中(假设您有一列 DATE/DATETIME type ),然后进行后续查询以检索存储的值。如果存储的值是该数据类型的“零”值(即“0000-00-00”或“0000-00-00 00:00:00”),则提交的值不是有效日期。

      所以你的代码看起来像:

      <?
      $month = mysql_real_escape_string($_POST['month']);
      $day = mysql_real_escape_string($_POST['day']);
      $year = mysql_real_escape_string($_POST['year']);
      $query = "INSERT INTO my_table (`birthday`) VALUES ('$year-$month-$day')";
      mysql_query($query);
      $query = "SELECT `birthday` FROM my_table WHERE `id`=LAST_INSERT_ID()";
      $qid = mysql_query($query);
      $res = mysql_fetch_object($query);
      if ($res->birthday == '0000-00-00') {
          // submitted date was invalid
      }
      ?>
      

      当然,上面的代码有很多缺点。理想情况下,您可能希望在插入数据之前对其进行验证,并且如果您正在更新记录而不是插入新记录,那么您需要在原始值被覆盖之前获取原始值无效的。

      顺便说一句:我认为您的意思是说“下拉列表”或“选择列表”。下拉菜单是另一回事。

      【讨论】:

        【解决方案3】:

        我假设你所说的下拉是指一系列这样的选择,对吧?

        <select name="month">
        <option value ="01">January</option>
        <option value = "02">February<option>
        ...
        </select>
        <select name="day">
        <option value = "01">01</option>
        ...
        </select>
        <select name="year">
        <option value = "1930">1930</option>
        [etc.]
        

        如果是这种情况,那么您的数据就是自我验证的。在服务器端,您可以这样做:

        <?php
        $mysql_date = "$_POST[year]" . "-" . "$_POST[month]" . "-" . "$_POST[day]";
        mysql_query("INSERT INTO your_table (`date`) VALUES ('$mysql_date')");
        ?>
        

        希望我没有误解这个问题。

        【讨论】:

        • 那是误导,这不是以安全的方式自我验证。有人可以轻松提交 HTML 中未定义的内容并尝试利用您的查询。永远不要依赖 html 表单/选择来验证。
        【解决方案4】:

        什么样的验证? 日期无效时mysql会打印错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-17
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          • 2012-07-21
          相关资源
          最近更新 更多