Loginbereich
Der_NEWbie
- datenbank
0 King^Lully0 Der_NEWbie
0 steckl0 dedlfix
Hallo,
ich will auf meiner Seite einen Internen bereich anbieten.
Das Registrationsscript war kein Problem, aber das Loginscript macht mir zu schaffen.
Ich dachte mir das so:
Man hat alle Daten eingegeben, drückt auf LOGIN und kommt auf eine login.php .
Die Query(= die ganze Seite) sieht bei mir so aus:
<?php
include "config.php";
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die('Keine Verbindung zur Datenbank. Fehlermeldung:'.mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die('Konnte Datenbank nicht benutzen, Fehlermeldung: '.mysql_error());
$mail = $_POST['mail'];
$passwort = $_POST['passwort'];
$sql = "SELECT * FROM users
WHERE EMailAdresse
LIKE CONVERT(_utf8 '$mail' USING latin1) COLLATE latin1_general_ci AND pw1
LIKE CONVERT(_utf8 '$passwort' USING latin1) COLLATE latin1_general_ci";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if($row) {
//Hier muss etwas geincludet werden, oder eine automatische
//Weiterleitung gemacht werden (Siehe Frage unten)
} else {
die(include "falscherlogin.htm");
}
?>
Meine Fragen:
Ist das in etwa richtig?
Was muss in den if Teil der if($row) ?
MfG
$sql = "SELECT * FROM
users
WHEREEMailAdresse
LIKE CONVERT(_utf8 '$mail' USING latin1) COLLATE latin1_general_ci ANDpw1
LIKE CONVERT(_utf8 '$passwort' USING latin1) COLLATE latin1_general_ci";
Meine Fragen:
Ist das in etwa richtig?
Was muss in den if Teil der if($row) ?
Wenn Du nicht erst einmal die involvierten Tabellen inkl. Schema derselben vorstellst, dürfte ein Statement schwer fallen.
Immer auch den SQL-Code anlegen, der tatsächlich abgesandt wird, kein PHP-Gefriemel bitte.
Hallo,
Wenn Du nicht erst einmal die involvierten Tabellen inkl. Schema derselben vorstellst, dürfte ein Statement schwer fallen.
Ist das nicht klar?
Der Benutzer muss seine E-Mail Adresse und ein Passwort eingeben.
Die Tabelle sieht also so aus:
+---------------+----------+
|E-Mail-Adresse | Passwort |
+---------------+----------+
|test@test.info | KLO |
+---------------+----------+
Immer auch den SQL-Code anlegen, der tatsächlich abgesandt wird, kein PHP-Gefriemel bitte.
Bisher hatte ich ein echo in dem if-Teil stehen, der in Kraft trat wenn ich die richtigen Daten eingab.
MfG
Die Tabelle sieht also so aus:
+---------------+----------+
|E-Mail-Adresse | Passwort |
+---------------+----------+
|test@test.info | KLO |
+---------------+----------+Immer auch den SQL-Code anlegen, der tatsächlich abgesandt wird, kein PHP-Gefriemel bitte.
Bisher hatte ich ein echo in dem if-Teil stehen, der in Kraft trat wenn ich die richtigen Daten eingab.
Mja, also Du hast eine Tabelle mit zwei Datenfeldern, die den (die) Nutzer repräsemtier(t)en. Dann wäre also beim Login nur E-Mailadresse und Password abzufragen. Stimmt beides überein (PK vermutlich E-Mail-Adresse), dann wird die Sitzung per PHP oder autorisiert.
Dazu bräuchten wir noch eine Nutzer-Registrierung und gut ist.
Eventuell noch sowas für die Leute, die ihr Password vergessen.
Unicode-Unterstützung vorhanden, tja sieht ganz OK aus, was war genau die Frage?
Was ich in den if-Teil machen soll.
Ich meine, wie soll das Script, was dann wahrscheinlich in den if-Teil kommt, wissen wie der User heist?
Hi,
$mail = $_POST['mail'];
$passwort = $_POST['passwort'];$sql = "SELECT * FROM
users
WHEREEMailAdresse
LIKE CONVERT(_utf8 '$mail' USING latin1) COLLATE latin1_general_ci ANDpw1
LIKE CONVERT(_utf8 '$passwort' USING latin1) COLLATE latin1_general_ci";$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);if($row) {
//Hier muss etwas geincludet werden, oder eine automatische
//Weiterleitung gemacht werden (Siehe Frage unten)
} else {
die(include "falscherlogin.htm");
}
?>Meine Fragen:
Ist das in etwa richtig?
Die Beschreibung zu mysql_fetch_assoc() sollte dir weiterhelfen, wie du auslesen kannst, welcher User sich angemeldet hat. Anschließend kannst du dementsprechend die Seite anzeigen lassen, die für registrierte User bestimmt ist.
Es wäre auch besser, wenn du das Passwort verschlüsselt in der Datenbank abspeichern würdest und dann vor dem Vergleich das eingegebene Passwort ebenfalls verschlüsseln würdest. Auch ist es wohl nicht nötig "select * ..." auszulesen, sondern es reicht, die Felder auszulesen, die du tatsächlich brauchst, um die Seite dann dementsprechend anzuzeigen.
Außerdem ist es nicht die "feine" Art, bei der Eingabe des falschen Passworts das Script gleich mit die() abzuwürgen. Es wäre in deinem Fall ausreichend, einfach nur die HTML-Datei zu includen, die angezeigt werden soll.
Was muss in den if Teil der if($row) ?
Unter Anderem der HTML-Quelltext, der angezeigt werden soll, wenn sich ein User korrekt einloggt.
mfG,
steckl
echo $begrüßung;
$mail = $_POST['mail'];
$passwort = $_POST['passwort'];
Dieses Umkopieren sieht man in vielen Scripten, und überall ist es unnötig.
$sql = "SELECT * FROM
users
WHEREEMailAdresse
LIKE CONVERT(_utf8 '$mail' USING latin1) COLLATE latin1_general_ci ANDpw1
LIKE CONVERT(_utf8 '$passwort' USING latin1) COLLATE latin1_general_ci";
Wozu betreibst du diesen Konvertierungsaufwand? MySQL macht das von allein, wenn die Kodierung der Felder nicht mit der der Verbindung übereinstimmt. Kümmere dich lieber, dass du diese Verbindungskodierung klar definierst: SET NAMES ... Und wenn du schon mit UTF-8 arbeitest, sorge für UTF-8-Unterstützung auf ganzer Linie, sonst ist es unnötig, weil du den Vorteil bei einer Konvertierung auf LatinX/ISO-8859-X wieder verlierst.
Was soll der Vergleich mit LIKE? Hast du dir mal überlegt, was passiert, wenn jemand LIKE-Jokerzeichen wie % in das E-Mail- und/oder Passwort-Feld eingibt?
Und auch du sorgst nicht dafür, dass eingegebene Sonderzeichen korrekt behandelt werden, wenn sie in das SQL-Statement eingefügt werden. Beachte bitte das Kapitel Database Security, dort besonders SQL Injection, und wende dann mysql_real_escape_string() auf die einzufügenden Nutzereingaben an. Beachte ebenfalls das Kapitel Magic Quotes. Dieses Feature gibt vor, einen Schutz gegen SQL-Injection zu bieten, ist aber nicht richtig auf MySQL zugeschnitten.
if($row) {
//Hier muss etwas geincludet werden, oder eine automatische
//Weiterleitung gemacht werden (Siehe Frage unten)
} else {
die(include "falscherlogin.htm");
}
Was muss in den if Teil der if($row) ?
Vermutlich das, was passieren soll, wenn der Login erfolgreich war. Automatisch weiterleiten an irgendein anderes Script ist sinnlos, da du dieses ebenfalls schützen musst. Sonst könnte man es ja gleich direkt aufrufen. Vermutlich möchtest du eine Session eröffnen und in dieser den Login-Status festhalten.
echo "$verabschiedung $name";