Abhängigkeit von Select Feldern! Hilfe

NoKz

Grünschnabel
Hallo

Ich habe mir schon mindestens 1 1/2 Tage den Kopf zerbrochen, warum folgendes nicht funktz und hoffe nun ihr könnt mir helfen. Folgendes ist gegeben:



Ich habe 2 Select Felder.
Das erste gibt die Kunden aus. Das funktioniert auch soweit.

Das zweite soll in Abhängigkeit dazu stehen. Also wenn ich einen Kunde mit der KundenID 1 auswähle, soll im zweiten nur die Klassen stehen, die dieser Kunde auch macht. (es geht um eine Fahrschuldatenbank)

Und dies soll sich jederzeit ändern lassen, wenn ich nen anderen Kunden auswähle.



tblkunde
__________
KundenID
Name
Vorname
Strasse
PLZ
Ort
Telefonnummer
Geschlecht
Geburtsdatum



tblrechnung
__________
RechnungID
Klasse
KundenID



so jetzt mal meinen ganzen php code mit Javascript:

Code:
<?php 
  include ("funktionen.php");
  $db=mysql_connect("localhost","root","");
  mysql_select_db("Fahrschule");
?>
<html>
<head>
<script type="text/javascript">
<!--
<?php
// abhängiges Kombifeld erzeugen
    $rs=mysql_query("SELECT Klasse, KundenID FROM tblrechnung;");
    $rows=mysql_num_rows($rs);
    echo "\tvar liste2=new Array($rows)\n";
	echo "\tfor(var i=0;i<liste2.length;i++)\n";
    echo "\t\tliste2[i]=new Array(1);\n";
   $n=0;
   while($zeile=mysql_fetch_assoc($rs)) {
		echo "\tliste2[$n][0]=".$zeile['Klasse'].";\n"
		. "\tliste2[$n][1]=".$zeile['KundenID'].";\n";
        $n++;
    }
?>
function update_drp2() {
    var x=document.frm_auswahl.drp2.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp2.options[n]=null;
    for(n=0; n<liste2.length; n++) {
        if(liste2[n][1]==document.frm_auswahl.drp1.value)
		{
            var NeuerEintrag=new Option(liste2[n][0]);
            document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}
-->
</script>
</head>

<body>
<form name="frm_auswahl">
   <select name="drp1" size="1" onChange="update_drp2()">
	<?php
        $rs=mysql_query("SELECT KundenID, Name, Vorname FROM tblkunde");
        while($zeile=mysql_fetch_assoc($rs))
		 {
            echo "<option value=\"".$zeile['KundenID']
            . "\">".$zeile['KundenID']." ".$zeile['Vorname']." ".$zeile['Name']."</option>\n";
        }
    ?>
  </select>

    <select name="drp2" size="1">
        <option selected name="Start">Start</option>
    </select>

</form>
<script type="text/javascript">
<!--
    update_drp2()
-->
</script>

</body>

</html>

Ich muss dazu sagen ich habe keine ahnung von Javascript und habe sogut wie möglich es versucht an meine Situation anzupassen.

Habe dieses als Vorlage genommen.
Hier Leider fängt es ja schon, das ich net weiß was \t macht.......\n ist neue Zeile.....aber das wars auch schon mit solchen sachen.

Folgendes funktioniert: Die Ausgabe der Kunden funktioniert einwandfrei. Doch leider hab ich in dem abhängigen Select Feld nie Werte. Die tabelle Rechnung ist gefüllt!

Ich brauche dringend Hilfe. Bitte

MFG Nokz
 
Zuletzt bearbeitet:
\t erzeugt ein Tabulator-Steuerzeichen... ist somit nur für die Optik gedacht.

Ansonsten.... da hier niemand hellsehen kann und somit auch nicht weiss, was deine DB so ausspuckt, wäre es gut, wenn du das postest, was im JS-Forum von Interesse ist.... den Code, den der Browser verarbeiten muss.... da hat PHP-Code nix drinnen zu suchen.
 
Also so ganz kann ich dir da net zustimmen. Im PHP Forum werde ich hierhin verwiesen und hier wird mir gesagt das es nichts mit Javascript zu tun hat!?

Das sehe ich nen bischen anders. Zudem hab ich ja den Javascript code gepostet. Vielleicht hast du ihn in der eile überlesen. Ich hab ihn deswegen nochmal für alle Farbig markiert. Zudem brauch ich für mein Problem Php sowie Javascript.

Code:
<?php 
  include ("funktionen.php");
  $db=mysql_connect("localhost","root","");
  mysql_select_db("Fahrschule");
?>
<html>
<head>
<script type="text/javascript"><!--
<?php
// abhängiges Kombifeld erzeugen
    $rs=mysql_query("SELECT Klasse, KundenID FROM tblrechnung;");
    $rows=mysql_num_rows($rs);
    echo "\tvar liste2=new Array($rows)\n";
	echo "\tfor(var i=0;i<liste2.length;i++)\n";
    echo "\t\tliste2[i]=new Array(1);\n";
   $n=0;
   while($zeile=mysql_fetch_assoc($rs)) {
		echo "\tliste2[$n][0]=".$zeile['Klasse'].";\n"
		. "\tliste2[$n][1]=".$zeile['KundenID'].";\n";
        $n++;
    }
?>
function update_drp2() {
    var x=document.frm_auswahl.drp2.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp2.options[n]=null;
    for(n=0; n<liste2.length; n++) {
        if(liste2[n][1]==document.frm_auswahl.drp1.value)
		{
            var NeuerEintrag=new Option(liste2[n][0]);
            document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}
-->
</script>
</head>

<body>
<form name="frm_auswahl">
   <select name="drp1" size="1" onChange="update_drp2()">
	<?php
        $rs=mysql_query("SELECT KundenID, Name, Vorname FROM tblkunde");
        while($zeile=mysql_fetch_assoc($rs))
		 {
            echo "<option value=\"".$zeile['KundenID']
            . "\">".$zeile['KundenID']." ".$zeile['Vorname']." ".$zeile['Name']."</option>\n";
        }
    ?>
  </select>
    <select name="drp2" size="1">
        <option selected name="Start">Start</option>
    </select>

</form>
<script type="text/javascript">
<!--
    update_drp2()
-->
</script>
</body>

</html>

Grün= Hier wird das erste SELECT Feld erzeugt, wo man die KundenID auswählt. Dies funktioniert auch soweit

Organe=Hier wird das Abhängige SELECT Feld erzeugt und mit dem ganzen Inhalt von tblrechnung gefüllt.

Rot=Das ist der Javascript Teil. Dieser soll nach einer änderung im ersten SELECT Feld aufgreufen werden. Und zwar soll er dann das zweite SELECT Feld löschen und nur mit den Inhalt der abhängigen Daten wieder füllen. Dabei wird die Verknüpfung über die KundenID hergestellt.

MFG Nokz
 
Egal, ob du mir zustimmst, oder nicht...

orange= PHP-Code, welcher einen Javascript-Array ausgeben soll. Um zu orten, was warum nicht funktioniert, muss man diesen Javascript-Array sehen, und nicht deinen PHP-Code.
PHP ist eine serverseitige Skriptsprache... Javascript hingegen eine clientseitige. Folglich wird sie vom Clienten interpretiert... welcher keinen PHP-Code zu Gesicht bekommt, sondern genau das, was du im Browser unter "Quelltext anzeigen" erhältst.
 
Wenn ich dich richtig verstanden habe, möchtest du als Datensatz Beispiele haben

für tbl Kunde wären das dann zum Bsp:


KundenID = 1
Name = Hugo
Vorname = Hans
Strasse = Karlstr. 15
PLZ = 12345
Ort = Nirgendwo
Telefonnummer = 02345/2234234
Geschlecht = 0
Geburtsdatum = 12-01-1979
____________________________

KundenID = 2
Name = Huhu
Vorname = Walter
Strasse = Ottostr. 15
PLZ = 12323
Ort = dortmund
Telefonnummer = 02345/2234234
Geschlecht = 0
Geburtsdatum = 07-03-1956
___________________________
tblrechnung
__________
RechnungID = 1
Klasse = B
KundenID = 1
_____________
RechnungID= 2
Klasse = C
KundenID = 2


Javascript Array
______________
liste2[0][0]=B //liste2 [x] [0] =immer die Klasse
liste2[0][1]=1 //liste2 [x] [1] =immer die KundenID
liste2[1][0]=C
liste2[1][1]=2

Mittlerweile bin ich mir eigentlich ziemlich sicher, das das Javascript Array nicht gefüllt wird. springt der Browser eigentlich zu irgendeinen Zeitpunkt dorthin? Jedenfalls hab ich die ganze Array Geschichte zur Probe mal in eine Funktion gepackt und diese per <body onLoad="fuellen()"> ausführen lassen. Leider mit gleichen Ergebnis. Ich bin echt am verzweifeln. Veilleicht kann mir auch einer von euch einen php/Javascript Code geben wo zwei Select Felder mit Datenbank inhalten gefüllt werden und danach in Beziehung gesetzt.

MFG Nokz

PS: Ich hoffe du meintest das. Ansonsten musste mir das nochmal genauer erklären. Ich versuche ja auch zu lernen, so ist es ja net.
 
Nö...ich will garnichts haben.

Nur wenn du Hilfe bei der Lösung deines Problems haben möchtest, müsstest du wie bereits gesagt, das posten, was der Browser verarbeitet(Ansicht->Quelltext anzeigen).
Wenn das zu viel verlangt ist, tut es mir leid...
 
Sag das doch ^^

Code:
<html>

  <head>
  </head>

  <body>
  
  









  </body>

</html><html>
<head>
<script type="text/javascript">
<!--
var liste2=new Array(5)
for(var i=0;i<liste2.length;i++)
{liste2[i]=new Array(1);}
	liste2[0][0]=B;
	liste2[0][1]=11;
	liste2[1][0]=BE;
	liste2[1][1]=1;
	liste2[2][0]=BE;
	liste2[2][1]=12;
	liste2[3][0]=C;
	liste2[3][1]=2;
	liste2[4][0]=C;
	liste2[4][1]=13;
function update_drp2() {
    var x=document.frm_auswahl.drp2.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp2.options[n]=null;
    for(n=0; n<liste2.length; n++) {
        if(liste2[n][1]==document.frm_auswahl.drp1.value)
		{
            var NeuerEintrag=new Option(liste2[n][0]);
            document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}
-->
</script>
</head>

<body>
<form name="frm_auswahl">
   <select name="drp1" size="1" onChange="update_drp2()">
	<option value="1">1 Monika Krick</option>
<option value="2">2 Sebastian Krick</option>
<option value="12">12 Banjo Krick</option>
<option value="13">13 test test</option>
  </select>

    <select name="drp2" size="1">
        <option selected value=">Start</option>
    </select>

</form>
<script type="text/javascript">
<!--
    update_drp2()
-->
</script>

</body>

</html>

ich bin dir ja jetzt schon dankbar für diesen Hinweis. Weil jetzt kann man ja wunderbar sehen wo das Problem liegen könnte. Aber das zeigt nur mal wieder das ich keine Ahnung hab und ich dir ja schon dankbar bin, das du mir helfen willst. Danke dafür schonmal.

MFG Nokz
 
Auf den zweiten Blick(den ersten Blick auf den doppelten <html>-Block überspringe ich mal....)

Code:
 liste2[0][0]=B;
liste2[0][1]=11;
liste2[1][0]=BE;
liste2[1][1]=1;
liste2[2][0]=BE;
liste2[2][1]=12;
liste2[3][0]=C;
liste2[3][1]=2;
liste2[4][0]=C;
liste2[4][1]=13;

all die fetten Buchtaben müssen in Anführungszeichen stehen, falls es Strings sein sollen.
Falls es Variablennamen sein sollen... wo hast du diese deklariert?
 
Danke für die schnelle Antwort. Ich habe allerdings keine ahnung warum er mir den HTML Block doppelt ausgibt. Im Quelltext ist dieser 100% nur einmal vorhanden. Siehe oben

Die Buchstaben habe ich in " gesetzt, weil diese auch Strings sein sollen und nicht Variabeln. Sie werden halt aus der DB eingelesen. Ich bin ja auch froh das das soweit klappt.

Hier nochmal der neue Code unverändert wie ich ihn bekommen habe, also auch wieder mit doppelten HMTL Code.

EDIT
Wenn ich die Datei Funktion.php nicht include, dann kommt nen normaler Aufbau. Ich werd sie auch erstmal weglassen, da sie hier eh nicht gebraucht wird. Ich hab den HTML CODE nochmal neu hier eingefügt.

Code:
<html>
<head>
<script type="text/javascript">
<!--
var liste2=new Array(5)
for(var i=0;i<liste2.length;i++)
{liste2[i]=new Array(1);}
	liste2[0][0]="B";
	liste2[0][1]=11;
	liste2[1][0]="BE";
	liste2[1][1]=1;
	liste2[2][0]="BE";
	liste2[2][1]=12;
	liste2[3][0]="C";
	liste2[3][1]=2;
	liste2[4][0]="C";
	liste2[4][1]=13;
function update_drp2() {
    var x=document.frm_auswahl.drp2.length;
    for(var n=0; n<x; n++)
        document.frm_auswahl.drp2.options[n]=null;
    for(n=0; n<liste2.length; n++) {
        if(liste2[n][1]==document.frm_auswahl.drp1.value)
		{
            var NeuerEintrag=new Option(liste2[n][0]);
            document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;
        }
    }
}
-->
</script>
</head>

<body>
<form name="frm_auswahl">
   <select name="drp1" size="1" onChange="update_drp2()">
	<option value="1">1 Monika Krick</option>
<option value="2">2 Sebastian Krick</option>
<option value="12">12 Banjo Krick</option>
<option value="13">13 test test</option>
  </select>

    <select name="drp2" size="1">
        <option>Start</option>
    </select>

</form>
</body>

</html>

Und vielleicht nochmal eine Erklärung meiner Seits: Wenn ich im ersten Select Feld den Kunden Banjo Krick auswähle mit der ID 12, dann soll im zweiten Select Feld nur BE erscheinen. Wähle ich Kunde test test mit der ID 13 dann soll im zweiten Select Feld C erscheinen.

Ich hoffe es hilft weiter. Und vielen vielen Dank bisher.

MFG Nokz
 
Zuletzt bearbeitet:
Es funktz! Danke für die Hilfe. Und der Fehler? meine Schusseligkeit beim kopieren des Quelltextes.

ALT:

document.frm_auswhal.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;


Neu:
document.frm_auswahl.drp2.options[document.frm_auswahl.drp2.length]=NeuerEintrag;


Hätte ich eingentlich früher sehen müssen. Nunja jetzt geht es und nun kann ich mir den nächsten schritt wenden. Ich denke ihr habt nicht zum letzten mal von mir gehört (Nehmt das bitte net als Drohung ^^)

MFG Nokz
 

Neue Beiträge

Zurück