2016-05-05 5 views
1

Ich habe Code, der eine Auswahl Dropdown mit Zeiten von 8:00 am-6:00pm generiert. Nach dem Auswählen einer Option und dem Speichern des Formulars werden die Zeiten ordnungsgemäß in der Datenbank gespeichert. JEDOCH kann ich die Zeiten nicht automatisch abrufen. Dies ist mein Code so weit:Generierte Option wählt Zeit wird nicht richtig gespeichert

<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) 

Der folgende Code funktioniert, aber nicht erzeugt die Optionswerte:

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

Antwort

0

Sie nur benötigt, um Ihre Check für den Wert in den vorhandenen Code zu bewegen.

Allerdings habe ich Ihren Code ziemlich vereinfacht; Ich bin nicht sicher, was Sie mit Ihren printf() Aussagen erreichen wollten. gmdate() ist happy to work with just seconds (Sie möchten nicht date() verwenden, da es unerwartete Ergebnisse basierend auf Ihrer aktuellen Zeitzone liefern kann.) Wenn ein <option> Element kein value Attribut hat, werden die Inhalte stattdessen verwendet, also habe ich entfernt es. Sie sollten immer Ihre PHP von Ihrem HTML trennen (idealerweise mehr als ich hier getan habe, aber das ist ein Anfang.)

Und falls Sie nicht mit ihnen vertraut sind, hier ist ein paar Informationen über die ternary statement und heredoc 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; 
Verwandte Themen