Gehe zu Seite 1, 2  Weiter

 
 
Yosh24
Partynet on Air Moderator

Beiträge: 31
Posting-Statistiken
BeitragVerfasst am: 25.07.2006 - 12:53    Titel: Kann jemand gut PHP+MySQL?
 
 
 
 
Login-Script. Ich komm nich weiter. Irgendwo is der Wurm drin, ich habs schon in anderen Foren probiert, jetzt rag ich mal hier.

config.php
Code:

    error_reporting(E_ALL);

    define('MYSQL_HOST',     '*****');
    define('MYSQL_USER',     '*****');
    define('MYSQL_PASS',     '*****');
    define('MYSQL_DATABASE', '*****');

function connect()
{
    $con= mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) or die(mysql_error());
     mysql_select_db(MYSQL_DATABASE,$con) or die(mysql_error());
}

function check_user($usrname, $pwd)
{
    $pwd=md5($pwd);
    $sql="SELECT ID
    FROM users
    WHERE username='$usrname' AND password='$pwd'
    LIMIT 1;";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $user=mysql_fetch_assoc($result);
        return $user['ID'];
    }
    else
        return false;
}

function login($ID)
{
    $sql="UPDATE users
    SET UserSession='".session_id()."'
    WHERE ID=".$ID;
     mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT UserId
    FROM users
    WHERE UserSession='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
      return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE users
    SET UserSession=NULL
    WHERE UserSession='".session_id()."'";
     mysql_query($sql);
}

connect();
?>


So, und jetz noch die Datei
login.php
Code:

#########################################
include 'config.php';
#########################################
if(isset($_POST['usrname']) && isset($_POST['pwd'])) {
$usrname=$_POST['usrname'];
$pwd=$_POST['pwd'];
}
else {
 echo "Bitte Benutzernamen und Passwort angeben!
";
 echo "Zurück zum Login";
die();
}
#########################################
echo $usrname.", ".$pwd."
";
$try=check_user($usrname, $pwd);
if($try==0 OR $try==false)
die("Falscher Benutzername oder Passwort");
login($try);
?>


So. also, wenn ich versuche mich einzuloggen, vergleicht er die mit POST gesendeten Daten irgendwie falsch. Jedenfalls gibt check_user() (um die es hier geht) 'false' zurück und die("Falscher Benutzername oder Passwort"); wird ausgeführt. Jemand eine ahnung warum?
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...

KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
 
 
ap0calypse
Posting King

Beiträge: 1169
Posting-Statistiken
BeitragVerfasst am: 25.07.2006 - 17:34    Titel:
 
 
 
 
Was zahlst?

EDIT: Ach, ich bin mal nicht so .... wie wärs, wenn du vorher zur DB connectest. Idea

EDIT 2: Hoppla, das tust du ja ganz unten. Nicht gesehen. Deine ganzen Funktionen sind sinnlos verwirrend Wink

EDIT 3: Und du bist sicher, dass die zurückgegebene User-ID nicht "0" ist? Laut deiner If-Anweisung fragst du das ja auch gleichbedeutend mit FALSE ab.
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
 
 
Yosh24
Partynet on Air Moderator

Beiträge: 31
Posting-Statistiken
BeitragVerfasst am: 25.07.2006 - 19:41    Titel:
 
 
 
 
ID kann nich 0 sein, weil ich das in der Tabelle schon ausgeschlossen habe. Und selbst wenn, ich hab schon mehrmals nachgeschaut, ID=1...
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...

KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
 
 
trolldom
Forum Inventar

Beiträge: 3913
Posting-Statistiken
BeitragVerfasst am: 25.07.2006 - 20:00    Titel: Re: Kann jemand gut PHP+MySQL?
 
 
 
 
Okay, probiers mal hbiermit:

config.php
Code:

    error_reporting(E_ALL);

    define('MYSQL_HOST',     '*****');
    define('MYSQL_USER',     '*****');
    define('MYSQL_PASS',     '*****');
    define('MYSQL_DATABASE', '*****');

function connect()
{
    $con= mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) or die(mysql_error());
     mysql_select_db(MYSQL_DATABASE,$con) or die(mysql_error());
}

function check_user($usrname, $pwd)
{
       $pwd=md5($pwd);
       $sql="
      SELECT id
          FROM users
          WHERE username='$usrname' AND password='$pwd'
   ";
   /*
    * Benenn das Feld in der Db von "ID" auf "id" um,
    * Feldnamen schreibt man aus schönheitstechnischen Gründen immer klein,
    * groß sind nur SQL Befehle
         * 
         *  Das LIMIT im Query kann man sich eigentlich sparen, weils den User in der DB hoffentlich nur 1x geben wird...
    */

       $result= mysql_query($sql) or die(mysql_error());
       if ( mysql_num_rows($result) > 0)
       {
           $user=mysql_fetch_row($result);
           return $user[0];
       } else {
           return false;
   }
}

