phpbar.de logo

Mailinglisten-Archive

[php] AW: [php] Daten in ListBox uebergeben

[php] AW: [php] Daten in ListBox uebergeben

Andreas Braukmann braukmann_(at)_tse-online.de
Wed, 9 Feb 2000 14:33:36 +0100


Hallo,

On Wed, Feb 09, 2000 at 01:25:24PM +0100, Wolfgang Steinhauer wrote:
> > > Wie kann ich, z.B. eine Liste mit Kategoreien, in eine Listbox uebergeben,
> > > um eine vernuenftige Auswahl zu realisieren ?
> > Schleife machen, die
> > die einzelnen Elemente in die Listbox reinschmeisst?
> > (Wie das geht weisst du?)
> Eben nicht, - stehe einfach daneben weil alle Versuche fehlschlagen.
> Koennte mir jemand mal ein Code-Snipsel schicken ?
na gut. ;) ... aber ich greife fuer solche Dinge eigentlich immer
auf die Datenbank-Abstraktionen der phplib und die oohform-Klassen
zurueck. (Sonst ist mir das einfach zuviel Handarbeit)

> Irgendwer in dieser Liste hat so etwas schon mal gemacht und dann
> in der ListBox selectierte Felder nmit einem Button geloescht. 
... ohne die Seite neu zu laden? ... Das ist 'harter'
Javascript-Einsatz. ... schudder, ... ne ne. Sowas mach ich nicht.

> Ich brauche aber nur die Funktion, um Daten aus einem Table
> in solch eine ListBox zu bekommen, um von dort aus den User
> auswaehlen zu lassen, welche Kategorie er sehen moechte....
ok.

Dann will ich mal losschnippseln.
Die DB-Klassen der phplib sind wirklich nett. Also:

<?php
require( "db_mysql.inc" );      // wir arbeiten mit mySQL

// dann implementieren wir eine nette Unterklasse, die
// ueber unsere Datenbank alles notwendige weiss.
// (das macht man mit der phplib immer so ...)

class simslDB   extends DB_Sql
{
    var $Host = 'deinDatenbankhost';
    var $Database = 'deineDatenbank';
    var $User = 'deinDBUser';
    var $Password = 'deinDBPasswort';

    function makeOptionArray( 
        $sql,           // SQL-Statement zum Lesen der Optionen
        $calValue,      // Spaltenname fuer den 'value' der Optionen
        $colOption,     // Spaltenname fuer die 'option' der Optionen
        $nothingEntry = false,  // soll eine Default-Auswahl am Anfang
                                // der Auswahlliste auftauchen?
        $nothingValue = "0",    // Default-Defaultwert
        $nothingOption = "-- unbestimmt --" // Default-Defaultoption
        )
    {
        $theOptions = array();

        $dbres = $this->query( $sql );

        if( $nothingEntry ){
            $theOptions[] = array( "value" => "$nothingValue",
                                   "label" => "$nothingOption" );
        }

        while( $this->next_record() ){
            $theOptions[] = array( "value" => $this->f( $colValue ),
                                   "label" => $this->f( $colOption ) );
        }

        return $theOptions;

    }   // makeOptionArray

}   // class simslDB


An anderer Stelle reicht mir dann durch die Benutzung der
oohForm-Klassen folgender Code fuer eine DB-basierte Auswahlliste:

class simslSearch
{
    [ ... ]
    
    var $sf;        // ein Formularobjekt
    var $db;        // meine Datenbank-Objekt, ... wird an passender
                    // Stelle initialisiert ...
    
    function buildForm()
    {
        $this->sf = new form;

        // ... so fuegt man einem OOHFormular ein neues Element
        // hinzu ...

        // erzeuge eine Dropdown-Auswahlliste aller Orte
        $this->sf->add_element(
            array(
                "name" => "sf_ort",     // Name des Form-Elements
                "type" => "select",     // ein Auswahl-Element
                                        // Dropdown oder Listbox
                "size" => "1",          // aha, das wird eine Dropdown-Liste
                "options" =>
                    $this->db->makeOptionArray(
                        "SELECT DISTINCT ortId, ortName 
                         FROM smlOrte ORDER BY ortname",
                        "ortId", "ortName", "true",
                        "0", "-- ganzes Muensterland --" ),
                "value" => $this->getFromSession( "sf_ort" ) ) );
        [ ... ]


    }   // buildForm


    [ ... ]


    function showForm()
    {
        [ ...]

        $this->sf->show_element( "sf_ort" );

        [ ...]
    }   // showForm

}   // class simslSearch

Der erzeugte HTML-Code fuer die Dropdown-Liste sieht dann ca. so aus:

<select name="sf_ort" size="1">
    <option value="0">-- Münsterland --
    <option value="1">Ahaus-Graes
    <option value="2">Altenberge
    <option value="3">Beelen
    <option value="4">Billerbeck
    <option value="5">Billerbeck-Beerlage
    <option value="6">Borken
</select>

Das war jetzt ziemlich radikal zusammengeschnippselt und die Verwendung
diverser 'Dritt-Bibliotheken' (eigentlich ist es ja nur die phplib) mag
auf den ersten Blick abschrecken, ... aber meiner Erfahrung nach lohnt
sich die Einarbeitung, ... 

> Aber ich komme nicht drauf wie das geht, obwohl es wahrscheinlich
> wieder ganz einfach zu realisieren ist....
stimmt. ;)

Selbst, wenn Du es ganz 'manuell' zusammenbaust, musst Du doch
eigentlich nur darauf achten, dass Du die Datenbank-Daten an die
richtige Stelle des erzeugten HTML-Codes einsetzt.
Wie HTML-Code fuer ein 'select'-Element aussehen kann, siehst Du ja
oben. 
So wie meine Methode 'makeOptionArray' das Array mit den
'value'/'label'-Paaren aufbaut, koennte Deine Funktion auch direkt das
passende HTML erzeugen ...



-Andreas

-- 
: Anti-Spam Petition:     http://www.politik-digital.de/spam/          :
: PGP-Key:                http://www.tse-online.de/~ab/public-key      :
: Key fingerprint:  12 13 EF BC 22 DD F4 B6  3C 25 C9 06 DC D3 45 9B   :


php::bar PHP Wiki   -   Listenarchive