2009-07-30 14 views
0

Ich schrieb einige PHP-Code, mit dem ich eine HTML-Dropdown-Box erstellen kann, und wählen Sie dann, was der ausgewählte Wert sein soll. Der Code ist:Problem mit PHP/HTML-Dropdown-Box-Code (ausgewählten Wert)

$role_drop = "<select name='role'>"; 

$role_drop .= "\r\n<option value='Resident Assistant'>Resident Assistant</option>"; 

$role_drop .= "\r\n<option value='Community Assistant'>Community Assistant</option>"; 

$role_drop .= "\r\n<option value='Head RA'>Head RA</option>"; 

$role_drop .= "\r\n</select>"; 

$result = mysql_query("SELECT role FROM users"); 

if (@mysql_num_rows($result)) { 

     while ([email protected]_fetch_assoc($result)) { 

      $role = $r["role"]; 
      $role_drop = str_replace(">$role</option>", "selected=\"\" >$role</option>",$role_drop); 
      echo $role_drop; 
     } 
} 

In Wirklichkeit dieser Code hat eine Reihe von HTML gemischt, aber hier ist alles von der PHP. Wenn ich es starte, scheint es zu funktionieren. Nehmen wir an, dass die Abfrage 4 Dropdown-Felder mit Rollen (von 4 Benutzern) zurückgegeben hat und ich eine neue Rolle für die zweite Dropdown-Box bearbeiten oder auswählen (mit einer UPDATE-Abfrage) und dann, wenn die Seite alle aktualisiert hat Von den Rollen einschließlich und NACH der Dropdown-Box, die ich aktualisiert habe, werden ihre ausgewählten Werte als die neuen angezeigt, die ich in der zweiten Dropdown-Box ausgewählt habe.

Und es ist nicht so, dass die Werte in der tatsächlichen Datenbank falsch sind, sie zeigen nur den falsch ausgewählten Wert an. Hier ist der Quellcode für die dritte Drop-Down-Box, nachdem ich einen neuen Wert für die zweiten wählen:

<select name="role"> 
     <option selected="" value="Resident Assistant">Resident Assistant</option> 
     <option value="Community Assistant">Community Assistant</option> 
     <option selected="" value="Head RA">Head RA</option> 
</select> 

So scheint es sein den richtigen Wert (Einwohner Assistant) Sie jedoch sein auch die Auswahl von „Kopf RA“ , worauf ich die vorherige Dropdownbox geändert habe.

Es ist sehr seltsam, und ich habe keine Ahnung, warum das passiert. Irgendwelche Ideen?

Danke!

Antwort

1

Es ist, weil Sie jedes Mal aktualisieren $role_drop, so dass alle vorherigen Änderungen in nachfolgenden Dropdown-Menüs angezeigt werden. Ich würde die Schleife zu so etwas wie dies ändern:

if (@mysql_num_rows($result)) { 
    while ([email protected]_fetch_assoc($result)) { 
      $role = $r["role"]; 
      $temp_role_drop = str_replace(">$role</option>", "selected=\"\">$role</option>", $role_drop); 
      echo $temp_role_drop; 
    } 
} 

Auf diese Weise Sie nicht Ihre ursprüngliche Drop-Down-Markup zu überschreiben.

+0

Das hat funktioniert. Sie sind ein Lebensretter. Vielen Dank! – littleK

0

Weiß nicht, ob dies hilft, aber gemäß der HTML-Spezifikation sollten Sie keinen Wert zusammen mit dem SELECTED-Attribut jeder OPTION übergeben. Es ist nur .

+0

@SOF "Es ist nur." - Es ist nur Zeit? Entschuldigung, ich bin mir nicht sicher, was du damit meinst. Sollte ich nur sagen

1

Nüsse - vergessen, meinen Code zu entkommen. Ich meinte: "Es ist nur <OPTION VALUE="foo" SELECTED>".

+0

Sie können den" bearbeiten "Link unter Ihrer vorherigen Antwort verwenden, um diesen zu beheben, und dann löschen Sie diese neue Antwort – Charles

+0

@SOF Danke für die Heads-up auf die Syntax für SELECTED. – littleK

Verwandte Themen