function login($ID)
{
       $sql="UPDATE users
       SET UserSession='".session_id()."'
       WHERE id='".$ID."'; //id klein weil wirs ja jetzt in der db umbenannt haben ;>
       if(mysql_query($sql)) {
      return true;
   } else {
      return false;
   }
}

function logged_in()
{
    $sql="SELECT UserId
    FROM users
    WHERE UserSession='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
      return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE users
    SET UserSession=NULL
    WHERE UserSession='".session_id()."'";
     mysql_query($sql);
}

?>



login.php
Code:

#########################################
include('config.php');
connect(); //den db connect machen wir erst dann wenn wir ihn benötigen ...
#########################################
if(isset($_POST['usrname']) && isset($_POST['pwd'])) {
$usrname=$_POST['usrname'];
$pwd=$_POST['pwd'];
}
else {
 echo "Bitte Benutzernamen und Passwort angeben!
";
 echo "Zurück zum Login";
die();
}
#########################################
echo $usrname.", ".$pwd."
";
$id = check_user($usrname, $pwd);
if($id == false) {
   die("Falscher Benutzername oder Passwort");
} else {
   echo "passt";
}
login($id);
?>


Müsste eigentlich funktionieren.

Gepostet von IcedEarth am Rechner von Stormrid3r Wink
 
 
Pseudonym
Forum Inventar

Beiträge: 3587
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 08:49    Titel:
 
 
 
 
hätte mich schon gewundert, sowas aus doms fingern zu lesen Wink
_________________
I have come here to chew bubblegum and kick ass...and I'm all out of bubblegum
 
 
Yosh24
Partynet on Air Moderator

Beiträge: 31
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 11:41    Titel:
 
 
 
 
Nee, geht nich. Kommt immernoch false zurück...hätte mich auch gewundert, weil ob ich jetz einen mysql_fetch_assoc oder einen mysql_fetch_row mache, bleibt im endefekt egal, oder?
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...

KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
 
 
IcedEarth
Administrator

Beiträge: 5271
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 15:50    Titel:
 
 
 
 
Lass dir den Query-String mal ausgeben, dann siehst eh wo der Fehler liegt.
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"

Visit: http://www.adick.at
 
 
Yosh24
Partynet on Air Moderator

Beiträge: 31
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 18:07    Titel:
 
 
 
 
Der String is richtig, aber wenn ich $user[0] und $user[1] ausgeben lasse (als $user[1] hab ich jetz password mit aus der Tabelle holen lassen und dafür aus dem WHERE-Zweig die AND-Bedingung rausgelassen) sind die "id" und "password"...also werden keine werte aus der Tabelle eingetragen...
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...

KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
 
 
IcedEarth
Administrator

Beiträge: 5271
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 18:20    Titel:
 
 
 
 
Ich versteh jetzt zwar nicht was du da gerade geschrieben hast, aber ich hab die Funktion noch etwas überarbeitet:

Code:
function check_user($usrname, $pwd) {
   $pwd=md5($pwd);
   $sql="SELECT id FROM users WHERE username='". $usrname ."' AND password='". $pwd ."'";
   /**
   * Benenn das Feld in der Db von "ID" auf "id" um,
   * Feldnamen schreibt man aus schönheitstechnischen Gründen immer klein,
   * groß sind nur SQL Befehle
   *
   *  Das LIMIT im Query kann man sich eigentlich sparen, weils den User in der DB hoffentlich nur 1x geben wird...
   */

   $result = mysql_query($sql) or die(mysql_error());
   if (mysql_num_rows($result) > 0) {
      $user = mysql_fetch_array($result);
      return $user["id"];
      print_r($user); //nur mal um zu sehn was in diesem array überhaupt drinnen steht
   } else {
      return false;
   }

}

_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"

Visit: http://www.adick.at
 
 
ap0calypse
Posting King

Beiträge: 1169
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 19:21    Titel:
 
 
 
 
Da steckt sicher nur irgendwo ein logischer Fehler dahinter, an dem man gerade nicht denkt. Vom Source her ist so schnell nichts falsches zu erkennen ....
_________________
agitatio.org - sports community
Das Ich von morgen, ... ist das Idol von heute.
 
 
big_earl
Post Addicted

