Jquery -> Json -> PHP überprüfung funktioniert nicht

bassdriver

Grünschnabel
Hallo zusammen,

ich versuche bei einer Regestrierung zu überprüfen,
ob der Loginname bereits vergeben ist.


Jquery:
Code:
	var regform = $('#regform');
	var msg = function (nachr){
		regform.find('#reg_info')
		.html(nachr);
	}

	$('.reg_loginname').keyup(function (){
		var valu = this.value;
		$.getJSON("design/jpreq/loginname.php", {id: valu}, function(data) {
			if(data.ln == 'ok'){
				$(this).css('border','1px solid green');
				msg('okay');
			}else{
				$(this).css('border','1px solid red');
				msg('Der Loginname ist bereits vergeben!');
			}
		});
	});

PHP:
PHP:
$host = "xxx";
$user = "xxx";
$pwd = "xxx";
$dbase = "xxx";

$sqlconn = mysql_connect($host,$user,$pwd);
$sqlconn = mysql_select_db($dbase);

$sqlconn;

$name = htmlentities($_GET['id']);

$loginnamen = mysql_num_rows(mysql_query("SELECT * FROM hp_user WHERE loginname = '$name'"));


if($loginnamen != 0){
	$json = array(
	'ln' => 'notok');
}else{
	$json = array(
	'ln' => 'ok');
}

echo json_encode($json);

Leider funktioniert das überhaupt nicht,
die Firebugkonsole giebt folgenden Fehler aus:
"500 Internal Server Error"...

Was ist daran falsch?

LG
 
Hallo,

erstmal würde ich dir raten das [phpf]htmlentities[/phpf] unbedingt gegen [phpf]mysql_real_escape_string[/phpf] auszutauschen!

Probiere mal, ob dein Skript funktioniert, wenn du es direkt mit deinem Browser aufrufst.
 
danke,
ich habe jetzt mal htmlentities() -> mysql_real_escape_string() ersetzt.

Sobald ich print_r ($json); eingebe, erhalte ich auch eine ausgabe, klar um das array auszulesen,
sollte ich durch das echo json_encode($json); ebenfalls eine Ausgabe erhalten?
Dort erhalte ich wohl keine....
 
Hi,
ich hab mir dein Problem heute "dank" Langeweile im Zug mal etwas angesehen.

Auf meiner XAMPP - Installation auf meinem Netbook klappt das ganze einwandfrei.

Ein "500 Internal Server Error" heißt erstmal, dass die Ausführung des PHP-Scripts auf dem Server Probleme macht. Eine häufige Ursache ist eine falsche Rechtevergabe für die Scripte, es gibt aber auch noch zig andere Ursachen für diesen Fehler. Wenn du an die Errorlogs des Servers kommst können diese weiterhelfen.

Was mein Vorposter schon schrieb:
Was passiert wenn du das PHP-Script direkt im Browser aufrust also z.b
URL/design/jpreq/loginname.php?id=name
Bekommst du dann ebenfalls einen "500 Internal Server Error"?

Beim Testing ist mir noch etwas anderes aufgefallen.
Wenn in dieser Zeile:
PHP:
$loginnamen = $loginnamen = mysql_num_rows(mysql_query("SELECT * FROM hp_user WHERE loginname = '$name'"));
der mysql_query fehlerhaft ist gibt dieser boolean false aus. mysql_num_rows bekommt ein boolean false geliefert und erzeugt ein "Warning". Je nach Servereinstellung wird das Script dennoch weiter ausgeführt und mysql_num_rows(false) ergibt entgegen der PHP-Dokumentation kein "false" sondern "NULL".
Da if(NULL == 0) ein TRUE ergibt liefert das Script dem Benutzer trotz eindeutigem Fehler in der SQL-Abfrage d ein ok zurück. In der IF-Abfrage also besser:

PHP:
if($loginnamen > 0){
    //ok
}else{
   //not ok
}

Solche Verschachtelten Abfragen und Konstrukte sind natürlich platzsparend und vllt. auch übersichtlicht. Für Debugging, Fehlersuche und Programmanalyse sind sie jedoch äußerst störend.
Ich kann dir nur empfehlen, dein Script ordentlich zu debuggen, um zu sehen an welcher Stelle Fehler auftreten. Für einen Livebetrieb sollten diese Fehlerquellen später sowieso abgefangen werden (natürlich nicht in dieser Form). Ums mal leicht übertrieben darzustellen:

PHP:
$host = "xxx";
$user = "xxx";
$pwd = "xxx";
$dbase = "xxx";

$sqlconn = mysql_connect($host,$user,$pwd);
if(!$sqlconn){
die('sql connect error');
}
$select_db = mysql_select_db($dbase);
if(!$select_db){
die('select database error');
}


if(!empty($_GET['id'])){
$name = mysql_real_escape_string($_GET['id']);

$result = mysql_query("SELECT * FROM hp_user WHERE loginname = '$name'");
if(!$result){
die('mysql select error');
}
$count_result = mysql_num_rows($result);
if(!$count_result){
die('error count');
}

//[...and so on..]

}
else{
 die('no id given');
}

Schau mal ob du den Fehler auf diese Weise findest.

Gz
geheim
 
hallo,

vielen dank, allerdings erhalte ich keine Fehlermeldung.
Ich benutze Plesk auf dem Server,
da Plesk bereits mit File "sprüngen" bereits probleme macht (../) habe ich
derzeit die Vermutung, dass dort dieses "JSON" blockiert oder sogar nicht enthalten ist.
Ich werde mal dieses Script local versuchen, allerdings bin ich zur Zeit krank -.-,
vondaher schau ich mal morgen..

Bin mal gespannt

LG
 
Zurück