我有一个表单,用于将用户信息提取到$ row变量中,因此如果数据库中存在该行,则填充表单,但是如果用户在其他地方出错,则通过$ _POST全局变量保存任何新输入表格。一切都很好。
<label for="qualification2">Grade:</label>
<input type="text" name="qualification2" id="grade2" class="form-control"
value="<?php if(isset($_POST['qualification2'])) {
echo $_POST['qualification2'];
} else { echo ($row ['qualification2']); } ?>">
我想使用选择下拉框执行类似操作,但代码似乎与下拉框的工作方式相同,我不知道我做错了什么,或者这是否可行。
我也试过来自$ row变量的回声,但这不起作用
<?php if($row['qualMonth2'] == 'February') { echo ' selected'; } ?>
这是我的代码:
<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month">
<option value="January" <?php if(isset($_POST['qualMonth2']) == 'January') { echo ' selected'; } ?>>January</option>
<option value="February" <?php if(isset($_POST['qualMonth2']) == 'February') { echo ' selected'; } ?>>February</option>
<option value="March" <?php if(isset($_POST['qualMonth2']) == 'March') { echo ' selected'; } ?>>March</option>
<option value="April" <?php if(isset($_POST['qualMonth2']) == 'April') { echo ' selected'; } ?>>April</option>
<option value="May" <?php if(isset($_POST['qualMonth2']) == 'May') { echo ' selected'; } ?>>May</option>
<option value="June" <?php if(isset($_POST['qualMonth2']) == 'June') { echo ' selected'; } ?>>June</option>
<option value="July" <?php if(isset($_POST['qualMonth2']) == 'July') { echo ' selected'; } ?>>July</option>
<option value="August" <?php if(isset($_POST['qualMonth2']) == 'August') { echo ' selected'; } ?>>August</option>
<option value="September" <?php if(isset($_POST['qualMonth2']) == 'September') { echo ' selected'; } ?>>September</option>
<option value="October" <?php if(isset($_POST['qualMonth2']) == 'October') { echo ' selected'; } ?>>October</option>
<option value="November" <?php if(isset($_POST['qualMonth2']) == 'November') { echo ' selected'; } ?>>November</option>
<option value="December" <?php if(isset($_POST['qualMonth2']) == 'December') { echo ' selected'; } ?>>December</option>
</select>
答案 0 :(得分:1)
isset
根据是否设置变量验证为true还是false。您无法使用isset检查值。
使用小实用程序功能检查条件:
function checkSelected($value) {
if(isset($_POST['qualMonth2']) && $_POST['qualMonth2'] == $value) {
return true;
} else {
return false;
}
}
你的选择元素应该是:
<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month">
<option value="January" <?php echo checkSelected('January') ? 'selected':'' ?>>January</option>
<option value="February" <?php echo checkSelected('February') ? 'selected':'' ?>>February</option>
<option value="March" <?php echo checkSelected('March') ? 'selected':'' ?>>March</option>
<option value="April" <?php echo checkSelected('April') ? 'selected':'' ?>>April</option>
<option value="May" <?php echo checkSelected('May') ? 'selected':'' ?>>May</option>
<option value="June" <?php echo checkSelected('June') ? 'selected':'' ?>>June</option>
<option value="July" <?php echo checkSelected('July') ? 'selected':'' ?>>July</option>
<option value="August" <?php echo checkSelected('August') ? 'selected':'' ?>>August</option>
<option value="September" <?php echo checkSelected('September') ? 'selected':'' ?>>September</option>
<option value="October" <?php echo checkSelected('October') ? 'selected':'' ?>>October</option>
<option value="November" <?php echo checkSelected('November') ? 'selected':'' ?>>November</option>
<option value="December" <?php echo checkSelected('December') ? 'selected':'' ?>>December</option>
</select>
答案 1 :(得分:0)
让我们看看你写的是什么..
<option value="February" <?php if(isset($_POST['qualMonth2']) == 'February') { echo ' selected'; } ?>>February</option>
您所说的是..如果为qualMonth2
设置了值(true / false),请将其与字符串进行比较..
所以你要比较真实的||对字符串的错误。
isset($_POST['qualMonth2'])
返回true // false。
所以没有人会被选中。
重构它..
<?php
$month = "";
if(isset($_POST['qualification2'])){
$month = $_POST['qualification2'];
}
?>
然后使用$month
作为比较值。
<option value="July" <?php if($month == 'July') { echo ' selected'; } ?>>July</option>
答案 2 :(得分:0)
我更喜欢在Javascript中执行这些检查(我更喜欢JQuery),我认为它会清理代码,但您也可以通过使用生成月份的循环来大大简化这一过程。
循环播放1-12以获得输出
<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month">
<?php
for($i=1; $i<=12; $i++) {
$dateObj = DateTime::createFromFormat('!m', $i);
$monthName = $dateObj->format('F');
echo "<value>" . $monthName . "</option>";
}
?>
</select>
这种方法采用DRY(不重复)方法。如果您需要修改某些内容,则只需要修改1行代码而不是12行。
选择值的Jquery (如果未设置$ _POST [&#39; qualMonth2&#39;],则默认为1月):
<script>
$('#qualMonth2').val("<?php echo (isset($_POST['qualMonth2'])) ? $_POST['qualMonth2'] : 'January' ?>");
</script>
从这个答案中拿出你的意思,我只是向你展示了两种可能性,你可以通过在循环中添加一个检查来避免Javascript。