Problem mit Error 500

Trash

Erfahrenes Mitglied
Moin,
ich habe ein Formular, dass im Endeffekt dafür sorgen soll das der User eine E-Mail erhält mit der er sein Passwort zurücksetzen kann.

Nun stehe ich ganz am Anfang meinen bisherigen Code mit "Ajax-Funktionalität" lebendiger zu machen. Wenn ich den Code so lasse:

Code:
<?php
if (isset($_GET['form']) && ($_GET['form'] == "sendpw")) {
header('Content-Type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
?>
<response>
<error>false</error>
<text>Wir haben Dir eine E-Mail an geschickt. Klicke auf den Link in der E-Mail und bestätige damit das Zurücksetzen deines Passworts.</text>
</response>
<?php
}
?>

Funktioniert das auch, aber ich benötige Logik in diesem Abschnitt und habe den eigentlichen Mechanismus entfernt und einfach mal so angefangen (um dem Fehler langsam auf die Spur zu kommen):

Code:
if (isset($_GET['form']) && ($_GET['form'] == "sendpw")) {

		header('Content-Type: text/xml');
		echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
		
		try {
		
			$user = user::getObjectByEmail($_GET['email']);
			?>
			<response>
			<error>false</error>
			<text>Kein Fehler.</text>
			</response>
			<?
			} catch(Exception $e) {
				?>
				<response>
				<error>true</error>
				<text>Fehler.</text>
				</response>
				<?
			}
	

	<?
}//if ($_GET['form'] == "sendpw")

Wenn ich nun das E-Mail-Feld leer lasse und einfach abschicke, müsste ja eine Exception geworfen werden (das wird auf jeden Fall in getObjectByEmail gemacht) - aber ich bekomme nur den Error: 500 zurück. Woran liegt das? Hat jemand eine Idee?

Danke!
 
Bekommst du auch eine Fehlermeldung dazu? Das könntest du mit Firebug, HttpFox oder ähnlichem mal angucken. Aber der Code, den du uns hier zeigst, funktioniert. Das Problem muss wo anders liegen.

PHP:
<?php

if (isset($_GET['form']) && ($_GET['form'] == "sendpw")) {

	header('Content-Type: text/xml');
	echo '<?xml version="1.0" encoding="utf-8"?>';
	
	try {
		throw new Exception("Foo");
		
		?>
			<response>
			<error>false</error>
			<text>Kein Fehler.</text>
			</response>
		<?
	} catch(Exception $e) {
		?>
			<response>
			<error>true</error>
			<text>Fehler.</text>
			</response>
		<?
	}
}
?>

Das einzige, was deinen und meinen Code unterscheidet, ist die user-Klasse.

Edit: Im PHP Forum wären die Chancen wohl größer.
 
Danke für die Antwort. Ich werde das heute Abend mal testen.

Das eigentliche Script sieht folgendermaßen aus, kann es daran liegen?

Code:
<script language="JavaScript" type="text/javascript">

	var ajaxObject = false;

	function ajaxCheck(url) {
		ajaxObject = false;

		if(window.XMLHttpRequest) {
			ajaxObject = new XMLHttpRequest();
			if(ajaxObject.overrideMimeType) {
				ajaxObject.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) {
			try {
				ajaxObject = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					ajaxObject = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		
		if(!ajaxObject) {
			alert('Sorry, AJAX does not work');
			return false;
		}

		ajaxObject.onreadystatechange = ajaxCheckResponse;

		document.getElementById('btn').disabled=true;
		document.getElementById('activeJob').innerHTML = '<img src="includes/images/ajax-loader.gif" />';
		
		ajaxObject.open('GET', url, true);
		ajaxObject.send(null);

		return true;
	}

	function ajaxCheckResponse() {
		if(ajaxObject.readyState == 4) {
			if(ajaxObject.status == 200) {
				var xmlData = ajaxObject.responseXML.documentElement;
				
				if(xmlData.getElementsByTagName("error")[0].firstChild.data == 'false'){
					var text = xmlData.getElementsByTagName("text")[0].firstChild.data;
					document.getElementById('activeJob').innerHTML = '';
					document.getElementById('additionalTextDiv').innerHTML = text;
				} else {
					document.getElementById('activeJob').innerHTML = '';
					document.getElementById('btn').disabled= false;
					var text = xmlData.getElementsByTagName("text")[0].firstChild.data;
					document.getElementById('additionalTextDiv').innerHTML = text;
				}
			} else {
				alert('error: ' + ajaxObject.status.toString());
				return;
			}
		}
	}

</script>
 
Du kannst in der Regel über das Webserver-Log rausfinden, was den 500er verursacht hat. 500 bedeutet ein fataler Scriptfehler oder fehlerhaft eingebundene Webserver-Erweiterungen. Kann man bspw. beobachten, wenn man versucht, Rewrite-Regeln zu verwenden, ohne das mod_rewrite geladen ist.

Steht aber wie schon gesagt normalerweise alles brav dokumentiert in den Webserver-Logfiles.
 
Moin,
wo genau kann ich in Firebug sehen, was den Fehler verursacht hat? Oder wo finde ich auf einem Mac die Logfiles von FF?

Dort steht bisher einfach:

status: 500
statusText: "Internal Server Error"

Danke!
 
Irgendwie bin ich nicht so richtig wach heute. Danke, das Log hat alles verraten. Guck mal in den oberen Code, ich öffne <? zweimal :)

Code:
              <response>
                <error>true</error>
                <text>Fehler.</text>
                </response>
                <?
            }
    
 
    <?
}

DANKE!
 
Wow, fehlerhaftes XML verursacht nen 500er. Was es nicht alles gibt. Muss ich mir merken.

Edit: Was für ein Schmarrn, den ich da geschrieben habe.... Ist ja gar kein XML.

Im übrigen würde ich dir aber vorschlagen _keine_ short_open_tags zu verwenden. Die sind nämlich nicht überall erlaubt.
 
Zurück