使用月份和年份填充下拉表单

时间:2014-11-17 20:32:16

标签: php html date strtotime mktime

我正在尝试使用HTML和PHP创建两个下拉列表。第一个是自动提交,它将一个月发送到会话变量:

<form action="" method="post">
      <select name="month" onchange="this.form.submit()">
        <option value="">-- Select Month --</option>
        <?php $month = date('n'); // current month
         for ($x = 0; $x < 12; $x++) { ?>
          <option value="<?php echo date('m', mktime(0,0,0,$month + $x,1)); ?>" 
          <?php echo date('m', mktime(0,0,0,$month + $x,1)) == $_SESSION['month'] ? "selected='selected'":""; ?> >
          <?php echo date('F Y', mktime(0,0,0,$month + $x,1)); ?>
         <?php } ?>
      </select>
    </form>

这很有效。但是我需要第二次下载日期名称和号码:

<form action="" method="post">
      <select name="day" onchange="this.form.submit()">
        <option value="">-- Select Day --</option>
        <?php for ($i = $current_day; $i < 31; $i++) { 
        $tmp_date = $_SESSION['year']."/".$_SESSION['month']."/".$i; 
              $weekday = date('D', strtotime($tmp_date));  { ?>
        <option value="<?php echo $i; ?>" <?php echo $i == $_SESSION['day'] ? "selected='selected'":""; ?> >
        <?php echo $weekday." ".$i; ?>
     <?php  } ?>  
     <?php } ?>
        </option>
        <?php } ?>
      </select>
    </form>

这使用临时日期和会话变量作为我在之前设置的'2014'。我需要删除会话年变量并获得第一个下拉菜单以了解所选月份的哪一年,然后将其传递给临时日期,以便在下一年(2015年)正确填充日期名称和数字(如果您选择)一月起。目前它仅显示当前年份(2014年)的日期名称和数字。

2 个答案:

答案 0 :(得分:5)

<?php
if(isset($_POST)) {
    $date = explode('-', $_POST['month']);
    $year = $date[0];
    $month = $date[1];
    echo "Year: ".$year." Month: ".$month;
}
?>

<form action="" method="post">
<select name="month" onchange="this.form.submit()">
<?php
  for ($i = 0; $i <= 12; ++$i) {
    $time = strtotime(sprintf('+%d months', $i));
    $value = date('Y-m', $time);
    $label = date('F Y', $time);
    printf('<option value="%s">%s</option>', $value, $label);
  }
  ?>
</select>

这使我将年份和月份作为单独的值。

答案 1 :(得分:0)

我必须检查第一个脚本中的打印件,因为它没有多大意义......

<form action="" method="post">
      <select name="month" onchange="this.form.submit()">
        <option value="">-- Select Month --</option>
                  <option value="11" 
           >
          November 2014                   <option value="12" 
           >
          December 2014                   <option value="01" 
           >
          January 2015                   <option value="02" 
           >
          February 2015                   <option value="03" 
           >
          March 2015                   <option value="04" 
           >
          April 2015                   <option value="05" 
           >
           May 2015                   <option value="06" 
           >
          June 2015                   <option value="07" 
               >
          July 2015                   <option value="08" 
           >
          August 2015                   <option value="09" 
           >
          September 2015                   <option value="10" 
           >
          October 2015               </select>
    </form> 

我可能会遗漏一些东西,因为它似乎有用,但似乎你没有关闭选项标签。你这样做:

<option value="11">November 2014
<option value="12">December 2014

而不是:

<option value="11">November 2014</option>
<option value="12">November 2014</option>

这似乎不是问题,至少不是在chrome中,因为当我检查发送的头数据时,它很好:

month: 11

当您发送变量时会发生什么,无论您使用POST方法发送此表单数据的任何页面都必须进一步处理它。在PHP中,你使用全局变量$_POST,在这种情况下$ _POST ['month']。

if(!empty($_POST['month']))
{
    echo $_POST['month'];
}

如果要将其作为会话变量,则发送表单数据的页面必须与浏览器通信才能设置(通过回复HTTP标头字段)。要在PHP中执行与会话相关的任何事情,您必须首先使用session_start()在针对浏览器发送任何HTML /数据之前启动会话,如果您想使用例如{{{ 3}}。您还获得了session_set_cookie_params,在将任何数据/ HTML发送到浏览器之前也必须使用setcookie,并且可以通过$_COOKIE访问变量。

看看你是否能够理解这一点,我在这种情况下只使用了$ _POST,你可以将它与session或cookie交换,并记得在任何data / html之前将它发送到浏览器。

<?php
$selmonth = 0;
if(!empty($_POST['month']))
{
    $selmonth = $_POST['month'];
}
$month = date('n'); // current month
echo '<form action="" method="post">
<select name="month" onchange="this.form.submit()">
    <option value="">-- Select Month --</option>';
for($i=0; $i<12; $i++)
{
    $monthtime = mktime(0,0,0,$month + $i,1);
    $monthnum = date('m', $monthtime);
    echo '
    <option value="'.$monthnum.'"'.
    ($monthnum == $selmonth ? ' selected="selected"' : '').
    '>'.date('F Y', $monthtime).'</option>';
}
echo '
</select>
</form>';
?>