生成的选项选择时间未正确保存


Generated option select time does not save properly

我有一段代码,可以生成一个时间为上午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;