Funktioniert das so?

08/13/2012 00:34 DevelopmentFOE#1
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 Mikesch01#2
Quote:
Originally Posted by DevelopmentFOE View Post
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 Hiris#3
erstmal session starten bevor man session variabeln deklariert ;)
08/13/2012 10:31 DevelopmentFOE#4
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 dowhile#5
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 DevelopmentFOE#6
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 dowhile#7
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 Phillor#8
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 DevelopmentFOE#9
Die Daten werden schon in einem Formular davor überprüft. (Session wird dort auch gesetzt.)