使用PHP,为什么选择的选项并不总是有效?

时间:2013-10-10 01:01:12

标签: php html forms option selected

虽然我意识到这不是最有效的代码,但它不适用于8月或9月!我正在使用PHP 5.4和XHTML 1.0 Transitional。     我在持续的IE,Firefox和谷歌浏览器中进行了测试。我检查了发送到浏览器的代码,8月或9月没有任何不同。所有其他月份工作正常。     当用户第一次遇到屏幕时,将从数据库中提取存储的出生月份并进行爆炸。但是下拉列表中不会选择8月和9月(但是每个代码位都会在屏幕上显示08或09)。     如果用户单击下拉列表(月份),选择8月或9月并单击savebtn,则8月或9月将不会在下拉列表中正确选择(但08或09将回显到屏幕上)一点代码)。   哦,当选择8月或9月时,选择1月。 非常感谢你提前!

// 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" />

2 个答案:

答案 0 :(得分:2)

数字前导0使PHP将它们解释为八进制。 08和09不是有效的八进制数。摆脱领先的零。

答案 1 :(得分:0)

提供我在评论中建议的三元组的一个例子:

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

您的IDE抱怨PHP和选项标签可能是另一回事。 PHP只回显浏览器的选项标签和xhtml过渡支持选项,因此在基本结构中应该没有问题。如果在应用这些更新后仍然抱怨,您应该在您的问题中发布输出html以进行进一步的调试。

这个答案只是为了详细说明评论。它不应被视为官方答案,尽管该例子也有约翰所提到的修正。