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

时间:2016-05-05 17:34:09

标签: php

我的代码会生成一个选择下拉菜单,时间是从上午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>

1 个答案:

答案 0 :(得分:0)

您只需将检查值移到现有代码中。

但是,我已经简化了你的代码;我不确定你用printf()语句想要完成什么。 gmdate()happy to work with just seconds(您不希望使用date(),因为它可能会根据您当前的时区产生意外结果。)如果<option>元素没有有value属性,而是使用内容,所以我删除了它。你应该总是将你的PHP与HTML分开(理想情况下,这比我在这里完成的要多,但这是一个开始。)

如果您不熟悉它们,请参阅ternary statementheredoc blocks上的一些信息。

<?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;