2014-11-17 3 views
1

Я пытаюсь создать два спуска с HTML и PHP. Первый - это автоматический ответ, который отправляет месяц переменной сеанса:Populate drop down form with months and year 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).

+0

вы не сможете показать второй выпадающий список динамически на основе пользовательского ввода без автозаполнения либо массивов, прежде чем страница будет отправлена, а затем с помощью JS, чтобы показать выбранный год или делают это путем отправки формы, чтобы получить год. – Billy

ответ

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> 

Это, кажется, не будет проблемой, хотя, по крайней мере, не в хроме, потому что, когда я проверил данные головы направляются, это было просто отлично:

month: 11 

что происходит, когда вы отправляете в переменной является то, что независимо от страницы, которую вы отправить эту форму данные с POST метода против будет обрабатывать его дальше. В PHP вы делаете это с глобальной переменной $_POST, в этом случае $ _POST ['month'].

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

Если вы хотите, чтобы сделать его переменной сеанса, страница, которую вы отправить данные формы должны будут взаимодействовать с вашим браузером, чтобы установить это (через поле заголовка HTTP-ответа). Чтобы сделать что-либо, связанное с сеансом в PHP, вы должны сначала начать сеанс, используя session_start(), прежде чем любой HTML/данные будут отправлены против браузера, и то же самое произойдет, если вы хотите установить переменную сеанса, используя, например, session_set_cookie_params. Вы также получили setcookie, который также должен использоваться до отправки любых данных/HTML в браузер, и к ним можно получить доступ через $_COOKIE.

Посмотрите, можете ли вы это сделать, я просто использовал $ _POST в этом случае, вы можете обменять его сеансом или файлом cookie и не забудьте отправить его перед любыми данными/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>'; 
?> 
+0

Это отправляет месяц через почту, но как я могу определить, в каком году и отправить это сообщение тоже? –

+1

Есть много вещей, которые вы можете сделать, например, просто дайте отметку времени, которая будет соответствовать этому месяцу и году. или просто отформатируйте его на что-то вроде «11,2014». –

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

Очень полезно, спасибо. Недостающий конец тег, хотя :) – Collins