|
You last visited: Today at 17:28
Advertisement
Funktioniert das so?
Discussion on Funktioniert das so? within the Web Development forum part of the Coders Den category.
08/13/2012, 00:34
|
#1
|
elite*gold: 0
Join Date: Jul 2012
Posts: 208
Received Thanks: 8
|
Funktioniert das so?
PHP Code:
<?php
include('../config/database_login.php'); $login_username = $_POST["username"]; $login_password = $_POST["password"]; $_SESSION["username"] = $login_username; $check_query = "SELECT username, password FROM users WHERE username LIKE '$login_username' LIMIT 1"; $check_query_now = mysql_query($check_query) or die ("Login Abfrage nicht möglich."); $check_query_row = mysql_fetch_object($check_query_now) or die ("MySQL Fetch nicht möglich."); if($row->password = $login_password) { echo "Login erfolgreich"; } else { echo "Login nicht erfolgreich."; }
?>
Würde der Login so funktionieren?
|
|
|
08/13/2012, 01:18
|
#2
|
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
|
Quote:
Originally Posted by DevelopmentFOE
Würde der Login so funktionieren?
|
Eigentlich müsstes du das selber erst ausprobieren und dann fragen Aber um deine Frage zu beantworten: Nein, du hast da einige Fehler drinne.
PHP Code:
<?php
include('../config/database_login.php');
$login_username = $_POST["username"]; //POST evtl. auch escapen für die Sicherheit z.B. mit mysql_real_escape_string(); $login_password = $_POST["password"]; $_SESSION["username"] = $login_username; $check_query = "SELECT username, password FROM users WHERE username LIKE '$login_username' LIMIT 1"; $check_query_now = mysql_query($check_query) or die ("Login Abfrage nicht möglich."); $row = mysql_fetch_object($check_query_now) or die ("MySQL Fetch nicht möglich."); //die Variable war falsch benannt. if($row->username == $login_username AND $row->password == $login_password) { //zum Vergleich benutzt man == nicht = echo "Login erfolgreich"; } else { echo "Login nicht erfolgreich."; } ?>
So müsst es gehen.
|
|
|
08/13/2012, 03:30
|
#3
|
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
|
erstmal session starten bevor man session variabeln deklariert
|
|
|
08/13/2012, 10:31
|
#4
|
elite*gold: 0
Join Date: Jul 2012
Posts: 208
Received Thanks: 8
|
PHP Code:
<?php session_start(); include('../config/database_login.php'); $login_username = $_POST["username"]; $login_password = $_POST["password"]; mysql_real_escape_string($login_username); mysql_real_escape_string($login_password); $_SESSION["username"] = $login_username; $check_query = "SELECT username, password FROM users WHERE username LIKE '$login_username' LIMIT 1"; $check_query_now = mysql_query($check_query) or die ("Login Abfrage nicht möglich."); $row = mysql_fetch_object($check_query_now); if($row->username == $login_username AND $row->password == $login_password) { echo "Login erfolgreich"; } else { echo "Login nicht erfolgreich."; } ?>
So besser?
|
|
|
08/13/2012, 11:01
|
#5
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Du benutt mysql real escape string falsch. Schau dir dazu nochmal die entspr. php.net Seite an. Es wäre aber eh besser, wenn du mysqli oder PDO mit Prepared Statements verwenden würdest. Wenn es ein größeres Projekt ist, könntest bzw. solltest du einen OR-Mapper wie Propel oder Doctrine einsetzen.
Ansonsten: Ich würde eine Zeile, in der Benutzername und Passwort stimmen, abfragen. Wenn eine entspr. Zeile gefunden wurde, ist der Login erfolgreich, wenn nicht, eben nicht (die Anzahl der gefundene Zeilen bekommst du mit mysql rows oder so raus).
Edit: Du überträgst den Benutzer in die Session bevor du überhaupt weißt, ob der Login erfolgreich war. Sicher, dass du das möchtest?
|
|
|
08/13/2012, 11:20
|
#6
|
elite*gold: 0
Join Date: Jul 2012
Posts: 208
Received Thanks: 8
|
Das mit der Session bevor der Login erfolgreich ist habe ich gefixxt, wird erst auf der nächsten Seite vergeben.
PHP Code:
<?php session_start(); include('../config/database_global.php');
$valid_session = $_SESSION["username"]; $sql_coins = "SELECT username, usercoins FROM usercoins WHERE username LIKE '$valid_session' LIMIT 1"; $sql_coins_done = mysql_query($sql_coins) or die ('MySQL-Fehler:'.mysql_error()); $sql_coins_row = mysql_fetch_object($sql_coins_done); if($valid_session = true) { echo "Dein Guthaben beträgt"; echo $sql_coins_row->usercoins; } else { echo "Bitte log dich zuerst ein."; header("Location:"); } ?>
Wieso wird der Wert nicht ausgegeben?
|
|
|
08/13/2012, 12:08
|
#7
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Du hast = (Zuweisung) statt == (inhaltlicher Vergleich, ggf. wird implizit gecastet) bzw. === (inhaltlicher Vergleich + Datentypen werden vergleicht) geschrieben. Wenn dir der Fehler öfters passiert, wird von manchen empfohlen, die Variable immer auf die rechte Seite des Vergleichs zu tun - geht natürlich nur, wenn eine Variable gegen eine Konstante bzw. Literale verglichen wird). Das hat den Vorteil, dass du eine Fehlermeldung bekommst, wenn du aus Versehen zuweist statt vergleichst.
Aber wieso vergleichst du den Benutzername (String) gehen einen Wahrheitswert? Wenn du prüfen möchtest, ob das Feld "username" in der Session gesetzt ist, verwende lieber isset(): if (isset($_SESSION["username"])). isset() prüft, ob es das entsprechende Element im Array gibt (und ob es ungleich null ist). Das ist vermutlich eher das, was du haben möchtest.
Ferner noch drei Dinge: Wieso verwendest du LIKE? Der Benutzername muss genau stimmen, also solltest du "=" verwenden. Dann solltest du die Namen der Felder und Tabellen im Query noch in `` setzen. Das ist hier zwar nicht zwingend erforderlich, wenn du aber mal einen Namen verwendest, der zufällig auch ein Schlüsselwort ist, bekommst du einen Fehler. Natürlich müsstest du nur solche Namen in `` setzen, Zwecks der Einheitlichkeit würde ich aber alle so markieren.
Zuletzt solltest du die Datenbankabfrage auch in den Rumpf deiner if-Anweisung setzen. Denn wenn kein Benutzername in der Session gesetzt wurde, ist die Abfrage unnötig. Ergo kannst du so unnötige Abfragen umgehen.
... und ich würde hinter jedes header(Location:...") ein exit(0) setzen, sodass das PHP-Skript nicht weiters ausgeführt wird (hier natürlich nicht unbedingt nötig, da danach nichts mehr kommt). Eine Weiterleitung mit header() erweckt nämlich oft den Eindruck, dass die Seite ab der Anweisung abgebrochen wird, da man vom Rest im Browser nichts mehr sieht. Der restliche PHP Code wird aber, selbstverständlich, trotzdem ohne expliziten Abbruch mit die() oder exit() noch ausgeführt, was so teilweise zu Sicherheitslücken oder zunächst "komischem" Verhalten der Seite führen kann - sofern man sich diesem Fakt als Einsteiger nicht bewusst ist.
... und du solltest noch besser Einrücken.
|
|
|
08/13/2012, 12:15
|
#8
|
elite*gold: 1
Join Date: Sep 2009
Posts: 462
Received Thanks: 125
|
Wo ist denn die Sessionvariable $_SESSION["username"] definiert?
Du hast die nicht definierte Sessionvariable in die $valid_session Variable gepackt und fragst dann ab ob $valid_session == true ist.
wird die Sessionvariable evtl in der database_global.php gesetzt?
Und wo wird überprüft, ob ein Passwort korrekt ist?
Ich sehe da nichts dergleichen!
PHP Code:
$sql_coins = "SELECT username, password FROM usercoins WHERE username = '$loginform_usr_name' LIMIT 1";
$sql_coins_done = mysql_query($sql_coins);
$sql_coins_row = mysql_fetch_assoc($sql_coins_done)
if ($loginform_pswd == $sql_coins_row['password']){
// Hier kannst du dann z.B. eine Sessionvariable setzen, da der Login erfolgreich war echo "Dein Guthaben beträgt"; echo $sql_coins_row['usercoins'];
} else {
echo "Bitte log dich zuerst ein."; header("Location:");
}
Wenn ich jetzt keinen Fehler gemacht habe müsste es so funktionieren.
Du musst natürlich noch das Passwort, was der Benutzer im Formular eingetragen hat in der Variable
$loginform_pswd
speichern und den Benutzernamen aus dem Loginformular in der Variable
$loginform_usr_name
speichern.
Ich hoffe ich konnte helfen.
|
|
|
08/13/2012, 13:00
|
#9
|
elite*gold: 0
Join Date: Jul 2012
Posts: 208
Received Thanks: 8
|
Die Daten werden schon in einem Formular davor überprüft. (Session wird dort auch gesetzt.)
|
|
|
|
Similar Threads
|
MW3 Nat, Wie funktioniert es ?
10/28/2012 - Call of Duty - 22 Replies
Hallo Leute,
Hab mir MW3 gekauft und möchte es unbedingt mit nem Freund den koop zocken.
Leider steht da was von Nat Typ : Strikt !
Erst wusste ich nicht was ich machen sollte habs gegoogelt und teilweise hab ich es dann verstanden (einigermaßen)
Also ich habe Alice, bin auch auf die Seite hab mich eingeloggt und die Ports freigegeben... dennoch steht bei mir in MW3 immer noch strikt -.-
Hab diese ports freigegeben
TCP 80
UDP 88
|
Funktioniert das?
08/21/2012 - Consoles - 8 Replies
Ich sehe es gibt so eine Seite Wie Playspan nur für Ms Points??
Funktioniert das?
Seite??: Points2shop - Earn Points for Free Rewards
|
Lord Wahl funktioniert nicht mehr / Behemoth Dungeon Eingang funktioniert nicht mehr
07/11/2012 - Flyff Private Server - 3 Replies
Wie es im Titel steht haben wir momentan 2 Probleme.
Aus ungeklärten Ursachen geht mit Mal die Lord Wahl nicht mehr.
Vor 2 Wochen funktionierte die Lord Wahl noch ohne Probleme, dieses Wochenende konnte man sich normal aufstellen, die Aufstellung wurde aber nicht geschlossen. Man konnte sich auch Samstag und Sonntag noch aufstellen.
Außerdem wurde das Voting nicht gestartet, es wurde nicht möglich, jemanden der aufgestellten zu wählen.
Wie gesagt, vor 2 Wochen und auch vor 4 Wochen...
|
Bei mir funktioniert das Löschcode nicht. Er hat mal funktioniert
01/07/2010 - Metin2 Private Server - 0 Replies
Hi. Also auf mienem PServer geht das mit dem Löschcode nicht. Kann mir jemand sagen warum? Ich weiß noch das es mal ging.
Aber den Spieler in der Datenbank löschen geht nicht weil da diser lvl 0 charackter bleibt und ich nciht weiß wie man den weg kriegt
Bitte kan mir jemand helfen.
|
Funktioniert das?
10/05/2007 - Flyff - 3 Replies
Hi alle zusammen!
Gestern hatte ich ein Gedankenblitz!!!UHHHH!!!Und jetzt wollt ich mal fragen ob das möglich ist. Kann man bei den skills die FP oder die MP die für einen skill gebraucht wird niedriger machen ??? Würde das gehn ????:D Also wenn das funtzt dann wüsste ich was ich mache :D:D:D:D!!!
|
All times are GMT +2. The time now is 17:28.
|
|