Formular überprüfung mit Ajax und DB, IE vs. MF

bazzo

Grünschnabel
Hallo zusammen.
Ich hoffe diese Frage war hier noch nicht, habe aber nicht wirklich etwas gefunden. ansonsten sorry (weiss wie eklig das sonst ist :-D ).
folgendes problem stellt sich.
ich mache mit einem Formular eine Registrierung. Für den Usernamen mach ich eine Live-Abfrage via Ajax auf die Datenbank ob der Name schon besetzt ist. Das Feld färbt sich Live rot ein und es steht eine meldung (name frei, oder name besetzt).
ist der name besetzt und man klickt auf registrieren bleibt im MF das Feld rot und es geht nicht zum registrieren. beim IE färbt sich das feld beim klick auf registrieren wieder weiss und es würde theoretisch gehen, einen zweiten user mit demselben namen zum haben. weiss jemand woran das liegen kann? habe schon x stunden nun probiert und es will nicht wirklich. :confused:

die seite kann man auf http://www.bazzodelago.ch/registrieren.php sehen, der code vom JS/Ajax:

PHP:
<script type="text/javascript" language="javascript">
var http_request = false;
function req() {
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		return http_request;
}

function neuladen(url) {
	req();
	if (checkform()) {
	document.getElementById('weg').style.visibility = 'hidden';
		var daten1 = document.forms[0].elements[0].value;
		document.forms[0].elements[0].value = "";
		var daten2 = document.forms[0].elements[1].value;
		document.forms[0].elements[1].value = "";
		var daten3 = document.forms[0].elements[2].value;
		document.forms[0].elements[2].value = "";
		var daten4 = document.forms[0].elements[3].value;
		document.forms[0].elements[3].value = "";
		var daten5 = document.forms[0].elements[4].value;
		document.forms[0].elements[4].value = "";
				
		if (!http_request) {
			alert('XMLHTTP nicht verfügbar!');
			return false;
		}
		http_request.onreadystatechange = schreibInhalt;
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send("a="+daten1+"&b="+daten2+"&c="+daten3+"&d="+daten4+"&e="+daten5+"&x=richtig");
	}
}

function schreibInhalt() {
	if (http_request.readyState == 4) {
		document.getElementById("containerregister").innerHTML = http_request.responseText;
		http_request = ""
	}
}

function testusername() {
	req();				
		if (!http_request) {
			alert('XMLHTTP nicht verfügbar!');
			return false;
		}
		http_request.onreadystatechange = schreibInhaltUsername;
		http_request.open('GET', 'check_username.php?q='+document.forms[0].username.value, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(null);
	}


function schreibInhaltUsername() {
	if (http_request.readyState == 4) {
		if(document.forms[0].username.value == "")
		{ document.getElementById('usercheck').innerHTML = "";}
		else if(http_request.responseText == '<img src="images/ampel_rot.jpg"> Name vergeben')
		{ document.forms[0].elements[2].style.backgroundColor = '#F0AA9F';
		  document.getElementById('usercheck').innerHTML = http_request.responseText;
		  document.getElementByName('usercheck').innerHTML = http_request.responseText;}
		else { document.getElementById('usercheck').innerHTML = http_request.responseText;
				document.forms[0].elements[2].style.backgroundColor = '#FFFFFF';}
		http_request = ""
	}
}
function oberusernametest(){
if(document.forms[0].elements[2].value=="" || document.getElementById('usercheck').innerHTML == '<img src="images/ampel_rot.jpg"> Name vergeben'|| document.forms[0].elements[2].style.backgroundColor == '#F0AA9F')
{ unruck = true;
return unruck;}
else if(document.forms[0].elements[2].style.backgroundColor = '#FFFFFF')
{ unruck = false;
return unruck;}
else { unruck = false;
return unruck;}
}

function checkform(){
	check = true;
	if (document.forms[0].elements[0].value==""){
		document.forms[0].elements[0].style.backgroundColor = '#F0AA9F';
		check = false;
		}
		else {
		document.forms[0].elements[0].style.backgroundColor = '#FFFFFF';
		}
	if (document.forms[0].elements[1].value==""){
		document.forms[0].elements[1].style.backgroundColor = '#F0AA9F';
		check = false;
		}
		else {
		document.forms[0].elements[1].style.backgroundColor = '#FFFFFF';
		}
	if (oberusernametest()){
		document.forms[0].elements[2].style.backgroundColor = '#F0AA9F';
		check = false;
		}
		else {
		document.forms[0].elements[2].style.backgroundColor = '#FFFFFF';
		}
	if (document.forms[0].elements[3].value==""){
		document.forms[0].elements[3].style.backgroundColor = '#F0AA9F';
		check = false;
		}
		else {
		document.forms[0].elements[3].style.backgroundColor = '#FFFFFF';
		}
	reg = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$');
	if (document.forms[0].elements[4].value == "" || reg.test(document.forms[0].elements[4].value) == false){
		document.forms[0].elements[4].style.backgroundColor = '#F0AA9F';
		check = false;
		}
		else {
		document.forms[0].elements[4].style.backgroundColor = '#FFFFFF';
		}	
	return check;
}


</script>

vielen dank für die hilfe.

lg
 
hoppla, das war wohl noch drin vom verzweifelten ausprobieren dass das endlich klappt. :mad:

naja, auf jedenfall hat dies das problem nicht gelöst, im IE wird nach dem klick auf registrieren das feld vom usernamen (obwohl es vor dem abschicken rot war und die meldung da ist -> name vergeben) wieder weiss und man könnte einen zweiten usernamen mit demselben namen registrieren.

hat sonst jemand eine lösung?

gruess bazzo
 
Moin,

folgender Vergleich schlägt fehl:
Code:
document.getElementById('usercheck').innerHTML == '<img src="images/ampel_rot.jpg"> Name vergeben'

Der IE sieht das innerHTML des Elements intern so:
Code:
<IMG src="images/ampel_rot.jpg">

Ich würde generell diesen Vergleich herausnehmen, der ist zu fehleranfällig(wie man ja sieht :-) )

Wenn du statt dem Zuweisen einer Hintergrundfarbe bsp. einen Klassennamen zuweist(für den du die entsprechende Hintergrundfarbe definiert hast), dürfte das weniger Probleme geben :)
 
so, hab mal wieder dran gearbeitet. klappt super! mache es nun mit 'class' verändern etc.
vielen dank für die hilfe.

grüsse aus der schweiz :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück