Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 17:28

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Funktioniert das so?

Discussion on Funktioniert das so? within the Web Development forum part of the Coders Den category.

Reply
 
Old   #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?
DevelopmentFOE is offline  
Old 08/13/2012, 01:18   #2
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
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.
Mikesch01 is offline  
Thanks
1 User
Old 08/13/2012, 03:30   #3
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
erstmal session starten bevor man session variabeln deklariert
Hiris is offline  
Thanks
1 User
Old 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?
DevelopmentFOE is offline  
Old 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?
dowhile is offline  
Thanks
1 User
Old 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?
DevelopmentFOE is offline  
Old 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.
dowhile is offline  
Thanks
1 User
Old 08/13/2012, 12:15   #8
 
Phillor's Avatar
 
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.
Phillor is offline  
Old 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.)
DevelopmentFOE is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.