2009-07-26 2 views
1

Ich habe eine Dropdown-Box, die ich mit PHP erstellen. Hier ist der Code:PHP Set ausgewählten Wert der Dropdown-Box

$region_result = mysql_query("SELECT * FROM region ORDER BY region");  

$dropdown = "<select name='region'>"; 
while($row = mysql_fetch_assoc($region_result)) { 
    $rid = $row["id"]; 
    $region = $row["region"]; 

    $dropdown .= "\r\n<option value='{$row['rid']}'>{$region}</option>"; 
} 
$dropdown .= "\r\n</select>"; 

Ich brauche den ausgewählten Wert der Dropdown-Box gesetzt, nachdem der obige Code verarbeitet wird. Gibt es einen einfachen Weg, dies zu tun?

Hat jemand irgendwelche Vorschläge? Vielen Dank!

EDIT:

Vielen Dank für Ihre Antworten. Lass mich erklären, was ich tue. Ich habe eine "Benutzer bearbeiten" -Seite eingerichtet, auf der Sie nach einem Benutzer anhand mehrerer Kriterien suchen können. Anschließend werden die Ergebnisse in einem "Bearbeitungsmodus" aufgelistet, dh in Textfeldern und Dropdown-Feldern. So können Sie einen Benutzer bearbeiten und aktualisieren. Für zwei Benutzerfelder muss ich die Daten in Dropdown-Boxen auflisten (um die Datenintegrität und -bedingungen zu gewährleisten). Daher möchte ich die Dropdown-Felder mit allen möglichen Werten anzeigen, die Sie ändern können, mit der Ausnahme, dass der ausgewählte Wert des Dropdown-Menüs dem aktuell mit dem Benutzer verknüpften Wert entspricht.

So konnte ich das mit decezes Vorschlag arbeiten - In meiner while-Schleife, die meine PHP-Werte mit den Datenbankergebnissen setzt, habe ich eine verschachtelte while-Schleife eingefügt, die $ dropdown erzeugt, und zwar in diesem , eine verschachtelte if-Schleife. Ich bin nicht verrückt nach all diesen verschachtelten Loops. Hier ist das Code-Segment für die:

if (@mysql_num_rows($result)) { 
     while ([email protected]_fetch_assoc($result)) {  
      $fname = $r["fname"]; 
      $lname = $r["lname"]; 
      $region = $r["region"]; 
      $role = $r["role"]; 
      $extension = $r["extension"]; 
      $username = $r["username"]; 
      $building = $r["building"]; 
      $room = $r["room"];?> 

      <?php 
      $dropdown = "<select name='region'>"; 
      while($row = mysql_fetch_assoc($region_result)) { 
       $rid = $row["id"]; 
       $region2 = $row["region"]; 

       if($region == $region2){ 
        $dropdown .= "\r\n<option selected='selected' value='{$row['rid']}'>{$region}</option>"; 
       }else{ 
        $dropdown .= "\r\n<option value='{$row['rid']}'>{$region2}</option>"; 
       } 
      } 
      $dropdown .= "\r\n</select>"; 
      ?> 

jedoch Ich erwäge dies das Ersetzen von Text zu ändern (vorgeschlagen von soulscratch und zombat), wie ich denke, es wäre besser, auf der Leistung.

... Dies scheint nicht zu funktionieren, wenn mehr als ein Ergebnissatz die Suchkriterien erfüllt (obwohl die Dropdown-Felder für das 2. und 3. usw. leer sind).

Was denkst du?

+2

Sie müssten die Zeichenfolge analysieren und den richtigen Wert = "" mit Regex finden. Warum kannst du das nicht vor der Verarbeitung machen? –

+0

Danke für Ihre Hilfe, bitte sehen Sie meine Edit. – littleK

+0

Ich lief in ein ähnliches Problem vor kurzem http://stackoverflow.com/questions/8856207/creating-a-select-menu-in-php-with-default-selected-from-mysql-db/8856255# 8856255 – Ethan

Antwort

7

Mit der Art und Weise der Zeichenfolge aufgebaut ist, ist es eine ziemlich einfache str_replace(), was schön ist, wie es den Aufwand benötigen, um reguläre Ausdrücke spart:

$dropdown = str_replace("value='".$rid."'","value='".$rid."' selected=\"selected\"",$dropdown); 
+0

Zombat- Das ist nicht das, was ich zur Zeit umgesetzt haben (siehe meine Bearbeiten) , aber ich denke darüber nach, meine Implementierung zu Ihrem Vorschlag zu ändern ... – littleK

+1

In seiner Verteidigung ist dies _exactly_, nach dem Sie gefragt haben ... eine Möglichkeit, dies nach der Schleife zu tun. – jason

+0

Habe diesen Weg funktioniert. Viel besser. Vielen Dank! – littleK

1

Wenn Sie Ihre assemblierten HTML nach der Tatsache ändern möchten Sie müssen komplizierte string ersetzen Methoden oder Javascript, von denen keine eine gute Wahl ist.

Die beste Option, die Sie haben, wäre, Ihr Programm neu zu strukturieren, so dass Sie das selected Attribut festlegen können, wenn Sie die Schleife das erste Mal durchlaufen.

+0

vielen Dank, konnte ich meinen Code restrukturieren, aber ich weiß, mehrere Ebenen von verschachtelten Schleifen haben ... (siehe Edit) – littleK

0

Sie können es in $ _REQUEST finden [ ‚region‘]

0

Ich wette, Sie werden wieder auf dieses Problem stoßen, was bedeutet, dass es sich lohnen würde, eine flexiblere Lösung zu finden. Hier ist eine Idee zu diesem Zweck:

Verwenden Sie zuerst ein Array, um Optionen für Ihre Dropdown-Liste zu halten.Wenn Sie mehrere ausgewählte Elemente mit den gleichen Optionen benötigen, erhalten Sie kostenlos und das Array wiederverwenden:

$options = array(); 
while ($row = mysql_fetch_assoc($region_result)) { 
    $options[$row['id']] = $row['region']; 
} 

Dann können Sie diese in eine Funktion füttern, die eine Auswahlsteuerung erzeugt:

function getSelect ($name, $options, $current) 
{ 
    $markup = '<select name="' . htmlspecialchars($name) . '">'; 
    foreach ($options as $value => $label) 
    { 
    $selected = ($value == $current) ? ' selected="selected"' : ''; 
    $markup .= sprintf(
     "<option value=\"%s\"%s>%s</option>\r\n", 
     htmlspecialchars($value), 
     $selected, 
     htmlspecialchars($label) 
    ); 
    } 
    $markup .= '</select>'; 
    return $markup; 
} 

(Sie können auch ein oder mehrere optionale Parameter fügen Sie die id, class zu setzen, etc.)

auch Sie erwähnten Sie wurden unter Berücksichtigung Methoden Schalt wegen der Geschwindigkeit, aber es ist sehr unwahrscheinlich, dass dies die Zeit und Ort sich Sorgen machen über pero Rance. Konzentrieren Sie sich jetzt auf wartbaren Code, und alle späteren Optimierungen der Performance werden einfacher und effektiver.

+0

hey danke dafür. Wie machst du die Option Werte um 1 und nicht 0 zu starten? – Jonathan

+0

@Jonny: Ich bin mir nicht sicher, was du meinst. Die Werte kommen aus der ID-Spalte Ihrer Datenbanktabelle, richtig? – grossvogel

Verwandte Themen