PHP Login/Register mit User Id

  • Ich wurde gestern darauf angesprochen, in meinem Login System die Abfragen mit einer User_ID zu machen, da die User-ID nur 1x vorhanden ist.


    Mein Login System funktioniert folgendermassen:


    In einem Formular werden Username und Passwort eingelesen.
    Jetzt werden die eigegebenen Sachen überprüft:


    Code
    $username=$_POST['username']; 
    $password=md5($_POST['password']);


    Vor MySQL Injektion schützen:


    Code
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);
    $sql="SELECT * FROM $tbl_name WHERE username='$username' and password_md5='$password'";
    $result=mysql_query($sql);


    Jetzt werden die gefundenen Datensätze gezählt:


    Code
    $count=mysql_num_rows($result);


    Wenn 1 gefunden wurde, Session registrieren, ansonsten wieder zur Login-Page:



    Verbesserungsvorschläge zur Sicherheit?
    Wie kann ich das mit einer User-ID lösen?


    Einfach bei der SQL Abfrage SELECT user_id FROM ... ?


    Gruss
    Vince

  • $password=md5($_POST['password']);


    md5 ist nicht mehr sicher genug.. verwende bitte ein anderes.


    $sql="SELECT * FROM $tbl_name WHERE username='$username' and password_md5='$password'";
    zu
    $sql="SELECT * FROM `$tbl_name` WHERE `username`='$username' and `password_md5`='$password'";
    (bin drüber geflogen)
    Lg

  • Wozu dienen die ` ?


    Es sind Hash Codes, sie dienen zur Verschlüsselung der Daten und machen sie so vor "Hackern" sicher.
    http://de.wikipedia.org/wiki/Hashfunktion


    Danke
    Jetzt müsste ich nur noch wissen, wie man das mit der eindeutigen User-ID macht.
    Gruss
    Vince


    Dazu erstellst du eine neue Spalte in deiner MySQL-Tabelle und nennst diese id, id = Integer und klicke auf den Haken bei Auto_Increment, damit die Zahl für jeden neuen Eintrag hoch geht ;)
    und dann kannst du damit arbeiten:
    $id = mysql_query("SELECT id FROM `$tbl_name` WHERE username='$username' and password_md5='$password'");
    so und jetzt kannst du immer id verwenden, sprich sowas:
    $sql="SELECT * FROM $tbl_name WHERE id='$id'";


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Danke für die Info.


    Ich habs versucht. Leider funktioniert der Login nicht mehr und ich weiss nicht, wie ich herausfinden kann, warum.


    Ich habe die SQL Statements selber in der Konsole ausgeführt.


    Code
    $id = mysql_query("SELECT user_id FROM `$tbl_name` WHERE username='$myusername' and password_md5='$mypassword'");


    gibt


    Code
    +---------+
    | user_id |
    +---------+
    |       1 |
    +---------+
    1 row in set (0.00 sec)


    Code
    $sql="SELECT * FROM `$tbl_name` WHERE user_id='$id'";


    gibt


    Code
    +---------+----------+----------------------------------+---------------------+---------------------+-------+------------+-------------+-------+--------+-------+-----------+--------+---------+
    | user_id | username | password_md5                     | last_login          | created_at          | money | bank_money | bank_credit | level | points | fr_id | fr_leader | job_id | skin_id |
    +---------+----------+----------------------------------+---------------------+---------------------+-------+------------+-------------+-------+--------+-------+-----------+--------+---------+
    |       1 | Vince    | 81dc9bdb52d04dc20036dbd8313ed055 | 2012-11-12 08:24:21 | 2012-02-15 08:24:26 | 20837 |     120000 |           0 |    12 |      5 |     1 |         1 |      6 |      18 |
    +---------+----------+----------------------------------+---------------------+---------------------+-------+------------+-------------+-------+--------+-------+-----------+--------+---------+


    Dann


    Code
    $result=mysql_query($sql);


    Code
    $count=mysql_num_rows($result);


    Code
    if($count==1){
    
    
    session register blabla


    Gruss
    Vince

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Gruss
    Vince

  • Code
    $sql="SELECT * FROM $tbl_name WHERE user_id='$id'";


    muss zu

    Code
    $sql = "SELECT * FROM ".$tbl_name." WHERE user_id = '".$id."'";


    und es sollte gehen.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Zitat

    Es sind Hash Codes, sie dienen zur Verschlüsselung der Daten und machen sie so vor "Hackern" sicher.


    Nein. Das sind Quotes.


    LeijaT: Völlig egal, PHP akzeptiert Variablen in Doublequotes, in Singlequotes hingegen wäre das Verbinden notwendig.


    Vince:

    SQL
    $id = mysql_query("SELECT user_id FROM `$tbl_name` WHERE username='$username' and password_md5='$password'");
    $sql="SELECT * FROM `$tbl_name` WHERE user_id='$id'";


    Du müsstest $id noch fetchen aber wozu das ganze? Einfach direkt alles über den Nutzernamen holen, dann ist da sogar die ID danke Wildcard dabei.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.


  • Danke für die Infos ;)


    Es geht aber leider immer noch nicht^^
    Hab den Vorschlag von dir und Leijat versucht.


    Gruss
    Vince


  • EDIT: Wo muss ich denn fetchen?^^


    Gruss
    Vince


  • Es sind Hash Codes, sie dienen zur Verschlüsselung der Daten und machen sie so vor "Hackern" sicher.
    http://de.wikipedia.org/wiki/Hashfunktion


    Wasch laberst du?
    Das sind keine Hash Codes sondern Backticks (`) und die sind im Prinzip das selbe wie die Apostrophe ('), werden aber bei MySQL speziell zur Kennzeichnung von Tabellen-, Datenbank- oder Spaltennamen verwendet.


    BTT:
    Ich frage mich, warum du umstellst? Ein Username ist meiner Meinung nach im idealfall auch einmalig.

  • Zitat

    Du müsstest $id noch fetchen aber wozu das ganze? Einfach direkt alles über den Nutzernamen holen, dann ist da sogar die ID danke Wildcard dabei.


    Ich sehe nicht, dass du das umgesetzt hast.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • PHP
    $id = mysql_query("SELECT user_id FROM `$tbl_name` WHERE username=".'$username."' and password_md5='".$password."'");
    $userid = mysql_fetch_field($id);
    $sql="SELECT * FROM `$tbl_name` WHERE user_id='$id'";


    Habe gerade fetch_field nicht im Kopf, sollte aber gehen.


    MfG