Werte an PHP-Datei übergeben

Stiff

Mitglied
Hallo Profis,
ich hab da so ein kleines Problem. Ich habe folgendes Formular:

PHP:
<form> 
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="R1">Value 01</option>
<option value="R2">Value 02</option>
</select>
</form>

Dieses übergibt je nach Auswahl den Parameter R1 oder R2 an die Funktion showUser. Das folgende JavaScript verarbeitet die Übergabe und leitet dieses per GET an getuser.php weiter.

PHP:
var xmlHttp

function GetXmlHttpObject()
{
	var xmlHttp=null;
	try {
 	// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e) {
	//Internet Explorer
 		try {
  			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  		}
 		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
 	}
return xmlHttp;
}

setInterval("showUser()",1000);

function showUser(str) { 
xmlHttp=GetXmlHttpObject()
var url="getuser.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}

Auf die Datei getuser.php gehe ich nicht weiter ein, denn grundsätzlich funktioniert es ja. Zu erwähnen ist hier nur das getuser.php auf den Übergabeparameter wartet, um seinen DB Request zusammen zu setzen.

Das Problem besteht darin, dass die entsprechende Variable nach 1000ms (logisch da setinterval) den Wert undefined annimmt und meine Abfrage somit nicht mehr ausgeführt wird. Kann mir jemand sagen, wie ich das umgehen kann? Ich stehe aufm Schlauch. Bitte helft mir auf die Sprünge.
 
Warum speicherst du die Auswahl des Select-Feldes nicht in einer JS-Variable und nutzt sie in der setInterval()-Funktion?
Code:
setInterval("showUser()", 1000, variable)
 
So kann ich zwar einen festen Wert setzen und auch in die Abfrage dauerhaft einbeziehen, nur wie ändere ich diesen Wert dann wieder. Ich habe jetzt mal folgendes gemacht.

PHP:
setInterval("showEtage()",1000, R4);

Damit fügt es mir "R4" in meine Abfrage ein, jedoch stellt sich die Frage, wie ich den 3. Waert (Parameter) der Funktion setInterval dann wieder überschreiben kann. Wie kann ich diesen variabel halten?
 
Nehmen wir mal an, du hast ein Formular (<form>) mit einem darin enthaltenen Listenfeld (<select>) und einen Button (<button type"submit">Text</button>). Ich würde in deinem Fall nicht direkt die showUser()-Funktion aufrufen, sondern eine neue Funktion, in der du nach Überprüfung des Übergabewertes (Etage) das alte Intervall mit clearInterval(Name des Intervalls) deaktivierst, dann deine showUser() aufrufst und dann dein neues Intervall mit dem gleichen Namen initialisierst.
Code:
funktion enableUserInfo(etage) {
  // altes Intervall vorhanden?
  if (updateInterval) {
    clearInterval(updateInterval);
  }
  showUser(etage);
  updateInterval = setInterval("showUser()", 1000, etage);
}

Dadurch wird auch der Code übersichtlicher
 
Also ich verstehe es leider immer noch nicht richtig. Beschäftige mich jetzt den ganzen Tag damit, jedoch bin ich damit kein Stück weiter gekommen. Eine ähnliche Idee hatte ich ja auch schon. Also zumindest nicht direkt showUsers() aufzurufen, sondern den "Umweg" über eine zusätzliche Funktion zu gehen. Ich bin leider noch nicht davon überzeugt, dass das Problem am setInterval liegt. Mein Problem, dass die Variable, nachdem diese an das php übergeben wurde leer ist, besteht weiterhin.

Ich dachte ich müßte meine Auswahl aus dem Formular ersteinmal in einer globalen Variable (var uebergabe) fest schreiben. Dann meine Funktion showUsers() immer mit dem Value von uebergabe aufrufen. Liege ich damit so falsch?
 
So blöd bin ich also doch nicht. Ich habs geschafft. Zwar erstmal sehr unsauber, aber um die Funktionalität zu gewährleisten reicht es. Lösung:

Ich übergebe einer neuen Funktion (danke an PhoenixXP) den Parameter den ich dauerhaft verwenden möchte und schreibe ihn erstmal in ein Textfeld. Anschließend rufe ich meine eigentliche Funktion auf mit genau diesem Parameter.

PHP:
function uebergabe(test) {
	document.sendForm.Eingabe.value = etage;
	showUser (test);
}

Das reicht leider nur für einen Durchlauf, sodass ich meine Funktion showUser auch etwas abändern musste. Ich hole mir dann den Value aus dem Textfeld wieder raus, um die Variable fest in der Funktion zu haben. Damit klappt meine Abfrage an die DB jedes Mal.
PHP:
setInterval("showUser()",1000);
function showUser(str) { 
	xmlHttp=GetXmlHttpObject()
		if (xmlHttp==null) {
			alert ("Browser does not support HTTP Request")
			return
		}
	var str = document.sendForm.Eingabe.value;
... usw...
Vielen Dank für die Unterstützung
 
Ich habe festgestellt, das meine enableUserInfo()-Funktion verbugt ist.

Neue Fassung:
Code:
var updateInterval = false;
funktion enableUserInfo(etage) {
  // altes Intervall vorhanden?
  if (updateInterval) {
    clearInterval(updateInterval);
    updateInterval = false;
  }
  showUser(etage);
  updateInterval = setInterval("showUser('"+etage+"')", 1000, etage);
}
Die Variable updateInterval muss extern initialisiert werden, damit die Prüfung nicht scheitert. Die vorher verwendete Variante von setInterval funktionierte irgendwie nicht.
Durch den Aufruf per onClick="enableUserInfo(forms[Nummer des Formulars].elements[Nummer des Textfeldes im Formular].value);" kannst du per Button die periodisch wiederholte UserInfo starten.
 

Neue Beiträge

Zurück