dynamisches dropdown menü problem

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

  • dynamisches dropdown menü problem

    Hallo Leute,

    ich habe nach einigem herumprobieren endlich geschafft dynamische dropdownmenüs die voneinander abhängig sind zu programmieren

    Die Daten mit denen die Menüs gefüllt sind werden aus 2 Tabellen gelesen.

    Tabelle1 = Mitarbeiter
    Tabelle2 = Firma

    um die Auswahl zu realisieren benutze ich beim Menü Techniker den OnChange Handler und sende damit die Form ab. Daraufhin wird auch die Richtige Firma angezeigt. Mein Problem ist nun aber, dass leider das Mitarbeiter Formularfeld wieder zurückgesetzt wird, d.h. nicht mehr der richtige mitarbeiter angezeigt wird.

    hier mein Code (formular):

    PHP-Code:
    <form name="form1" method="post" action="">
      <select name="t_firma" id="t_firma" onChange="document.forms.form1.submit()">
        <?php
    do {  
    ?>
        <option value="<?php echo $row_techniker['firma']?>"><?php echo $row_techniker['name']?></option>
        <?php
    } while ($row_techniker mysql_fetch_assoc($techniker));
      
    $rows mysql_num_rows($techniker);
      if(
    $rows 0) {
          
    mysql_data_seek($techniker0);
          
    $row_techniker mysql_fetch_assoc($techniker);
      }
    ?>
      </select>
      <select name="firma" id="firma">
        <?php
    do {  
    ?>
        <option value="<?php echo $row_firma['su_firma']?>"><?php echo $row_firma['su_firma']?></option>
        <?php
    } while ($row_firma mysql_fetch_assoc($firma));
      
    $rows mysql_num_rows($firma);
      if(
    $rows 0) {
          
    mysql_data_seek($firma0);
          
    $row_firma mysql_fetch_assoc($firma);
      }
    ?>
      </select>
    </form>
    Das Problem was ich bei der Realisierung habe ist, dass in der Tabelle Firma kein Feld Mitarbeiter ist aber in der Tabelle Mitarbeiter die Felder Name, Firma enthalten sind. Ich kann also nicht sagen er soll einfach in dem Feld indem die beiden Mitarbeiternamen gleich sind ein SELECTED ausgeben.

    Wir ihr sicherlich gesehen habt, habe ich bei der Mitarbeiterauswahl den Wert = Firma gesetzt und nur als Beschreibung den Mitarbeiternamen.

    Kann man die Beschreibung eines Formularelements über $_POST ansprechen? Wenn ja wie?

    Ich hoffe Ihr versteht soweit was ich meine.

  • #2
    ich verstehe nicht was du willst, weil es so unverständlich formuliert ist, aber wenn die felder leer sind - pack es mit in das formular, schicks mit zum server und lass es dann als value-wert im html-formular wieder mit ausgeben. dann sind die felder auch nach dem abschicken wieder gefüllt
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      ich erklärs nochmal

      die daten aus den beiden tabellen werden in die 2 dropdown menüs eingelesen. Das funktioniert.

      Ich wähle einen Techniker aus dem 1. Menü aus. Dieses Menü besitzt einen OnChange Handler der das Formular absendet. Daraufhin wird eine 2. Abfrage für das Dropdown Firma ausgeführt. Dieses Menü enthält nun die Firma die gleich der Firma des Technikers ist.

      Funktioniert also auch.

      Was leider nach dem absenden passiert, ist das zwar im 2. Menü nun die richtige Firma steht aber im 1. Menü indem ich den Techniker ausgewählt habe das Menü wieder zurückgesetzt wurde. Das heißt wieder der erste Eintrag ausgewählt ist. Nicht wie gewünscht z.B. der 3. Eintrag.

      Ich möchte also verhindern, dass das 1. Menü - Techniker wieder zurückgesetzt wird bzw. das der richtige Techniker ausgewählt bleibt.

      Dieses Menü erhält als VALUE die Firma des Technikers und als Beschreibung den Namen des Technikers.

      Jetzt ist es vlt. etwas klarer

      Kommentar


      • #4
        Ich habe nicht so ganz verstanden, was genau übergeben wird, aber löse es doch so, dass mit dem senden eine ID (oder ein anderer vergleichbarer Wert) übergeben wird, und in der Schleife überprüfst du, ob der übergebene Wert mit dem Wert aus der DB übereinstimmt. Wenn ja
        PHP-Code:
        echo "selected"

        Kommentar


        • #5
          leider wird beim senden aus dropdown 1 & 2 schon etwas gesendet.

          Die einzige funktion die das ganze haben soll ist dass ich aus einem dropdownmenü namens techniker einen dieser auswähle und sich dann die werte in einem 2. dropdown entsprechend ändern. Hier in diesem Fall soll dann die Firma des Technikers angezeigt werden.

          Die Menüs werden per Abfrage gefüllt.

          z.b. so

          [Techniker]
          + Frank Müller -> ist bei ABC Inc.
          + Michael Maier -> ist bei Musterfirma
          + Tom Lehmann -> Firma3

          [Firma]
          + ABC Inc.
          + Musterfirma
          + Firma3

          sobald ich nun Frank Müller auswähle soll im 2. Menü (Firma) nur noch ABC Inc. stehen.

          Das funktioniert ja auch alles nur wird nach dem senden des formulars das 1. menü wieder zurückgesetzt. Das zweite nicht, ist ja auch logisch, da es einen Wert per $_POST erhält mit diesem wird dann eine Abfrage ausgeführt und das 2. Menü gefüllt.

          Kommentar


          • #6
            Und was soll genau im ersten Menü stehen? Soll der Techniker, der zuvor ausgewählt wurde, vorselektiert sein? Dann schau dir meine Lösung an. Ansonsten bitte noch etwas erklären...

            Schon wieder Edit: Vielleicht ein hidden-Feld?

            Kommentar


            • #7
              richtig es soll der techniker vorelectiert sein. Soweit wäre das ja auch kein problem

              HIER IST DAS PROBLEM

              Ich muss ja mittels if abfrage den übergebenen wert abfragen dass ich per echo selected rein schreiben kann.

              leider hat das menü techniker als wert die firma. beide werte entstammen aus der tabelle techniker.

              menü2 zeigt nun die firma an die = der firma aus der tabelle techniker ist.

              könnte ich nun die beschreibung => den technikernamen ansprechen wäre alles erledigt

              document.forms.form1.techniker.beschreibung oder so ähnlich
              wenn ich mittels javascript auf die beschreibung des option tags zugreifen könnte..



              TABELLE1 TECHNIKER

              NAME
              FIRMA
              PLZ
              ORT
              etc.

              Tabelle2 Firma
              NAME
              PLZ
              ORT
              etc.
              enthält keine Technikernamen, dies macht es schwierig die menüs zu vergleichen..

              Ich weiß die beschreibung ist nicht wirklich der hit, aber ich weiß nicht wie ich es genauer erklären soll.

              Kommentar


              • #8
                ich sehe nicht, wo das problem liegt.
                das erste select baust du doch nach dem abschicken ebenfalls erneut auf, mit den gleichen werten wie beim ersten mal, nehme ich an.
                den ausgewählten option-value hast du übergeben bekommen - also vergleiche beim erneuten erstellen des selects, wo das value, welches du ausgibst, gleich dem übergebenen ist.

                (ein problem hättest du dann, wenn mehrere techniker bei der gleichen firma arbeiten können. davon war aber bisher ja nicht die rede ...
                aber dann müsstest du dir wirklich noch etwas überlegen, wie du das dann eindeutig machst.)
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  genau das ist das problem. Stimmt das hatte ich vergessen zu erwähnen. Es kann natürlich durchaus sein das 10 Techniker bei der selben Firma arbeiten.

                  Das 1. Select wird übringens nicht neu aufgebaut nur das 2.

                  Kommentar


                  • #10
                    Original geschrieben von yakuzza
                    Das 1. Select wird übringens nicht neu aufgebaut nur das 2.
                    hä?
                    du widersprichst dir:
                    Das funktioniert ja auch alles nur wird nach dem senden des formulars das 1. menü wieder zurückgesetzt.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      ich widerspreche mir nicht

                      Bei jedem Formular was du versendest wird es nach dem absenden wieder in den ausgangszustand zurückgesetzt das heißt textfelder sind wieder leer und auswahlmenüs wieder auf dem 1. eintrag.

                      Das zweite menü erhält die daten für die inhaltsabfrage per formularvariable. Das 1. aber nicht, da ich nicht weiß wie ich die felder vergleichen soll.. hast das problem ja bereits erkannt.

                      Kommentar


                      • #12
                        Original geschrieben von yakuzza
                        ich widerspreche mir nicht
                        doch, tust du.
                        Das zweite menü erhält die daten für die inhaltsabfrage per formularvariable. Das 1. aber nicht,
                        wenn es nicht erneut aufgebaut würde - wieso ist das erste select dann wieder da auf der folgeseite?

                        da ich nicht weiß wie ich die felder vergleichen soll.. hast das problem ja bereits erkannt.
                        ja - und dir auch bereits gesagt, dass du dir ein kriterium überlegen sollst, mit dem du die techniker unterscheiden kannst, auch wenn sie bei der selben firma arbeiten.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          theoretisch weiß ich ja wie ich mein problem lösen kann. Ich find leider keine infos.

                          Ich kann verhindern dass das 1. menü wieder den ersten eintrag zeigt wenn ich den Wert von $_POST['techniker'] im Feld Anzeigen lasse, leder hat das Techniker Feld als VALUE die Firma des Technikers.

                          Wenn ich nun wüsste wie ich über $_POST auf die beschreibung des feldes zugreifen könnte. Diese enthält nämlich den Namen des Technikers.


                          Nach dem Absenden der Form befindet man sich übrigens noch auf der gleichen seite.
                          Zuletzt geändert von yakuzza; 19.08.2005, 09:15.

                          Kommentar


                          • #14
                            Original geschrieben von yakuzza
                            Ich kann verhindern dass das 1. menü wieder den ersten eintrag zeigt wenn ich den Wert von $_POST['techniker'] im Feld Anzeigen lasse,
                            in dem du das attribut selected bzw. selected="selected" in der entsprechenden option ausgibst.
                            leder hat das Techniker Feld als VALUE die Firma des Technikers.
                            dann ändere dies - und zwar in einer art und weise, die dir sowohl die weitere verabeitung der firma, als auch die eindeutige identifizierung des technikers ermöglicht.
                            Wenn ich nun wüsste wie ich über $_POST auf die beschreibung des feldes zugreifen könnte.
                            gar nicht.
                            Nach dem Absenden der Form befindet man sich übrigens noch auf der gleichen seite.
                            davon war ich sowieso ausgegangen.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              nachdem ich gerade eine aufwendige INNER JOIN ABFRAGE gebastelt habe, ist mir aufgefallen dass ich ja gar keine zwei Tabellen brauche In der Tabelle Techniker steht ja alles drin was ich brauche:

                              SUT_ID <- Primärschlüssel
                              NAME <- Name des Technikers
                              FIRMA <- Firma des Technikers

                              Jetzt stellt sich nur die Frage wie ich die werte NAME und FIRMA auf 2 Menüs verteile inder beide Menüs voneinander abhängig sind. Ich habe versucht, das beide per ID verglichen werden und dann ein selected ausgegeben wird. Klappt aber nicht

                              Hier mal mein neuer Code

                              Abfrage
                              PHP-Code:
                              $query_tech_abfrage "SELECT sut_id, name, firma FROM sub_tech";
                              $tech_abfrage mysql_query($query_tech_abfrage$bo_con) or die(mysql_error());
                              $row_tech_abfrage mysql_fetch_assoc($tech_abfrage); 
                              Das Formular
                              PHP-Code:
                              <form name="form" method="post" action="">
                                <select name="techniker" id="techniker" onChange="document.forms.form.submit()">
                                  <?php
                              do {  
                              ?>
                                  <option value="<?php echo $row_tech_abfrage['sut_id']?>"<?php if (!(strcmp($row_tech_abfrage['sut_id'], $row_tech_abfrage['sut_id']))) {echo "SELECTED";} ?>><?php echo $row_tech_abfrage['name']?></option>
                                  <?php
                              } while ($row_tech_abfrage mysql_fetch_assoc($tech_abfrage));
                                
                              $rows mysql_num_rows($tech_abfrage);
                                if(
                              $rows 0) {
                                    
                              mysql_data_seek($tech_abfrage0);
                                    
                              $row_tech_abfrage mysql_fetch_assoc($tech_abfrage);
                                }
                              ?>
                                  </select>
                                <select name="firma" id="firma" onChange="document.forms.form.submit()">
                                  <?php
                              do {  
                              ?>
                                  <option value="<?php echo $row_tech_abfrage['sut_id']?>"<?php if (!(strcmp($row_tech_abfrage['sut_id'], $row_tech_abfrage['sut_id']))) {echo "SELECTED";} ?>><?php echo $row_tech_abfrage['firma']?></option>
                                  <?php
                              } while ($row_tech_abfrage mysql_fetch_assoc($tech_abfrage));
                                
                              $rows mysql_num_rows($tech_abfrage);
                                if(
                              $rows 0) {
                                    
                              mysql_data_seek($tech_abfrage0);
                                    
                              $row_tech_abfrage mysql_fetch_assoc($tech_abfrage);
                                }
                              ?>
                                </select>
                              </form>

                              Kommentar

                              Lädt...
                              X