2 select abfragen aus db von einander abhängig php/js

  • Hi Leute,

    Hier ist ein Problem zumindest für mich, das aus JS und PHP besteht.

    Ich bräuchte eure hilfe bei der realisierung 2er voneinander abhängigen select boxen, welche beide aus einer db ausgelesen werden.

    Als beschreibung:

    Ich habe das erste selectfeld wo Hersteller von Fahrzeugen Drinnen sind. DIes wird aus der db ausgelesen:

    Das Funktioniert auch.

    Nun möchte ich, dass ich in einem 2ten Selectfeld alle Modelle Des ersten Selectfeldes aufgeführt werden.

    ZB

    selsect feld 1 = Audi A1 A3 A6 <--- soll dann natürlich im 2ten Selectfeld aufgeführt werden.

    Beide werden aus der selben Tabelle ausgelesen, demnach muss ich das mit where ... steuern das erste wird mit Distinkt abgefragt um doppelte einträge zu vermeiden. Das stellt auch weniger das problem dar, als das JS script richtig einzubauen.

    Evt kann euch das folgende script helfen was mir jmd gegeben hat, welches meiner Ansicht nach nicht umzubauen ist.

    Wie gesagt, ich komme da ohne Eure hilfe nicht weiter, da ich JS unerfahren bin und hoffe, das mir jemand von Euch dabei helfen kann/möchte.

    Ganz liebe grüße Vincita

    Einmal editiert, zuletzt von Vincita (5. Mai 2009 um 15:33) aus folgendem Grund: Unpassende Thread überschrift

  • eigentlich mache ich das ungern beim ersten posting, aber bitte editiere deine überschrift auf etwas, wo man das problem erahnen kann..
    denn hier haben wir auch schon 1000 mal gesagt benutzt bitte aussagekräftige titel und dennoch gibt es user die es weder kapieren, noch kapieren wollen, geschweige denn die foren-regeln lesen...

  • Exportier mal die SQL Tabelle\n und poste Sie hier, damit man dir mal ordentlich helfen kann...

    Also theoretisch kannst du alles per PHP vorladen und dann mit Javascript auswerten, oder du lädst nur die Hersteller und lädst via Ajax nach. (erste Variante währe wohl einfacher und warscheinlich auch performanter, wenn du nicht tausende von Autoklassen hast)

    kurz zu deinem PHP Kram da:
    - deine Variablennamen sind wohl als Rätsel zu verstehen?
    - Ich würde die SQL Tabellennamen und Tabellenfelder alle klein schreiben, dann hat man nicht soviel Probleme durch Groß- und Kleinschreibung.

    Gruß crAzywuLf :D

    Einmal editiert, zuletzt von crAzywuLf (5. Mai 2009 um 17:13)

  • Es geht ja nur darum, das wenn ich nun in dem ersten select feld Audi Auswähle, er in dem 2ten Alle audi varianten anzeigt und nicht die von opel.
    Da an anderer stelle weitere Hersteller eingetragen werden können ist es so unerlässlich diese ebenfalls aus der DB zu entnehmen.

  • Eine einfache Lösung würde ohne JS gehen.

    Du schickst einfach das select mit der Herstellermarke mit submit an dein script. Die somit übergebene Variable, $_POST oder $_GET, kommt dann in deine neue SQL-Abfrage und füllt das nächste select, genau so wie du es vorher schon gemacht hast.
    Und so kann es immer weiter und weiter gehen.

    Das kann natürlich sehr umständlich werden wenn du viele sachen zum auswählen hast. Aber es geht ohne JS, was ich persönlich toll finde.
    Ansonsten musst du das ganze halt einfach per JS umsetzen, da kann ich dir aber leider nicht weiterhelfen. Habe da leider keine Anhnung von.

  • des problem hatte ich auchmal. habs dann so gelöst

    javascript:

    HTML
    <script type="text/javascript">
                function haupt_a(wert){
                    document.getElementById('id_ah').value = wert;
                    document.getElementById('id_au').value = "";
                }
                function unter_a(wert){
                    document.getElementById('id_au').value = wert;
                }
            </script>

    php auswahlmenü

    ganz oben musst dann die werte, die übergeben werden wieder abfangen

    PHP
    $id_haupt = $_POST['id_ah'];

    und zum schluss die "zwischenspeicherung"

    PHP
    echo "<input type=\"hidden\" value=\"".$id_haupt."\" name=\"id_ah\" id=\"id_ah\" />";

    das ganze in worten...
    du klickst in der auswahlliste einen punkt an (wird mit db gefüllt),
    des klick löst erst eine js-aktion oben aus welche die id des wertes
    übergibt und in die input-box unten reinschreibt. anschließend kommt
    gleich ein submit der praktisch die gleiche seite wieder aufruft, und
    dabei den entsprechenden wert übergibt.

    btw. die zwischenspeicherung könnte evtl wegfallen (damit also
    die inputbox und des javascript), wenn du die id direkt übergibst.
    ich musste des aber so lösen, da ich 5 selectboxen habe...

    edit:
    das ganze muss natürlich in ein formular

    HTML
    <form name="artikel" action="index.php?page=artikel" method="post"></form>
  • Selbst bei 5 selectboxen kann das wegfallen.
    Über eine ausreichende beschriftung und eine php-ausleseung kann man das schon machen.

  • Selbst bei 5 selectboxen kann das wegfallen.
    Über eine ausreichende beschriftung und eine php-ausleseung kann man das schon machen.


    Man sollte mittels php eine noscript-Weiche stellen. Trotzdem ist es sehr gut das generell über JavaScript (noch besser Ajax) zu realisieren, da es besonders bei hochfrequentierten komplexeren Seiten sehr performancelastig sein kann für jede Auswahl die ganze Seite neu zu laden. Bei 5 Auswahlen würde mich als User das schon ganz schön ankotzen wenn die Seite nicht extrem schnell läd.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • also mit id und übergabewerten hatte ich es am anfang, allerdings
    is des ziemlich zum kotzen wennst irgendwann haufenweise abfragen
    hast. deshalb die post methode. läuft eigentlich ziemlich gut... also ich
    bin zufrieden damit... :)

  • SinnlosS: das noscript kann man doch auch schon per html machen?!


    Ja natürlich, per html stellt man eine noscript-Weiche die das ganze über PHP löst. Aber eben nur wenn javascript deaktiviert ist.
    Sonst ist eben eine entsprechende Lösung mit javascript/ajax sehr viel performance-freundlicher.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • @ thilda

    wollt ich damals. aber ich wusste nicht, wie ich in ne select-box 2 werte schreiben
    kann bzw ob des überhaupt möglich is. brauch ja für die anzeige die bezeichnung,
    aber zum weiterarbeiten die id.