【问题标题】:Take three values from <SELECT> tags and join them together in SQL "DATE"?从 <SELECT> 标记中获取三个值并在 SQL“DATE”中将它们连接在一起?
【发布时间】:2023-03-21 21:11:01
【问题描述】:

我一直致力于设计一个 MediaWiki 扩展,它会询问用户的出生日期,然后将其存储在用户数据库中。到目前为止,我已经设法通过输入框(如果用户像“2007-04-06”一样输入它)来完成这项工作。如您所知,这是非常低效的。

所以 - 此数据在 SQL 数据库中存储为“DATE”类型(命名为 user_birthdate),需要 YYYY-MM-DD 格式。

与其让用户手动输入这些数据,我宁愿有一个带有预设值的下拉列表,如下所示:

<select name="birthdate-year" id="birthdate-year">
 <option value="2005">2005</option>
 <option value="2006">2006</option>
 <option value="2007">2007</option>
</select>

<select name="birthdate-month" id="birthdate-month">
 <option value="01">January</option>
 <option value="02">February</option>
 <option value="03">March</option>
</select>

<select name="birthdate-day" id="birthdate-day">
 <option value="01">1</option>
 <option value="02">2</option>
 <option value="03">3</option>
</select>

我的问题是,到目前为止,我只使用过 JavaScript 和 HTML5,我从来没有接触过 PHP。以下是我想知道的:

如何将这些选项串在一起作为一个值,以便以正确的格式发送数据?就像用户选择“1997”、“04”和“03”一样,我希望它成为一个完整的值,即“1997-04-03”。

【问题讨论】:

    标签: php html mysql sql


    【解决方案1】:

    拥有三个选择列表会使最终用户的任务比单个框更耗时,而且您仍然需要验证输入(即避免像 2 月 31 日这样的事情)。

    为什么不使用可以为您完成大部分工作的日期选择器或日历?

    有关如何执行此操作的示例,请尝试here

    【讨论】:

      【解决方案2】:

      PHP:

      <?php
      
      // get values from post
      $birthdate-year = $_POST["birthdate-year"];
      $birthdate-month= $_POST["birthdate-month"];
      $birthdate-day= $_POST["birthdate-day"];
      
      // make string from values
      $goodDate = $birthdate-year."-".$birthdate-month."-".$birthdate-day;
      echo $goodDate; 
      
      // or make object datetime from values 
      $goodDate2 = new DateTime();
      $goodDate2->setDate($birthdate-year, $birthdate-month, $birthdate-day);
      echo $goodDate2->format('Y-m-d'); 
      
      ?>
      

      javaScript:

      <script>
      var year = document.getElementById(birthdate-year).value;
      var month = document.getElementById(birthdate-month).value;
      var day = document.getElementById(birthdate-day).value;
      
      var goodDate = year+"-"+month+"-"+day;
      
      alert(goodDate);
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 1970-01-01
        相关资源
        最近更新 更多