Beiträge: 396
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 19:40    Titel:
 
 
 
 
ap0calypse hat Folgendes geschrieben:
Da steckt sicher nur irgendwo ein logischer Fehler dahinter, an dem man gerade nicht denkt. Vom Source her ist so schnell nichts falsches zu erkennen ....


Bin ganz deiner Meinung.

Ich würde mit === anstatt == abfragen, damit wird noch sichergestellt ob sie vom Typ her auch identisch sind.

Wenns dir nur um den Login geht kannst du gerne meine (sehr einfach aufgebaute) Klasse verwenden.
 
 
Yosh24
Partynet on Air Moderator

Beiträge: 31
Posting-Statistiken
BeitragVerfasst am: 26.07.2006 - 23:32    Titel:
 
 
 
 
ne, geht nich nur um login...soll eine community werden...ich hab das vorinstalleirte zeug satt und will selber was basteln...und da muss ich mit den daten dann weiter basteln...ich hab jetz so lang an dem script gearbeitet udn will es nich einfrach aufgeben - irgendwas muss da zu retten sein Very Happy..danke trotzdem!
_________________
Statistically speaking, there are two popes per square kilometer in Vatican City...

KroneHIT - Wir sind die meiste Musik!
Daumegasse 1
1100 Wien
 
 
Martin
Administrator

Beiträge: 3899
Posting-Statistiken
BeitragVerfasst am: 27.07.2006 - 18:01    Titel:
 
 
 
 
Also ich hab jetzt eigentlich wenig Ahnung von PHP - ok eigentlich gar keine. Smile Aber von sicherheitskritischen Anwendungen in Verbindung mit SQL und wünsch dir mal, dass du nicht mal im Traum daran denkst solche Funktionen wie da oben für eine Party-Community (wie es halt angekündigt wird) online zu stellen, dann bist du nämlich keine 6 Stunden online und das ist schon optimistisch geschätzt wenn du es schaffst die Seite um 3 Uhr morgens online zu bringen. *gg* Sorry nix für ungut... Cool

PS:
Code:
//id klein weil wirs ja jetzt in der db umbenannt haben

SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne...
 
 
IcedEarth
Administrator

Beiträge: 5271
Posting-Statistiken
BeitragVerfasst am: 27.07.2006 - 19:35    Titel:
 
 
 
 
Martin hat Folgendes geschrieben:
PS:
Code:
//id klein weil wirs ja jetzt in der db umbenannt haben

SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne...


Ob SQL Abfragen Case sensitive sind oder nicht, hängt von der Kollation ab. Zudem wird bei Feldern mit dem Attribut BINARY sehr wohl auf Groß- und Kleinschreibung geachtet.
_________________
Dexter (off): "Ein herrlicher Tag. Zerstückelte Leichen und eine leichte Regenwahrscheinlichkeit an Nachmittag!"

Visit: http://www.adick.at
 
 
Martin
Administrator

Beiträge: 3899
Posting-Statistiken
BeitragVerfasst am: 27.07.2006 - 22:50    Titel:
 
 
 
 
Na gut das sei mal dahingestellt, wie gesagt ich weiß es nicht ob MySQL case sensitiv ist, ich schreib die Anwendungen immer nur von C++, C# und VB auf MS-SQL Server und da gibts halt keine Groß Kleinschreibung in den SQL Statements. Bei den Felder isses klar, dass es die gibt, aber es ist eh egal, war ja nur eine Randbemerkung, würd mir da eher Gedanken über die Sicherheit des obigen PHP Skripts machen. Smile
 
 
big_earl
Post Addicted

Beiträge: 396
Posting-Statistiken
BeitragVerfasst am: 28.07.2006 - 12:47    Titel:
 
 
 
 
Zitat:
würd mir da eher Gedanken über die Sicherheit des obigen PHP Skripts machen

Naja das muss man sicher auf die größe des Projektes anpassen, ich auch Stunden/Tage an einem sehr sicheren Login arbeiten, steht halt wahrscheinlich in keiner Relation zur Projektgröße. Umso bekannter und größer ein Projekt ist desto sicherer muss es sein, keine Frage auch kleine Projekte sollten sicher sein, aber muss ich bei kleinen Sachen bei weitem nicht mit so großen Besucherzahlen und dementsprechend auch wahrscheinlich hohen Angriffszahlen rechnen.

Zitat:
SQL ist nicht case-sensitiv - jedenfalls alle versionen die ich kenne...

SQL ist eigentlich nicht Case-Sensitiv, aber hat es sich einfach aus Lesbarkeitsgründen ein quasi Standard entwickelt dass man seine Tabellenbezeichnungen klein schreibt.
 
 

Gehe zu Seite 1, 2  Weiter