ChainedSelectors

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ChainedSelectors

    Hi,

    ich habe mir auf zend.com das Script für chainedSelectors angesehen und an meine Datenbank bzw. meine Seite angepasst.
    Das Script dient dazu, den Inhalt eines (zweiten) Selectfeldes von der Auswahl des ersten Selectfeldes abhängig auszugeben. Dies funktioniert auch wunderbar, allerdings hat das Script einen kleinen Schönheitsfehler. Das zweite Selectfeld enthält soviele Einträge, wie passende Datensätze in der Datenbank vorhanden sind. Leider geht es dabei von der Auswahl aus, die die meisten Datensätze hat.

    Beispiel:
    Wenn in Selectfeld 1 zwischen "HerstellerA", "HerstellerB" und "HerstellerC" ausgewählt werden kann, checkt das Script welcher Hersteller die meisten Modelle besitzt. Wählt man nun den Hersteller mit den meisten Modellen aus, werden die beiden Selectboxen einwandfrei gefüllt. Wählt man jedoch einen Hersteller mit weniger Modellen, so werden die restlichen Selectauswahlmöglichkeiten mit leeren Feldern gefüllt.

    http://www.zend.com/zend/tut/drop-down.php

    Ich möchte, dass nur soviele Auswahlmöglichkeiten angezeigt werden, wie es Modelle gibt. Kann mir jemand sagen, wie ich das realisieren kann?

    Tut mir Leid, wenn der Eintrag etwas verwirrend geschrieben ist, aber ich wusste nicht, wie ich das Problem beschreiben soll. Vielleicht schaut ihr euch das Script am Besten selber mal an. Der ein oder andere kennt es ja vielleicht sogar.
    Das Genie überblickt das Chaos!

    Wer Rechtschreibfehler findet, darf sie behalten!

  • #2
    Bevor ich mich da einlese, gehe ich davon aus, dass das Script so läuft, wie es bei Zend steht. Falls nicht, findest du dazu vllt. etwas in der Diskussion darunter.

    Der Fehler entstand höchstwahrscheinlich bei deinen Anpassungen, sei es nur, daß du leere Auswahlmöglichkeiten mit ausgibst, statt sie als solche zu erkennen.

    Kommentar


    • #3
      Also bevor ich irgendetwas an dem Script angepasst habe, habe ich die Dateien mit dem Original-Quellcode von Zend erstellt. Auch die Datenbank habe ich mir zum Testen auf meinen Server importiert. Danach hab ich das Script dann im Original getestet, doch auch hier trat der Fehler auf.

      Das Problem haben wohl auch andere, denn in die Diskussion hab ich auch reingeschaut, allerdings hat dort niemand eine Antwort bekommen, zumindest keine, die bei der Lösung des Problems half.

      Wie bereits erwähnt, habe ich auch keinen Fehler bei den Anpassungen gemacht, da im Original-Script das gleiche Problem auftrat.
      Das Genie überblickt das Chaos!

      Wer Rechtschreibfehler findet, darf sie behalten!

      Kommentar


      • #4
        na, das durchlesen will wohl wirklich keiner... erst recht nicht, wenn nicht der kleinste ansatz deinerseits kommt...

        aber (quick & dirty):

        mache die stelle ausfindig, an der die optionen der zweiten selectbox ausgeben werden und füge ne if ein, die dafür sorgt, dass nur volle felder angezeigt werden.

        haste mal error_reporting angeschaltet? E_ALL?

        ansonsten poste halt mal die ausgabestelle, damit wir uns ein bild machen können.

        Kommentar


        • #5
          Hallo TobiaZ, dein Vorschlag ist gar nicht so schlecht. Ich hab deshalb mal versucht nur volle Felder anzuzeigen, das funktioniert aber nicht.

          Ich hab mir dann mal die Ausgabe angesehen und das Problem erkannt.

          // clear areacode
          for(index=0; index < 99; index++)
          {
          document.pickAreaCode.areacode.options[index].text = '';
          document.pickAreaCode.areacode.options[index].value = '';
          }

          Die Anzahl der Optionen wird bereits zu Beginn ausgelesen und erstellt. Hinterher werden diese dann erst mit Inhalt gefüllt.

          Kann mir jemand sagen, ob es noch andere derartige Code-Schnipsel gibt bzw. wie man das selber schreiben kann? Bin für jeden Lösungsansatz dankbar.
          Das Genie überblickt das Chaos!

          Wer Rechtschreibfehler findet, darf sie behalten!

          Kommentar


          • #6
            hier im forum kursiert ne rein serverseitige lösung rum...

            Übrigend befüllt dein code da nicht die felder, sondern er leert sie. Augen auf!

            Kommentar


            • #7
              Sorry, ich meinte doch er leert sie.

              Kannst du mir den Link zu der serverseiten Lösung schicken? Oder nen Codeschnipsel oder ähnliches.

              Es muss doch noch mehr geben, die dasselbe Problem haben, oder nicht? Ich könnte mir vorstellen, dass man ein derartiges Script immer wieder verwenden könnte.
              Das Genie überblickt das Chaos!

              Wer Rechtschreibfehler findet, darf sie behalten!

              Kommentar


              • #8
                such nach abhängige listen oder so...

                Kommentar


                • #9
                  Hah, danke! Und ich Depp such immer nach "Selectfeld" "chainedSelectors" und was weiss ich was.

                  Zu dem Thema gibt's sogar ein Tutorial:
                  http://www.php-resource.de/tutorials/read/41/1/

                  Dann werd' ich's wohl mal damit probieren.

                  Vielen Dank erstmal
                  Das Genie überblickt das Chaos!

                  Wer Rechtschreibfehler findet, darf sie behalten!

                  Kommentar


                  • #10
                    Okay, jetzt hab ich das Script aus dem Tutorial-Bereich benutzt. Als ich die Testdatenbank angelegt habe, hat es auch wunderbar funktioniert, allerdings habe ich das Script dann an meine Datenbank angepasst, daraufhin hat es nicht mehr funktioniert.

                    Problem ist, dass ich nur eine Tabelle verwenden möchte und nicht zwei wie im Beispiel.

                    Ich möchte, dass im ersten Selectfeld alle Hersteller ausgegeben werden. (Das hab ich selbstverständlich schon realisiert).
                    Und im zweiten Selectfeld sollen die entsprechenden Modelle des ausgewählten Herstellers ausgegeben werden und dort gibt es Probleme.

                    Im zweiten Selectfeld steht lediglich ein einziger Eintrag, "Start".

                    Mein Code sieht wie folgt aus:
                    Code:
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                    <html>
                    <head>
                    <title>Untitled Document</title>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                    <script type="text/javascript">
                    <!--
                    PHP-Code:
                    <?php
                    // abhängiges Kombifeld erzeugen
                        
                    $rs mysql_query("SELECT * FROM `datenbank1`");
                        
                    $rows mysql_num_rows($rs);

                        echo 
                    "\tvar liste2=new Array($rows)\n"
                        
                    "\tfor(var i=0;i<liste2.length;i++)\n"
                        
                    "\t\tliste2[i]=new Array(2);\n";
                        
                    $n=0;
                        while(
                    $zeile mysql_fetch_assoc($rs)) {
                            echo 
                    "\tliste2[$n][0]=".$zeile['id'].";\n"
                            
                    "\tliste2[$n][1]='".$zeile['modell']."';\n"
                            
                    "\tliste2[$n][2]=".$zeile['hersteller'].";\n";
                            
                    $n++;
                        }
                    /**/
                    ?>
                    Code:
                    function update_drp2() {
                        var x=document.frm_auswahl.drp2.length;
                        for(var n=0; n<x; n++)
                            document.frm_auswahl.drp2.options[0]=null;
                        for(n=0; n<liste2.length; n++) {
                            if(liste2[n][2]==document.frm_auswahl.drp1.value) {
                                var NeuerEintrag=new Option(liste2[n][1], liste2[n][0]);
                                document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
                            }
                        }
                    }
                    -->
                    </script>
                    </head>
                    
                    <body>
                    <form name="frm_auswahl">
                        <select name="drp1" size="1" onChange="update_drp2()">
                    PHP-Code:
                        <?php
                            $rs 
                    mysql_query("SELECT * FROM `datenbank1` GROUP BY hersteller");
                            while(
                    $zeile mysql_fetch_assoc($rs)) {
                                echo 
                    "<option value=\"".$zeile['hersteller']."\">".$zeile['hersteller']."
                                </option>\n"
                    ;
                            }
                        
                    ?>
                    Code:
                        </select>
                        <select name="drp2" size="1">
                            <option>Start</option>
                        </select>
                    </form>
                    <script type="text/javascript">
                    <!--
                        update_drp2()
                    -->
                    </script>
                    </body>
                    </html>
                    Kann es sein, dass es nur mit zwei Datenbank-Tabellen funktioniert? Das wäre ziemlich blöd, kann ich mir aber auch nicht vorstellen.

                    Es muss doch möglich sein, dass ich anstelle einer hersteller_id einfach direkt nach dem Namen des hersteller selectiere, oder?
                    Zuletzt geändert von chefdesigner; 28.03.2006, 23:15.
                    Das Genie überblickt das Chaos!

                    Wer Rechtschreibfehler findet, darf sie behalten!

                    Kommentar


                    • #11
                      [...] daraufhin hat es nicht mehr funktioniert.
                      das bedeutet?

                      p.s. code umbrechen und php-tags benutzen - wie immer.

                      Kommentar


                      • #12
                        So, Code müsste jetzt korrekt umgebrochen sein (1024px) und php-Tags wurden ergänzt.

                        Ich hab den Code an folgende Stellen geändert (siehe Kommentare):
                        PHP-Code:
                            $rs mysql_query("SELECT * FROM `datenbank1`");  //  tbl_artikel
                            
                        $rows mysql_num_rows($rs);
                            echo 
                        "\tvar liste2=new Array($rows)\n"
                            
                        "\tfor(var i=0;i<liste2.length;i++)\n"
                            
                        "\t\tliste2[i]=new Array(2);\n";
                            
                        $n=0;
                            while(
                        $zeile mysql_fetch_assoc($rs)) {
                                echo 
                        "\tliste2[$n][0]=".$zeile['id'].";\n"        // urspr.: $zeile['art_id']
                                
                        "\tliste2[$n][1]='".$zeile['modell']."';\n"     // urspr.: $zeile['art_bez']
                                
                        "\tliste2[$n][2]=".$zeile['hersteller'].";\n";// urspr.: $zeile['art_grp']
                                
                        $n++;
                            } 
                        PHP-Code:
                            <?php
                                $rs 
                        mysql_query("SELECT * FROM `datenbank1` GROUP BY hersteller");
                        // urspr.:  $rs = mysql_query("SELECT * FROM `tbl_art_gruppen`");
                                
                        while($zeile mysql_fetch_assoc($rs)) {
                                    echo 
                        "<option value=\"".$zeile['hersteller']."\">".$zeile['hersteller']."
                                    </option>\n"
                        ;
                        // urspr.: echo "<option value=\"".$zeile['art_grp_id']."\">".$zeile['art_gruppe']."</option>\n";
                                
                        }
                            
                        ?>
                        Das Genie überblickt das Chaos!

                        Wer Rechtschreibfehler findet, darf sie behalten!

                        Kommentar


                        • #13
                          was daran funktioniert nicht?

                          Kommentar


                          • #14
                            Feld 2 wird nicht gefüllt, sondern beinhaltet lediglich den Anfangswert "Start".

                            Ich bekomme folgende JavaScript-Fehlermeldung:

                            Zeile: 186
                            Zeichen: 5
                            Fehler: Objekt erwartet
                            Code: 0

                            In Zeile 186 steht folgendes:

                            Code:
                                update_drp2()
                            Das Genie überblickt das Chaos!

                            Wer Rechtschreibfehler findet, darf sie behalten!

                            Kommentar


                            • #15
                              geht doch.
                              In Zeile 186 steht folgendes
                              immer 3-4 zeilen davor und danach mitposten, sonst ist der kontext unklar.

                              Kommentar

                              Lädt...
                              X