Dropdown mit Datenbankinhalt füllen

    • WCF 1.1.x

      Dropdown mit Datenbankinhalt füllen

      Guten Abend zusammen,

      im Laufe des Abends ist noch eine Frage aufgetaucht, die ich mit der Suchfunktion nicht beantwort bekomme...


      Ich habe in einem Formular ein Dropdownfeld,
      der Inhalt der Liste existiert als Tabelle (wcf1_partys) in der Datenbank mit [partyID] und [partyname] welche über das ACP gefüllt wird (funktioniert auch).

      Diese Liste, möchte in einem Formular verwenden...

      Wie ich das ins Template einbaue, weiß ich,
      aber wie hole ich mir die Daten (innerhalb meiner Klasse) für das Dropdown?

      Ich habe mir jetzt schon diverse .class Dateien angesehen, aber ich werde nicht ganz schlau draus,
      oder bin inzwischen einfach zu müde... :rolleyes:

      Hat jemand nen Rat?

      Grüße
      Noisemaker
      When nothing goes right..... go left! 8)

      PHP Source Code

      1. // wcf imports
      2. require_once(WCF_DIR.'lib/page/AbstractPage.class.php');
      3. class PartyPage extends AbstractPage {
      4. public $parties = array();
      5. public function readData() {
      6. parent::readData();
      7. $sql = "SELECT *
      8. FROM wcf".WCF_N."_parties";
      9. $result = WCF::getDB()->prepareStatement($sql);
      10. while ($row = WCF::getDB()->fetchArray($result)) {
      11. $this->parties[] = $row;
      12. }
      13. }
      14. public function assignVariables() {
      15. parent::assignVariables();
      16. WCF::getTPL()->assign(array(
      17. 'parties' => $this->partys
      18. ));
      19. }
      20. }


      Smarty-Template

      1. {foreach from=$parties item=party}
      2. {$party[partyID]} = {$party[partyname]}<br />
      3. {/foreach}


      Das obige Template enthält nur den relevanten Ausschnitt, für den genauen Aufbau einer Seite solltest du dir andere Templates anschauen. Ansteuerbar wäre die Seite dann über index.php?page=Party

      PS: Der Plural von "Party" heißt "Parties" und nicht "Partys" ;)
      Alexander Ebert
      Senior Developer WoltLab® GmbH


      Hallöchen,

      ich bin erste heute dazu gekommen weiter dran zu arbeiten...
      Irgendwie ist das noch ein Fehler drin...

      Wenn ich innerhalb der Klasse bei readData() folgendes von Alexander verwende:

      Source Code

      1. $result = WCF::getDB()->prepareStatement($sql);

      kommt eine Fehlermeldung. (genau die o.g. Zeile)

      Source Code

      1. Fatal error: Call to undefined method MySQLDatabase::prepareStatement() in /www/htdocs/w00d7705/wcf/lib/form/CashmanHeaddataForm.class.php on line 33


      Verwende ich statt "prepareStatement" "sendQuery" kommt zwar das dropdown,
      aber es enthält nicht nur die Values aus der Spalte "partyname" sondern auch die IDs -> sieht komisch aus... (siehe Anhang)

      Der entsprechende Template Code für das Feld lautet:

      HTML Source Code

      1. <div class="formElement{if $errorField == 'eventnamearea1'}formError{/if}">
      2. <div class="formFieldLabel">
      3. <label for="eventnamearea1">{lang}wcf.cashman.tab1.field1.eventname{/lang}</label>
      4. </div>
      5. <div class="formField">
      6. {htmlOptions options=$parties selected=$eventnamearea1 name=eventnamearea1 id=eventnamearea1 disableEncoding=true}
      7. </div>
      8. </div>


      Ausserdem hätte ich gerne, dass im DropDown nichts drin steht, wenn nicht etwas ausgewählt wurde.
      Derzeit ist es so, das der erste Wert standardmäßig drin steht.

      Was mache ich denn falsch?

      Greetz Noise
      Images
      • sshot-1.png

        6.86 kB, 358×161, viewed 33 times
      When nothing goes right..... go left! 8)
      Bei WCF 2.0 ist es prepareStatement(), ich habe mich einfach vertan, sendQuery() ist natürlich richtig. Entschuldigung ;)

      Verwende einfach folgendes Konstrukt im Template:

      Smarty-Template

      1. <select name="eventnamearea1">
      2. {foreach from=$parties item=party}
      3. <option value="{@$party[partyID]}"{if $party[partyID] == $eventnamearea1} selected="selected"{/if}>{$party.partyname}</option>
      4. {/foreach}
      5. </select>
      Alexander Ebert
      Senior Developer WoltLab® GmbH