php: header() problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfrage
ansatz
ausprobieren
code
dank
datenbank
datum
fehler
fehlermeldung
funktionieren
header
http
letzten gefundenen datensatz
login
pack
punkt
schnelle antwort
sicherheit
status
weiterleitung
-
Hallo,
ich habe vor längerer Zeit ein kleines login script geschrieben. Dieses gab zur Weriterleitung meta daten aus, dies wollte ich nun mit der header() funktion anders lösen, doch leider funktioniert das ganze nicht.
Ich steh grad n bischen auf n Schlauch hoffe ihr könnt mir Helfen
<?php session_start(); $username = $_POST['username']; $password = $_POST['password']; if ($username&&$password) { $connect = mysql_connect("...","...","..."); mysql_select_db("..."); $query = mysql_query("SELECT * From users WHERE username='$username'"); $numrows = mysql_num_rows($query); if ($numrows!=0) { $username = htmlentities($username); $password = htmlentities($password); while ($row = mysql_fetch_assoc($query)) { $dbusername = $row['username']; $dbpassword = $row['password']; } if ($username==$dbusername&&md5($password)==$dbpassword) { $_SESSION['username']=$dbusername; header('Location: http://deep-shades.de/design3/member.php'); } else header('Location: http://deep-shades.de/design3/login.php?status=wrongpasswd&&user=$username'); } else header('Location: http://deep-shades.de/design3/login.php?status=userdosntexist'); } else header('Location: http://deep-shades.de/design3/login.php?status=userandpasswd&&user=$username'); ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Mal ganz davon abgesehen, dass nach dem letzten else eine abschließende Klammer fehlt, ist das Ganze sehr suboptimal bis unsicher gelöst.
-
erstmal danke für die schnelle Antwort,
ich fühl mich gerade echt n bischen dämlich ,
wo fehlt denn da ne Klammer?
ja ich weiß, das ich mich mit dem thema Sicherheit noch mehr beschäftigen muss -
Wenn du php5 hast schreibe mysqli für mysql ist sicherer und schneller .... und wenn du dich mit der Datenbank verbindest sollte auch noch ein or die hin...
$connect = mysqli_connect("...","...","...") or die('Error connecting to MySQL server.');
-
jup danke ,
normalerweise binde ich mit include() eine .php datei ein wo hinten dran auch or die steht. Dies habe ich jetzt nur zwecks fehler analyse raus genommen.
Das mit mysqli werde ich ausprobieren sobalt FTP wieder funktioniert.
mein eigentliches Problem besteht jedoch immer noch -
Du solltest VOR dem Absetzen der Abfrage an die DB die übergebenen Daten escapen (mysql_real_escape_string), um die Möglichkeit von SQL-Injection zu unterbinden. Außerdem erscheint mir die Verschachtelung misslungen zu sein, es sein denn, Du willst wirklich nur den letzten gefundenen Datensatz untersuchen, in dem Fall solltest Du aber sortieren. Und was genau funktioniert nicht, bekommst Du eine Fehlermeldung?
-
ja wie gesagt mit dem thema Sicherheit muss ich mich noch mehr beschäftigen. aber danke für die Hinweise.
Die weiterleitung Funktioniert nicht, fehlermeldung bekomme ich keine. -
Wie soll denn etwas wie
oderheader('Location: http://deep-shades.de/design3/login.php?status=wrongpasswd&&user=$username');
funktionieren?header('Location: http://deep-shades.de/design3/login.php?status=userandpasswd&&user=$username');
-
du meinst das mitgeben von Variablen (GET) ?
Ich habe das vorher extern getestet und es funktioniert und selbst wenn nicht müsste ja zumindestens die Weiterleitung bei erfolgreicher Anmeldung funktionieren.
weil da wird so weitergeleitet
header('Location: http://deep-shades.de/design3/member.php');
Beitrag zuletzt geändert: 8.4.2011 20:33:17 von deep-shades -
Ich bin noch etwas zu müde dafür, aber so ungefähr würde ich es machen:
<?php session_start(); $username = $_REQUEST['username']; $password = $_REQUEST['password']; if (!empty($username) && !empty($password)) { $connect = @mysql_connect ("...", "...", "...") or die ('Die Verbindung zum Datenbankserver konnte nicht hergestellt werden: <br /><br />'.mysql_error()); @mysql_select_db("...") or die ('Die Datenbank konnte nicht verwendet werden: <br /><br />'.mysql_error()); $query = ("SELECT username, password FROM users WHERE username='".mysql_real_escape_string($username)."' AND password = '".$password."'"); $result = @mysql_query($query) or die ('Der Query konnte nicht ausgeführt werden: <br /><br />'.mysql_error()); if (mysql_num_rows ($result) > 0) { $data = mysql_fetch_array($result); $_SESSION['username'] = $data['username']; header('Location: member.php'); } else { header('Location: login.php?status=userdosntexist&username='.urlencode($username)); } } else { header('Location: login.php?status=userandpasswd'); } ?>
-
schöner Ansatz und danke für die ganze Hilfe .
und zu meinem eigentlichen Problem, wo ja leider kein lösungs Vorschlag kam. ein exit; hinter jedem header() hatt das Problem gelöst. -
Das unterdrückt den Fehler vielleicht, lösen tut es das aber nicht.
-
mhh ok , ich hab dein Script gerade mal lokal getestet
Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
EDIT: erstmal Wochenende jetzt
Beitrag zuletzt geändert: 9.4.2011 12:41:30 von deep-shades -
deep-shades schrieb:
In einfachen Anführungszeichen wird nicht der Variableninhalt, sondern der Variablenname übergeben.
du meinst das mitgeben von Variablen (GET) ?
gibt aus: Hallo $name$name = 'Tom'; echo 'Hallo $name';
gibt aus: Hallo Tom$name = 'Tom'; echo "Hallo $name";
am Besten aber so:
gibt aus: Hallo Tom$name = 'Tom'; echo 'Hallo '.$name;
Der Punkt verkettet Zeichenketten, Zahlen, Funktionsrückgaben, Variablen, usw.
deep-shades schrieb:
Dann leitest du auf die Seite um, die weiterleitet, oder auf eine andere Seite, die immer wieder auf sich umleitet.
mhh ok , ich hab dein Script gerade mal lokal getestet
Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
Beitrag zuletzt geändert: 9.4.2011 13:06:01 von drafed-map -
Schlauerweise solltest du das o.g. Script nicht login.php nennen Und falls doch, entferne den letzten Header und pack stattdessen dein Formular da rein.
Beitrag zuletzt geändert: 9.4.2011 13:39:38 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage