Skript geht lokal aber auf dem Server nicht

Mako

Mitglied
Hi Leute,

ich bin etwas verwirrt. Mein Login-Skript funktioniert Lokal einwandfrei. Nur wenn ich es auf den Server spiele, dann klappt es mal und mal nicht. Hat jemand vielleicht eine Erklärung dafür?

Hier der Code:
PHP:
include( "connect_db.php" );
$ergebnis = "SELECT * FROM phpbb_users WHERE (username = '".$_POST["name"]."') AND (user_password = '".md5($_POST["passwort"])."')";
$result = mysql_query ( $ergebnis );
if ( mysql_num_rows ( $result ) == true )
{
session_start();
session_register ( "login" );
session_register ( "nickname" );
$nickname = $_POST["name"];
$login = "666";
header ( "LOCATION: pong.php" );
}
else {
header ( "LOCATION: fehler.php" );
}

Die Feldernamen habe ich überprüft, es liegt weder ein Tippfehler noch eine Verwechslung vor.

Danke im Voraus
 
Hi,

@simrml: Klappt leider auch damit nicht.

@Ben Ben: Das Problem ist, dass ich obwohl der Benutzername und das Passwort stimmt ich immer wieder auf die fehler.php weitergeleitet werde und nicht auf die pong.php.

Lokal geht das Ganze aber. Kann es sein dass der Part bei mysql_num_rows einen Fehler enthält. Wenn ich mir $result anzeigen lasse bekomme ich als Ausgabe Resource id #3. Ist das korrekt wenn ich dann mit true und false den Wert checke oder müsste es mir da sowieso eine Zahl ausgeben?

Grüße und Danke
 
ich hätte das true sowieso weggelassen, da

PHP:
if ( mysql_num_rows ( $result ) )

das gleiche bewirkt.

Was gibt dir denn ein var_dump(mysql_num_rows ( $result )) aus?

Wegen der Sessionvariablen, auch wenn das nicht unmittelbar das Problem betrifft,, ich würde sie so zuweisen: $_SESSION['variable1'] = $wer1; usw
 
Hast du richtig erkannt. Da liegt wohl der Fehler. mysql_num_rows liefert die Anzahl der Zeilen des Abfrageergebnisses (bei dir 3). Also kannst du dort nicht mit true/false vergleichen sondern z.B. mit ">= 0" oder so.
True wird mit 1 gleichgesetzt. Also würdest du zur Zeit nur in die "Richtig-Schleife" kommen, wenn 1 Zeile aus deiner Abfrage geliefert wird.
 
@Borderline: Das stimmt nicht ganz. Da er nur auf == true verlgeich muss es nur ein von 0 verschiedener Wert sein, dieser wird als true gewertet. Würde er auch noch auf den Datentyp mit === verlgleichen wäre das ein Problem. Denn if( mysql_num_rows() ) trifft dem zufolge dann zu, wenn der Rückgabewert != 0 ist.

Die 3 ist auch nicht die Anzahl der Datenstäze, was auch logisch falsch wäre, denn so gäbe es 3 Nutzer (gleich im Benutzernamen und Passwort). Es ist nur eine Ressource mit der ID 3.
 
Hi,

danke Leute für die schnelle hilfe. Also wenn ich das mit var_dump ausgeben lasse bekomme ich "in(1)" als ERgebnis. Müsste doch eigentlich also alles passen. GEht aber dennoch nicht.

Nachtrag: Das ist echt total unglaublich. Gerade eben habe ich es nochmals probiert und jetzt gings wieder ohne, dass ich was geändert hatte. Das var_dump habe ich halt dazugetan aber mehr auch nicht. An was kann das liegen, das es einmal geht und einmal nicht. Am Code demnach wohl kaum. Oder doch?

Grüße Markus
 
Zuletzt bearbeitet:
Echt mysteriös, so wie es scheint muss das an der Session liegen. Manchmal setzt er sie und manchmal nicht. Bei meinem Provider ist session.auto_start() auf off gesetzt. Ich eröffne aber sowieso immer mit session_start();

Hat irgendwer eine Idee, selbiges Problem oder eine Lösung.

Ich verzweifle hier. Einmal gehts und einmal nicht. Das kann man dem User doch nicht antun.

Hier nochmal der neue Code. Die Sessionerstellung wurde ein wenig umgestellt:

PHP:
$ergebnis = "SELECT * FROM phpbb_users WHERE (username = '".$_POST["name"]."') AND (user_password = '".md5($_POST["passwort"])."')";
$result = mysql_query ( $ergebnis );
var_dump(mysql_num_rows ( $result ));
if ( mysql_num_rows ( $result ) )
{
session_start();
$_SESSION['login'] = '666';
$_SESSION['nickname'] = $_POST["name"];

header ( "LOCATION: pong.php" );

Grüße Markus
 
Zurück