我有一段代码,可以生成一个时间为上午8:00至下午6:00的选择下拉列表。选择一个选项并保存表单后,时间将正确保存在数据库中。然而,我无法自动检索时间。这是我迄今为止的代码:
<select value="<?php echo $starttime; ?>" name="data[InvoiceTime][<?php echo $key;?>][starttime]" id="starttime_<?php echo $key+1?>" class="form-control" autocomplete="off">
<?php
$time = mktime(0, 0, 0, 1, 1);
for ($i = 28800; $i < 42600; $i += 900) { // 1800 = half hour, 86400 = one day
printf('<option value="%1$sam">%1$sam</option>',
date('g:i', $time + $i), date('g:i a', $time + $i + 1800));
}
for ($i = 43200; $i < 65000; $i += 900) { // 12pm-6pm
printf('<option value="%1$spm">%1$spm</option>',
date('g:i', $time + $i), date('g:i a', $time + $i + 1800));
}
?>
</select>
Desired output : select "9:00am" and save form 9:00am is saved to db(which happens) reload form 9:00 appears preselected due to data saved in db
Actual output : select "9:00am" and save form 9:00am is saved to db reload form 8:00am appears(default value)
以下代码有效,但不生成选项值:
<select value="<?php echo $starttime; ?>" name="data[InvoiceTime][<?php echo $key;?>][starttime]" id="starttime_<?php echo $key+1?>" class="form-control" autocomplete="off">
<option value="8:00am" <?= ($item['starttime']) == '8:00am' ? 'selected' : '' ?>>8:00am</option>
<option value="9:00am" <?= ($item['starttime']) == '9:00am' ? 'selected' : '' ?>>9:00am</option>
</select>
您只需要将对值的检查转移到现有代码中。
然而,我已经简化了您的代码相当多;我不确定你想用printf()
语句实现什么。gmdate()
很乐意只使用几秒钟(你不想使用date()
,因为根据你当前的时区,它可能会产生意想不到的结果。)如果<option>
元素没有value
属性,则会使用内容,所以我删除了它。你应该始终将PHP与HTML分离(理想情况下比我在这里做的更多,但这只是一个开始。)
如果您不熟悉它们,这里有一些关于三元语句和heredoc块的信息。
<?php
$start = 28800;
$stop = 65000;
$interval = 900;
$options = "";
for ($seconds = $start; $seconds <= $stop; $seconds += $interval) {
$time = gmdate("g:ia", $seconds);
$selected = ($item["starttime"] === $time) ? " selected" : "";
$options .= sprintf("<option %s>%s</option>", $selected, $time);
}
echo <<< HTML
<select value="$starttime" name="data[InvoiceTime][$key][starttime]" id="starttime_$key" class="form-control" autocomplete="off">
$options
</select>
HTML;