dynamische Listenfelder

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

  • Patrick_PQ
    antwortet
    Hi KMan,

    was passiert denn bzw. was passiert nicht ?? Werden Fehler ausgegeben - ggf. direkt im Quelle-Code ??

    Gruß
    Patrick

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hallo Leute

    Ausgehend von unten genanntem Beispiel habe ich jetzt mal versucht noch ein 3. Listenfeld per PHP zu generieren. Bei Klick ins 2. Listenfeld bzw. auf die Bezeichnung sollen alle Abteilungen angezeigt werden, die davon berührt sind.

    Tabelle Abteilungen

    Abt_ID/ Abteilung
    ----------------------
    1/Abt1
    2/Abt2
    3/Abt3

    Tabelle Prozesse

    Nummer/Bezeichnung/Abt_Pro_ID
    -------------------------------------
    111/Telefonieren/1/Abt1
    111/Telefonieren/3/Abt3
    222/Rechnen/2/Abt2
    222/Rechnen/3/Abt3
    usw.

    Kann mir bitte jemand sagen was an dem Code noch falsch sein könnte?
    PHP-Code:
    <html> 
    <head> 
    <title>Untitled Document</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

    <script type="text/javascript"> 
    <!-- 
    <?php 
    /* Verbindung aufbauen, auswählen einer Datenbank */ 
    $link mysql_connect("localhost""root@localhost"""
       or die(
    "Keine Verbindung möglich: " mysql_error()); 
    echo 
    ""
    mysql_select_db("Intranet") or die("Auswahl der Datenbank fehlgeschlagen"); 
    // abhängiges Kombifeld erzeugen 
        
    $rs=mysql_query("select * from prozesse") or die(mysql_error()); 
        
    $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['Nummer'].";\n" 
               
    "\tliste2[$n][1]='".$zeile['Bezeichnung']."';\n" 
               
    "\tliste2[$n][2]=".$zeile['Abt_Pro_ID'].";\n"
            
    $n++; 
        } 
    ?> 
    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> 
    <script type="text/javascript"> 
    <!-- 
    <?php 
    /* Verbindung aufbauen, auswählen einer Datenbank */ 
    $link mysql_connect("localhost""root@localhost"""
       or die(
    "Keine Verbindung möglich: " mysql_error()); 
    echo 
    ""
    mysql_select_db("Intranet") or die("Auswahl der Datenbank fehlgeschlagen"); 
    // abhängiges Kombifeld erzeugen 
        
    $rs=mysql_query("select * from prozesse") or die(mysql_error());
        
    $rows=mysql_num_rows($rs); 
        echo 
    "\tvar liste3=new Array($rows)\n" 
        
    "\tfor(var i=0;i<liste3.length;i++)\n" 
        
    "\t\tliste3[i]=new Array(2);\n"
        
    $n=0
        while(
    $zeile=mysql_fetch_assoc($rs)) { 
            echo 
    "\tliste3[$n][0]=".$zeile['Nummer'].";\n" 
               
    "\tliste3[$n][1]='".$zeile['Bezeichnung']."';\n"
               
    "\tliste3[$n][2]=".$zeile['Abt_Pro_ID'].";\n";
               
    $n++; 
        } 
    ?> 
    function update_drp3() { 
        var x=document.frm_auswahl.drp3.length; 
        for(var n=0; n<x; n++) 
            document.frm_auswahl.drp3.options[0]=null; 
        for(n=0; n<liste3.length; n++) { 
            if(liste3[n][1]==document.frm_auswahl.drp2.value) { 
                var NeuerEintrag=new Option(liste3[n][2], liste3[n][0]); 
                document.frm_auswahl.drp3.options[document.frm_auswahl.drp3.length]=NeuerEintrag; 
            } 
        } 

    --> 
    </script> 
    </head> 
    <body bgcolor="#FFFFFF" text="#000000"> 

    <form name="frm_auswahl" action=""> 
      <select name="drp1" size="30" onChange="update_drp2()"> 
        <?php 
            
    /* Verbindung aufbauen, auswählen einer Datenbank */ 
    $link mysql_connect("localhost""root@localhost"""
       or die(
    "Keine Verbindung möglich: " mysql_error()); 
    echo 
    ""
    mysql_select_db("Intranet") or die("Auswahl der Datenbank fehlgeschlagen"); 

            
    $rs=mysql_query("select * from abteilungen") or die(mysql_error());
            while(
    $zeile=mysql_fetch_assoc($rs)) { 
                echo 
    "<option value=\"".$zeile['Abt_ID'
                . 
    "\">".$zeile['Abteilung']."</option>\n"
            } 
        
    ?> 
      </select> 

      <select name="drp2" size="30" onChange="update_drp3()"> 
      <?php 
      
    /* Verbindung aufbauen, auswählen einer Datenbank */ 
    $link mysql_connect("localhost""root@localhost"""
       or die(
    "Keine Verbindung möglich: " mysql_error()); 
    echo 
    ""
    mysql_select_db("Intranet") or die("Auswahl der Datenbank fehlgeschlagen"); 

    ?> 
        <option>Start</option> 
        </select> 
       
            <select name="drp3" size="30"> 
            
              <?php 
      
    /* Verbindung aufbauen, auswählen einer Datenbank */ 
    $link mysql_connect("localhost""root@localhost"""
       or die(
    "Keine Verbindung möglich: " mysql_error()); 
    echo 
    ""
    mysql_select_db("Intranet") or die("Auswahl der Datenbank fehlgeschlagen"); 

    ?> 
            <option>Start</option> 
        </select> 

            
    </form> 
    <script type="text/javascript"> 
    <!-- 
        update_drp2() 
    --> 
    </script> 
    <script type="text/javascript"> 
    <!-- 
        update_drp3() 
    --> 
    </script> 
    </body> 
    </html>
    Zuletzt geändert von KMan; 05.03.2004, 11:03.

    Einen Kommentar schreiben:


  • Patrick_PQ
    antwortet
    Hi KMan,

    habe deinen Quelltext mal kopiert und getestet - läuft mit IE5 und IE6 ohne Probleme. Allerdings ist direkt nach dem Aufrufen der Seite ja keine Auswahl in der esten Liste getroffen - daher wird auch nichts in der zweiten Liste angezeigt. Sobald du einen Eintrag der ersten Liste auswählst, wird die zweite wie gewünscht aktualisiert.

    Alternativ kannst du auch durch die Eigenschaft "selected" eine Vorauswahl für die erste Liste treffen ...

    Gruß
    Patrick

    Einen Kommentar schreiben:


  • Patrick_PQ
    antwortet
    Hi,

    was passiert denn, bzw. passiert denn nicht ?

    Werden irgendwelche Fehler ausgegeben - ggf. im Quellcode.

    Welche Browser benutzt du ?

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hallo Patrick & Co

    Na, was soll ich sagen. Ihr habt gerade jemanden sehr sehr glücklich gemacht. Es funktioniert.

    Vielen, vielen Dank für eure Bemühungen.

    Hier der richtige Code:
    PHP-Code:
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <script type="text/javascript">
    <!--
    <?php
    /* Verbindung aufbauen, auswählen einer Datenbank */
    $link mysql_connect("localhost""root@localhost""")
       or die(
    "Keine Verbindung möglich: " mysql_error());
    echo 
    "";
    mysql_select_db("xxx") or die("Auswahl der Datenbank fehlgeschlagen");
    // abhängiges Kombifeld erzeugen
        
    $rs=mysql_query("select * from tbl_artikel") or die(mysql_error());
        
    $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['art_id'].";\n"
            
    "\tliste2[$n][1]='".$zeile['art_bez']."';\n"
            
    "\tliste2[$n][2]=".$zeile['art_grp'].";\n";
            
    $n++;
        }
    ?>
    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 bgcolor="#FFFFFF" text="#000000">


    <form name="frm_auswahl" action="">
      <select name="drp1" size="30" onChange="update_drp2()">
        <?php
        
    /* Verbindung aufbauen, auswählen einer Datenbank */
    $link mysql_connect("localhost""root@localhost""")
       or die(
    "Keine Verbindung möglich: " mysql_error());
    echo 
    "";
    mysql_select_db("xxx") or die("Auswahl der Datenbank fehlgeschlagen");


            
    $rs=mysql_query("select * from tbl_art_gruppen") or die(mysql_error());
            while(
    $zeile=mysql_fetch_assoc($rs)) {
                echo 
    "<option value=\"".$zeile['art_grp_id']
                . 
    "\">".$zeile['art_gruppe']."</option>\n";
            }
        
    ?>
      </select>

      <select name="drp2" size="30">
        <option>Start</option>
        </select>
    </form>
    <script type="text/javascript">
    <!--
        update_drp2()
    -->
    </script>

    </body>
    </html>
    Zuletzt geändert von KMan; 05.03.2004, 11:01.

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hallo

    Hab jetzt alles mal übertragen und angepasst. Waren auch ein paar kleinere Fehler drinn in Bezug auf Rechtschreibung.
    Evtl. gibts auch noch andere klien Bugs, denn es läuft nicht.
    Selbstverständlich schliesse ich auch nichts aus, dass ich was falsch gemacht habe.

    Gruss
    K Man

    Einen Kommentar schreiben:


  • mrhappiness
    antwortet
    steht in der spalte abteilung nicht der name der abteilung?

    wie sieht dien select denn jetzt aus?

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hi Ihr

    Vielen Dank für den Hinweis mit dem TUT. Ich mache mich gleich dran....


    Danke

    Gruss K Man

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hallo

    Danke. Ich habe Dein SQL auf meine Bedingungen zugeschnitten und es kommt das was ich mir auch ungefähr gedacht habe ;-)

    Jetzt ist es aber so, dass ich bei dieser Abfrage ja nicht zwischen den Abteilungen unterscheiden kann. Die Abfrage zeigt mir jetzt überhaupt alle Prozesse an, die jemals einer Abteilung zugeordnet wurden.

    Vierle Grüße
    K Man

    Einen Kommentar schreiben:


  • Abraxax
    antwortet
    hier ... http://www.php-resource.de/forum/sho...threadid=34454

    Einen Kommentar schreiben:


  • Patrick_PQ
    antwortet
    Hallo KMan,

    habe gerade gesehen, dass das tut jetzt online ist ...

    Einen Kommentar schreiben:


  • mrhappiness
    antwortet
    Code:
    SELECT
      a.abteilung, p.bezeichnung
    FROM
      abteilungstabelle a
      INNER JOIN prozesstabelle p ON a.abt_id=p.abt_id
    ORDER BY
      a.abteilung,
      p.bezeichnung
    warum nicht so?

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hallo

    Jetzt hätte ich nochmals eine grundlegende Frage, wie ich das nachher mit SQL am besten mache, denn ich kann ja schliesslich das Ergebnis auf 2 Arten abfragen:

    1) Ich sage:
    $query = "SELECT Bezeichnung FROM prozesse where Abt_ID='1'";
    $query = "SELECT Bezeichnung FROM prozesse where Abt_ID='2'";
    usw. und lasse es also über die Tabelle Prozesse laufen.

    oder

    2) Ich erstelle für jede Abteilung eine Abfrage und gebe die Abfragen nachher direkt aus.

    Was macht man da am besten?

    Vielen Dank.

    Gruss K Man

    Einen Kommentar schreiben:


  • KMan
    antwortet
    Hi Du

    Erstmal vielen herzlichen Dank, dass Du mir hilfst. Da wäre ich natürlich nie drauf gekommen überhaupt erstmal die DB Struktur zu ändern. Ich dachte immer, dass sei eine besonders elegante Lösung. Ja, ist sie wohl auch, aber nur wenn es ACCESS bterifft.

    Ich mache also jetzt mal folgendes.

    Tabbelle Abteilungen

    Abt_ID/ Abteilung
    ----------------------
    1/Abt1
    2/Abt2
    3/Abt3

    Tabelle Prozesse

    Nummer/Bezeichnung/Abt-ID
    -------------------------------------
    111/Telefonieren/1
    111/Telefonieren/3
    222/Rechnen/2
    222/Rechnen/3
    usw.

    Ich melde mich per mail bei Dir.

    1000 Dank.
    Gruss
    K Man

    Einen Kommentar schreiben:


  • Patrick_PQ
    antwortet
    Hallo KMan,

    gerade habe ich - weil hier öfter mal Fragen in dieser Richtung waren und mich das Problem auch beschäftigt hatte - ein Tutorial dazu geschrieben (noch nicht veröffentlich, da noch nicht 100%tig komplett - fehlt noch ein Foto von mir ...).

    Dein Problem ist tatsächlich etwas anders und passt nicht auf die gängigen Lösungen. Allerdings ist deine Datenbank auch nicht in der Normalform (google nach Normalisierung, Datenbanken bei Bedarf).

    Du solltest zunächst eine bessere Struktur erstellen - dann sind solche Funktionen auch einfacher zu behandeln.

    Beispiel:

    Abteilung
    -------------
    Abt1
    Abt2
    Abt3
    usw.

    Tabelle Prozesse

    Nummer/Bezeichnung/Abt_ID
    -------------------------------------------------------
    111 /Telefonieren/1
    111 /Telefonieren/3
    222 / Rechnen /1
    222 / Rechnen /2
    333 /Schreiben /3
    So sollte es fürs erste reichen, obwohl man die Bezeichnung auf noch in einer Extra-Tabelle genau wie die Abteilungen hinterlegen und dann in der Tabelle Prozesse wieder auf diese verweisen sollte ...

    Jetzt kannst du ohne allzu großen Aufwand Abhängigkeiten erzeugen. Alles andere ist nicht gut ... glaub mir, ich spreche aus schmerzhafter Erfahrung

    Wenn du es eilig hast, schick mir ne Mail, dann bekommst du das tut vorab von mir.

    Einen Kommentar schreiben:

Lädt...
X