2013-10-10 2 views
0

Хотя я понимаю, что это не самый эффективный бит кода, он не будет работать в августе или сентябре! Я использую PHP 5.4 и XHTML 1.0 Transitional. Я тестировал его в последних браузерах IE, Firefox и Google. Я проверил код, который отправляется в браузер, и нет ничего особенного в августе или сентябре. Все остальные месяцы работают нормально. Когда пользователь впервые встречается с экраном, сохраненная дата рождения будет извлечена из базы данных и взорвана. Но август и сентябрь не будут выбраны в выпадающем списке (но 08 или 09 будут отображаться на экране на этот бит кода). Если пользователь нажимает на раскрывающийся список (за месяц), выбирает август или сентябрь и нажимает кнопку savebtn, август или сентябрь не будут выбраны в раскрывающемся списке правильно (но 08 или 09 будет отображаться на экране за этот бит кода). О, и когда август или сентябрь должны быть выбраны, выбирается январь. Большое спасибо раньше!С PHP, почему выбранная опция не всегда работает?

// Basically, if the savebtn was clicked: 
$birthmonth = mysqli_real_escape_string($dbc, trim($_POST['birthmonth'])); 
$birthday = mysqli_real_escape_string($dbc, trim($_POST['birthday'])); 
$birthyear = mysqli_real_escape_string($dbc, trim($_POST['birthyear'])); 
$birthdate = $birthyear. '-' . $birthmonth. '-' . $birthday; 
echo '<p>The savebtn was clicked. Birthdate: ' . $birthdate . '</p>'; 
echo '<p>The savebtn was clicked. Birthmonth: ' . $birthmonth . '</p>'; 

// Basically, if the savebtn was NOT clicked 
$birthdate = $row['birthdate']; 
if (!empty($birthdate)) 
list($birthyear, $birthmonth, $birthday) = explode('-', $birthdate); 
echo '<p>The savebtn was NOT clicked. DB birthdate: ' . $birthdate . '</p>'; 
echo '<p>The savebtn was NOT clicked. DB birthmonth: ' . $birthmonth . '</p>'; 

<form name="usersform" id="usersform" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<label for="birthmonth" class="label2">Month:</label> 
<select name="birthmonth" id="birthmonth"> 
<?php 
if (!empty($birthmonth) && ($birthmonth == 01)) 
    echo '<option selected="selected" value="01">January</option>'; 
else 
    echo '<option value="01">January</option>'; 
if (!empty($birthmonth) && ($birthmonth == 02)) 
    echo '<option selected="selected" value="02">February</option>'; 
else 
    echo '<option value="02">February</option>'; 
if (!empty($birthmonth) && ($birthmonth == 03)) 
    echo '<option selected="selected" value="03">March</option>'; 
else 
    echo '<option value="03">March</option>'; 
if (!empty($birthmonth) && ($birthmonth == 04)) 
    echo '<option selected="selected" value="04">April</option>'; 
else 
    echo '<option value="04">April</option>'; 
if (!empty($birthmonth) && ($birthmonth == 05)) 
    echo '<option selected="selected" value="05">May</option>'; 
else 
    echo '<option value="05">May</option>'; 
if (!empty($birthmonth) && ($birthmonth == 06)) 
    echo '<option selected="selected" value="06">June</option>'; 
else 
    echo '<option value="06">June</option>'; 
if (!empty($birthmonth) && ($birthmonth == 07)) 
    echo '<option selected="selected" value="07">July</option>'; 
else 
    echo '<option value="07">July</option>'; 
if (!empty($birthmonth) && ($birthmonth == 08)) 
    echo '<option selected="selected" value="08">August</option>'; 
else 
    echo '<option value="08">August</option>'; 
if (!empty($birthmonth) && ($birthmonth == 09)) 
    echo '<option selected="selected" value="09">September</option>'; 
else 
    echo '<option value="09">September</option>'; 

if (!empty($birthmonth) && ($birthmonth == 10)) 
    echo '<option selected="selected" value="10">October</option>'; 
else 
    echo '<option value="10">October</option>'; 
if (!empty($birthmonth) && ($birthmonth == 11)) 
    echo '<option selected="selected" value="11">November</option>'; 
else 
    echo '<option value="11">November</option>'; 
if (!empty($birthmonth) && ($birthmonth == 12)) 
    echo '<option selected="selected" value="12">December</option>'; 
else 
    echo '<option value="12">December</option>'; 
?> 
</select><br /> 
<input type="submit" class="submitbtn" name="savebtn" id="savebtn" value="Save" /> 

+0

Вы действительно должны смотреть на тройных операторов: http://php.net/manual/en/language.operators.comparison.php –

+0

Да, вы правы. Теперь, когда проблема исправлена, я буду перекодировать ее с помощью тернарных операторов. Благодарю. – user2646006

+0


user2646006

ответ

2

Ведущие 0s на номера делают PHP интерпретировать их как восьмеричное. 08 и 09 не являются действительными восьмеричными числами. Избавьтесь от ведущих нулей.

+0

Да, это исправлено !!! Спасибо Вам большое! – user2646006

+0

Нет проблем. Если ответ вам поможет, вы должны принять или отменить - в зависимости от того, насколько он помогает ;-) – John3136

0

Чтобы привести пример трехкомпонентной я предлагал в комментарии:

echo '<option value="01"'. !empty($birthmonth) && ($birthmonth == 1) ? ' selected="selected"' : '' .'>January</option>'; 

Ваш IDE жалуясь PHP и опционных тегов может быть что-то еще. PHP только вторит тегу опции в браузер и параметр поддержки xhtml transitional, поэтому в базовой конструкции не должно быть проблем. Вы должны опубликовать свой выходной html в своем вопросе для дальнейшей отладки, если он все еще жалуется после того, как эти обновления были применены.

Этот ответ заключается лишь в том, чтобы подробно остановиться на комментарии. Это не должно рассматриваться как официальный ответ, хотя в этом примере также имеется исправление, упомянутое в приложении Джона.

Смежные вопросы