Hi KMan,
was passiert denn bzw. was passiert nicht ?? Werden Fehler ausgegeben - ggf. direkt im Quelle-Code ??
Gruß
Patrick
dynamische Listenfelder
Einklappen
X
-
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, 10:03.
Einen Kommentar schreiben:
-
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:
-
Hi,
was passiert denn, bzw. passiert denn nicht ?
Werden irgendwelche Fehler ausgegeben - ggf. im Quellcode.
Welche Browser benutzt du ?
Einen Kommentar schreiben:
-
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, 10:01.
Einen Kommentar schreiben:
-
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:
-
steht in der spalte abteilung nicht der name der abteilung?
wie sieht dien select denn jetzt aus?
Einen Kommentar schreiben:
-
Hi Ihr
Vielen Dank für den Hinweis mit dem TUT. Ich mache mich gleich dran....
Danke
Gruss K Man
Einen Kommentar schreiben:
-
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:
-
-
Hallo KMan,
habe gerade gesehen, dass das tut jetzt online ist ...
Einen Kommentar schreiben:
-
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
Einen Kommentar schreiben:
-
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:
-
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:
-
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
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:
Einen Kommentar schreiben: