You are not logged in.

  • Login

1

Sunday, May 21st 2006, 8:59pm

4 Select mit 2 Ajax MySql abfragen füllen

Hallo habe nun schon 2 mal das Forum um AJAX durchgemacht aber bist jetzt keine Klarheit.

Das Tut mit den Select Feldern habe ich für mein Projekt übernommen und tw. geht es schon aber nun hänge ich fest.

Ich will folgendes erreichen.

Die Seite wird geladen und die erste Select Feld wird mit den Kunden geladen nun wenn man einen anklickt dann werden die Projekte zum Kunden in der 2ten Select angezeigt, nun wenn man ein Projekt wählt sollen die select 3 und 4 mit Bauteilen und Stundensätzen gefüllt werden. Leider wird dies nicht gemacht!

Ich dachte das ich die func.php und formular.php mehrmals includiere die jeweiligen functionen vom Namen her anpasse aber dem war nicht so. Wer kann mir einen Tip geben wie ich das besser hinbekomme?

2

Sunday, May 21st 2006, 9:10pm

Ok 3 Felder werden gefüllt aber das 4 Feld das die Abhängigkeit wie das 3 vom 2 hat wird nicht gefüllt.

Dann noch was im FF geht alles so weit nur im Internet Explorer kommt der Fehler:
'ajax' ist undefiniert Zeile 114

Das ist der Abschnitt:

JavaScript Code

1
2
3
4
5
6
7
8
function handleResponseProjekte() {
 
  if(req.readyState == 4){
    document.getElementById('Projekte').innerHTML = req.responseText;
  }
  else
  alert("loading" + ajax.readyState);
}

3

Monday, May 22nd 2006, 4:17pm

gib uns mal deinen aktuellen code..

weiß nicht genau was du damit meinst

Quoted from ""chrischnian""

Ich dachte das ich die func.php und formular.php mehrmals includiere die jeweiligen functionen vom Namen her anpasse aber dem war nicht so. Wer kann mir einen Tip geben wie ich das besser hinbekomme?

4

Monday, May 22nd 2006, 5:06pm

Ich habe dir gerade eine PM geschrieben mit der URL zum Script.

Ich habe aber nun ein neues Problem was viel wichtiger ist.

Unter IE geht gar nix mit AJAX

5

Monday, May 22nd 2006, 5:29pm

gib uns das nächste mal bitte gleich den code..
du verwendest den alten code aus dem thread - nicht den code aus dem wiki

im Wiki ist ein besser code..
Ich habe deine 2 JavaScript mal in eine bessere Funktion zusammengefasst

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function sendRequest(choice) {
	try {
		req = window.XMLHttpRequest?new XMLHttpRequest(): 
		new ActiveXObject("Microsoft.XMLHTTP"); 
	} catch (e) {
		//Kein AJAX Support
	} 
 
	if(choice == "Projekte") {
		req.onreadystatechange = handleResponse; 
		req.open("GET", 'includes/function/ajax/projekte.php?s='+ document.getElementById('Projekte').value); 	
	} else if(choice == "Bauteile") {
		req.onreadystatechange = handleResponse; 
		req.open("GET", 'includes/function/ajax/bauteile.php?s='+ document.getElementById('Bauteile').value); 
	}
 
	req.send(null); 
}
 
function handleResponse() {
	if ((req.readyState == 4) && (req.status == 200)) { 
		var update = new Array();
		var response = req.responseText; 
		if(response.indexOf('||' != -1)) {
			update = response.split('||');
			document.getElementById(update[0]).innerHTML = update[1];
		}
	}
}


Für dich ändern tut sich dabei:
statt der bisherigen ausgabe von includes/function/ajax/projekte.php?s=1

Quoted from ""alte Ausgabe""

<option value="1">c-klasse2</option>
<option value="3">test</option>


musst du nun folgende Ausgabe erzielen

Quoted from ""neue Ausgabe""

Kunden||<option value="1">c-klasse2</option>
<option value="3">test</option>


Der Teil vor den doppelten Pipes wird als DIV ID verwendet
in der bauteile.php musst du natürlich stattdessen ein "Bauteile||" voranstellen

außerdem habe ich den Parameter deiner sendRequest geändert
es heißt nun nicht mehr

Quoted from ""alt""

onChange="sendRequestKunden()"
sondern

Quoted from ""alt""

onChange="sendRequest('Kunden')"


das selbe natürlich auch mit Projekte
So sollte hoffentlich alles auch mit dem Internet Explorer funktionieren

Mit den 4 DIVs bitte ich dich mit dem neuen Code ein bisschen zu experimentieren, sollte nun hoffentlich etwas leichter von der Hand gehen
wenn du nicht weiter kommst, helfen wir hier natürlich wieder

6

Monday, May 22nd 2006, 5:49pm

Super danke werde mal gleich alles so weit umschreiben und testen!!

7

Monday, May 22nd 2006, 6:52pm

Also sorry für die dumme Nachfrage aber ich stehe gerade auf dem schlauch!

Meine ajax.js statt der 2 davor:

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function sendRequest(choice) {
        try {
                req = window.XMLHttpRequest?new XMLHttpRequest():
                new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
                //Kein AJAX Support
        }
 
        if(choice == "Projekte") {
                req.onreadystatechange = handleResponse;
                req.open("GET", 'includes/function/ajax/projekte.php?s='+ document.getElementById('Kunden').value);
        } else if(choice == "Bauteile") {
                req.onreadystatechange = handleResponse;
                req.open("GET", 'includes/function/ajax/bauteile.php?s='+ document.getElementById('Projekte').value);
        }
 
        req.send(null);
}
 
function handleResponse() {
        if ((req.readyState == 4) && (req.status == 200)) {
                var update = new Array();
                var response = req.responseText;
                if(response.indexOf('||' != -1)) {
                        update = response.split('||');
                        document.getElementById(update[0]).innerHTML = update[1];
                }
        }
}


Der Bereich der gesendet wird und gefüllt werden soll:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<form method="post" action="includes/function/functionuser/taetigkeit/inserttaetigkeit.php" name="Eingabeformular"><table border="0" cellpadding="0" cellspacing="0">
		<tr>
			<td>Kunde:</td>
			<td><select name="hersteller" id="Kunden" onChange="sendRequest('Projekte')" size="1">
<?php
$sql = 'SELECT * FROM kunde where kunde_status = "1"';
$ergebnis = mysql_query($sql);
while($data = mysql_fetch_array($ergebnis)){
?>
			<option value="<?php echo $data["kunde_id"]; ?>"
			<?php if ($data["kunde_id"] == $kunde) {?> selected <?php } ?>><?php echo $data["kunde_nr"]; ?>&nbsp;-&nbsp;<?php echo $data["kunde_name"]; ?></option>
<?php } ?>
        			</select></td>
		</tr>
		<tr>
			<td>Projekt:</td>
			<td><select name="projekt" id="Projekte" onChange="sendRequest('Bauteile')" size="1">
			</select></td>
		</tr>
		<tr>
			<td>Bauteil:</td>
			<td><select name="bauteil" id="Bauteile" size="1">
			</select></td>
		</tr>
		<tr>
			<td>Art der Tätigkeit:</td>
			<td><select name="art" size="1">


Und die 2 Dateien die per Ajax geladen werden

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
<?php
//Kunden laden
include_once("../../../config/configdaten.php");
include_once("../../checkuser.php");
echo 'Bauteile||';
$result = mysql_query('SELECT * FROM bauteil WHERE bauteil_projektid = "'.$_GET['s'].'" AND bauteil_status = "1";');
while($row = mysql_fetch_object($result))
{
	echo '<option value="'.$row->bauteil_id.'">'.$row->bauteil_bezeichnung.'</option>';
}
?>

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
<?php
//Kunden laden
include_once("../../../config/configdaten.php");
include_once("../../checkuser.php");
echo 'Projekte||';
$result = mysql_query('SELECT * FROM projekt WHERE projekt_kundenid = "'.$_GET['s'].'" AND projekt_aktiv = "1";');
while($row = mysql_fetch_object($result))
{
	echo '<option value="'.$row->projekt_id.'">'.$row->projekt_bezeichung.'</option>';
}
?>

Ok bin zwar nicht so fit in JS aber durch die Funktion handleResponse wird bewirkt das den jeweiligen Objekt das zugewiesen wird das gleich ??|| vorangestellt worden ist.

Aber dennoch kommt da nichts.
Dennoch was zu freuen:
Der Fehler im IE ist weg! :)

8

Monday, May 22nd 2006, 7:09pm

du gibst als pfad folgendes an

Source code

1
<script type="text/javascript" src="../../ajax/ajax.js"></script>


dabei befindest du dich nur in einem unterordner ausgehend von Root
bau das script mal direkt ein, dann kann man besser debuggen, falls es wirklich noch nicht funktioniert

9

Monday, May 22nd 2006, 7:15pm

Ok jetzt hat er was zurückgegeben:

Quoted

document.getElementById ist Null oder kein Objekt

10

Monday, May 22nd 2006, 7:47pm

habe gerade nachgelesen, dass der Internet Explorer das select tag nicht mit innerHTML füllen mag

als Workaround kannst du einfach zwischen die select tags ein <div> einfügen

also statt

Quoted

<select id="Projekt" [...]></select>


das hier

Quoted

<select[...]><div id="Projekt"></div></select>

11

Monday, May 22nd 2006, 8:30pm

Er meldet immer noch das gleiche. :(

12

Monday, May 22nd 2006, 8:59pm

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function handleResponseProjekte() {
 
  if(req.readyState == 4){
    document.getElementById('Projekte').innerHTML = req.responseText;
  }
  else
  alert("loading" + ajax.readyState);
}
function handleResponseBauteile() {
 
  if(req.readyState == 4){
    document.getElementById('Bauteile').innerHTML = req.responseText;
  }
  else
  alert("loading" + ajax.readyState);
}


Kann man diese alten Functionen nach deinen Umbau so einbauen? Vielleicht geht es ja mit diesen?

13

Monday, May 22nd 2006, 9:34pm

Habe es nun mal probiert und unter FF geht es nun wieder aber im IE geht es noch nicht! Wieder der alte Fehler.

Habe nun wieder das neue JS genommen aber dann geht es in keinen er bringt im IE das das Objekt null ist oder nicht vorhanden ist.

14

Monday, May 22nd 2006, 10:09pm

der neue ajax code ist auf jeden fall besser
in den 2 php-dateien ist dir noch vor das php tag ein leerzeichen gerutscht
so ist die ID natürlich falsch (" Projekte" statt "Projekte")

und zusätzlich ergänze noch das <div> Tag - selbst wenn es dein IE kann
das workaround kommt direkt von Microsoft:
http://support.microsoft.com/default.aspx?scid=kb;en-us;276228

15

Tuesday, May 23rd 2006, 7:58am

Ok das letzte mal zum Verständniss:

Ich habe 4 Select Felder das erste hat die ID Kunden hier wähle ich einen Kunden aus.

Dann wird per sendRequest"Projekte" die projekte.php?s=(ID des select Feldes Kunden) aufgerufen und sollte per handleResponse an das Feld
<select><div id="Projekte"></div></select>
die Daten der phpDatei übergeben (Projekte||<option>test</option>)
Danach wähle ich aus den nun komplett erzeugten <select> das nächste aus und damit werden die anderen letzten beiden <select> gefüllt.

Dies habe ich doch so richtig verstanden?

16

Monday, May 29th 2006, 10:59am

Also ich bekomme das mit den Leerzeichen nicht hin!!

Ich habe nun schon die PHP Skripte vor der endgültigen übergabe so modifiziert das Sie davor ein Trim machen und alle Leerzeichen killen.

Aber dennoch habe ich im Quelltext ein Leerzeichen.

Gibt es eine JS Funktion die mir die Leerzeichen am Anfang killen?

17

Monday, May 29th 2006, 1:33pm

Ok die Leerzeichen sind nun weg! Aber habe immer noch das Problem das er die Daten nicht anzeigt!!

In der JS Konsole steht sendRequest nicht definiert!

19

Monday, May 29th 2006, 4:34pm

nee mit Firefoc keine Probleme! Wenn du noch die Daten hast kannst du mal schauen wenn nicht gebe ich Sie dir nochmal!

Das Problem mit den Leerzeichen hing mit den Daten die ich per includ reingenommen habe zusammen.

Sonst finde dich dienen Code klasse. Habe mich drüber gemacht das auch mein 4 gefüllt wird und glaube das ich schon auf den richtigen Weg bin. :D

20

Monday, May 29th 2006, 4:51pm

jaja, mein ich ja.. habs mit Firefox 1.5 getestet

hab aber weder IE noch Opera installiert (und das als (gelegenheits) Webdesigner) *tadel*
kanns daher nicht testen

auffallen tut mir kein fehler.. vor allem nicht an sendRequest

Social bookmarks