Header Problem
Michael Hahn
- php
1 soleil-1 Dennis0 Dennis0 Michael Hahn0 dedlfix
1 dedlfix0 MudGuard
2 Tobias Kloth
Hi,
ich weiß, von diesem Problemem habt ihr eine ganze Menge. Aber ich habe in der Suche nichts passendes gefunden, was mein Problem lösen könnte.
Daher hier mein Problem.
Ich habe ein Loginformular. Auf der nächsten Seite werden meine Daten gechekct und wenn sie richtig sind in einer Session abgespeichert.
Aber ich habe folgende Probleme:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /opt/lampp/htdocs/tutorials_center/check_login.php on line 23
Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/tutorials_center/check_login.php:23) in /opt/lampp/htdocs/tutorials_center/check_login.php on line 42
und hier mein Code:
<?php
// Session starten
session_start ();
// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("localhost", "root", "");
if (!mysql_select_db ("tutorials", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
$sql = "SELECT ".
"id ,username, password, admin, mod, aktiv, gesperrt ".
"FROM ".
"user ".
"WHERE ".
"(username like '".$_REQUEST["username"]."') AND ".
"(password = '".$_REQUEST["password"]."')";
$result = mysql_query ($sql);
if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);
// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["id"];
$_SESSION["user_username"] = $data["username"];
$_SESSION["user_password"] = $data["password"];
$_SESSION["user_admin"] = $data["admin"];
$_SESSION["user_mods"] = $data["mod"];
header ("Location: tutorials_interface.php");
}
else
{
header ("Location: login.php?fehler=1");
}
?>
Hi,
Man kann nur header schicken, wenn noch kein weiterer Output abgeschickt wurde. Da du aber einen Fehler in deiner Abfrage hast und dein Skript den Fehler an den Browser ausgibt, gibt es halt schon Output, bevor Du den header abschickst.
Wenn Du also die Fehlermeldung los wirst, sollte auch das Header-Problem geloest sein.
Um den SQL-Fehler zu beseitigen, wuerde ich mir mal die Query auspsucken lassne und die separat ausprobieren.
Soleil
Hi Michael,
ich weiß, von diesem Problemem habt ihr eine ganze Menge. Aber ich habe in der Suche nichts passendes gefunden, was mein Problem lösen könnte.
Dieses Problem gibt es ziemlich oft hier, oft auch mit dem Titel "header problem". Das du also nichts gefunden hast, was dir weiter helfen würde, glaube ich dir nicht. Du hast entweder nicht richtig gesucht oder dir die Postings nicht richtig durchgelesen.
Das in deinem Fall etwas ausgegeben wird, liegt an der Fehlermeldung, die mysql_num_rows() ausgibt. Das Ausgeben diese Fehlermeldung von PHP ist auch nichts anderes, als wenn du echo "foobar"; geschrieben hättest.
MfG, Dennis.
Hi Michael,
Kleine Ergänzung:
$result = mysql_query ($sql);
Grundsätzlich solltest du an dieser Stelle immer schreiben:
$result = mysql_query($sql) OR die(mysql_error());
Aber weshalb ich jetzt eigentlich noch mal schreibe:
Dein SQL ist anfällig für SQL-Injections - wenn ich dir jetzt in $_REQUEST["username"] etwas unerwartetes unterjuble, kann es unter Umständen sogar sein, dass ich deine ganze Datenbank löschen kann.
Auch hierzu findest du weitere Informationen im Archiv - das wichtigste jedoch hier: Jage Daten die von außen kommen immer durch mysql_real_escape_string().
MfG, Dennis.
Hi Dennis,
ich habe das jetzt mit der Sicherheit gemacht. Jetzt bekomme ich eine Fehlermeldung:
Parse error: parse error, unexpected T_VARIABLE in /opt/lampp/htdocs/tutorials_center/check_login.php on line 12
Wo kann der fehler sein?:
$sql = sprintf("SELECT id ,username, password, admin, mod, aktiv, gesperrt FROM user WHERE username='."$_REQUEST["login"]."' AND password='".$_REQUEST["password"]."'",
mysql_real_escape_string($username),
mysql_real_escape_string($password));
echo $begrüßung;
$sql = sprintf("SELECT id ,username, password, admin, mod, aktiv, gesperrt FROM user WHERE username='."$_REQUEST["login"]."' AND password='".$_REQUEST["password"]."'",
mysql_real_escape_string($username),
mysql_real_escape_string($password));
> Wo kann der fehler sein?:
Kurz vor dem $\_REQUEST["login"]
echo "$verabschiedung $name";
Danke habe den Fehler gefunden...
echo $begrüßung;
Grundsätzlich solltest du an dieser Stelle immer schreiben:
$result = mysql_query($sql) OR die(mysql_error());
Grundsätzlich sollte man das _so_nicht_ schreiben, wenn man seine Anwender nicht mit einem abgebrochenen Script und einer Fehlermeldung konfrontieren will. Solch eine Meldung passt meist auch nicht ins Corporate Design :-) [*]
Besser hingegen ist, diese Fehlermeldungen in ein Logfile zu schreiben oder vielleicht auch einem Administrator zu mailen, und das Script mit einer hübschen Vertröst-Meldung ordentlich zu Ende zu führen.
echo "$verabschiedung $name";
[*] Außerdem ist das auch wieder eine Ausgabe, die dann die zweite Fehlermeldung des OPs nach sich zieht.
Hi,
$result = mysql_query($sql) OR die(mysql_error());
[*] Außerdem ist das auch wieder eine Ausgabe, die dann die zweite Fehlermeldung des OPs nach sich zieht.
Nein, da wegen des "die" die header-Funktion nicht mehr zum Zug kommt.
cu,
Andreas
Hallo Michael,
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /opt/lampp/htdocs/tutorials_center/check_login.php on line 23
bei so einer Meldung solltest du _immer_ mysql_error() befragen.
Warning: Cannot modify header information - [...]
das ist nur ein Folgefehler.
header ("Location: tutorials_interface.php");
[...]
header ("Location: login.php?fehler=1");
das sind ungültige Header - hinter "Location:" \_muss\_ eine vollständige URL kommen.
Grüße aus Nürnberg
Tobias