2016-04-04 5 views
1

Ich habe ein Optionsmenü wie folgt:Optionsmenü mit Letzten Eintrag als Standard

<select name="selCycle" id="selCycle" onChange="formFilter.submit()"> 
    <option value="%">all cycles</option> 
    <?php 
    do { 
    ?> 
     <option value="<?php echo $row_Recordset2['Cycle'] ?>" 
     <?php 
     if ($varCycle_DetailRS4 == $row_Recordset2['Cycle']) { 
      echo 'selected'; 
     } elseif ($varCycle2_DetailRS4 == $row_Recordset2['Cycle']) { 
      echo 'selected'; 
     } else { 
      echo ''; 
     } 
     ?> 
     > 
     <?php echo $row_Recordset2['Cycle'] ?> 
     </option> 
     <?php 
    } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); 
     $rows = mysql_num_rows($Recordset2); 
     if ($rows > 0) { 
      mysql_data_seek($Recordset2, 0); 
      $row_Recordset2 = mysql_fetch_assoc($Recordset2); 
    } 
    ?> 
</select> 

Derzeit ist die Standardauswahl Alle Datensätze. Ich mag für den Standard der neueste Satz von Daten, um gleich:

<?php echo $row_RecordsetCycle['Cycle']; ?> 

So Optionsmenü 1,2,3,4,5 mit 5 sind die Standardeinstellung, wenn die Seite geladen Liste würde. Der Benutzer kann dann jede verfügbare Option auswählen. ist auf den letzten Datensatz in der Tabelle mit einem Limit von 1 eingestellt, so dass es immer den letzten Datensatz ausgibt, der das Optionsmenü zusammensetzt.

Hilfe bitte. Was sollte ich bearbeiten, so dass der eine Datensatz in

ist das Standard oder ausgewählte Optionsmenü beim Laden der Seite? Momentan zeigt der Standard nur alle Datensätze an und ist extrem langsam zu laden, weshalb ich den neuesten Datensatz als Standard festlegen möchte.

Antwort

0

Versuchen end() mit der letzten Reihe zu bekommen:

<?php 
$arr =array(1,2,3,4,5); 
$last = end($arr); 
?> 
<select name="selCycle" id="selCycle" onChange="formFilter.submit()"> 
    <option value="%">all cycles</option> 
    <?php foreach($arr as $key=>$val): 
    if(in_array("$last", array($val))==true){ 
     echo '<option value="" selected="selected">'.$val.'</option>'; 
     continue; 
    } 
    echo '<option>'.$val.'</option>';  
endforeach; ?>  
</select> 

Stop-MySQL-Erweiterung verwenden, Verwendung gU oder mysqli. Verwenden Sie Ihre Frage Code, sollte es sein:

$row_Recordset2 = mysql_fetch_assoc($Recordset2); 
$last = end($row_Recordset2); 

foreach($row_Recordset2 as $key=>$val){ 
    //other code 
    if(in_array("$last", array($val))==true){ 
     echo '<option value="" selected="selected">'.$val.'</option>'; 
     continue; 
    } 
    echo '<option>'.$val.'</option>' 
} 

Working Demo

+0

Ich versuchte erfolglos. Ich weiß, dass es kein Array ist, aber nicht wissen, wie Sie Ihren Code verwenden, der auf ein Array verweist. Mein Optionsmenü wird von einer Tabelle gespeist. Hilfe wird geschätzt: user3258571

+0

Ich habe in meinem Beispiel 1,2,3,4,5 verwendet, aber in Wirklichkeit besteht das Optionsmenü aus einer Abfrage SELECT DISTINCT Cycle FROM Zeitplan ORDER BY DATE LIMIT 1. Können Sie bitte ohne Array erklären, mit einem Recordset? – user3258571

+0

Ich habe meine Antwort aktualisiert. Prüfen Sie. –

0

ich Umschreiben dieser einen Stich nahm. (Code am Ende) das erste, was ich tat, war Ihre DO_WHILE Schleife in eine während Schleife drehen, wie ich glaube, es war das Hinzufügen unnötige Verwirrung zu dem Code nach tun, dass ich einig Code bewegte

$rows = mysql_num_rows($Recordset2); 
if ($rows > 0) { 
    mysql_data_seek($Recordset2, 0); 
    $row_Recordset2 = mysql_fetch_assoc($Recordset2); 
} 

über der while-Schleife, wie ich dachte, dass es zu „prime der Pumpe“ der während Schleife

nötig war ich zog auch die

if ($varCycle_DetailRS4 == $row_Recordset2['Cycle']) { 
    return ' selected'; 
} elseif ($varCycle2_DetailRS4 == $row_Recordset2['Cycle']) { 
    return ' selected'; 
} else { 
    return ''; 
} 

heraus in eine Funktion, um den Code weiter

jetzt hier kommen meine Annahmen zu vereinfachen ich davon aus, dass $ varCycle_DetailRS4 der letzte Wert war und dass $ varCycle2_DetailRS4 war die currentlySelected, die bereitgestellt vor dem der Code festgelegt wurde; Wenn dies der Fall ist und $ varCycle2_DetailRS4 wäre nicht gesetzt, wenn es der erste wäre, dann wäre alles was getan werden müsste, um die Option isSelected so zu ändern, dass nur eine Option ausgewählt wird.

<?php 
function isSelect($value) 
{ 
    $lastValue = $varCycle_DetailRS4; 
    $currentlySelected = $varCycle2_DetailRS4; 

    if(isset($currentlySelected)) 
    { 
     $selectValue = $currentlySelected; 
    } 
    else 
    { 
     $selectValue = $lastValue; 
    } 


    if ($selectValue == $value) { 
     return ' selected'; 
    } else { 
     return ''; 
    } 
} 
?> 
<select name="selCycle" id="selCycle" onChange="formFilter.submit()"> 
    <option value="%">all cycles</option> 
    <?php 
    $rows = mysql_num_rows($Recordset2); 
    if ($rows > 0) { 
     mysql_data_seek($Recordset2, 0); 
     $row_Recordset2 = mysql_fetch_assoc($Recordset2); 
    } 
    while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)) 
    { 
     $value = $row_Recordset2['Cycle'] 
     echo "  <option value=\"".$value."\"".isSelect($value).">".$value."</option>/n"; 
    } ; 
    ?> 
</select> 
+0

Ich bekomme einen Syntaxfehler auf: echo "/n"; – user3258571

Verwandte Themen