Kleine Frage zum Datenbankauslesen

  • Hi Leute :)


    Da ich mich jetzt schon länger nicht mit dem Thema PHP befasst habe und die gekauften DVDs von Axel auch langsam aus dem Kopf verschwunden sind, traten bei mir heute morgen nicht nur kleine Wissenslücken auf.


    Grundsätzlich will ich zur Übung nen kleinen Log in basteln. Bei dem der Benutzername und das Passwort aus einer mysql Datenbank ausgelesen werden.
    Nichts hochwissenschaftliches :P Ich kam soweit, dass ich eine Datenbank angelegt habe: Mit ID (Primary-Autoinrement), Name(Text), Passwort(Text). Ich habe 5 Zeilen eingegeben und mache Folgendes in meinem PHP file :

    Code
    mysql_connect("localhost", "root", "");
    mysql_select_db("artwork");
    $sql = "SELECT  * FROM  `user` ";
    $ergebnis = mysql_query($sql);
    $ausgabe = mysql_fetch_array( $ergebnis,  MYSQL_ASSOC );


    So wie ich mir das denke sollte jetzt in $ausgabe ein Array gespeichert sein, dass ich mit print_r( $ausgabe ) einfach Anzeigen lassen sollen könnte.
    Aber bei mir bekomme ich mit print_r( $ausgabe ); nur die erste Zeile Angegeben:


    Array
    (
    [id] => 1
    [name] => calvin
    [pw] => calvin
    )

    Wobei in meiner DB noch 4 Andere Zeilen sind. Irgendetwas habe ich vergessen, nur was?
    Im Endeffekt möchte ich gerne die eingegebenen Werte des Benutzers mit allen $ausgabe['name'] und dem dazugehörigem $ausgabe['pw'] vergleichen.
    Geht das denn so?


    Vielen Dank im Voraus für die Hilfe,
    Calvin

  • Heyho :)
    Direkt zu Anfang eine Frage und anschließend auch 3 Tipps, bevor ich zu deinem Problem komme:
    Sind deine Felder wirklich TEXT-Felder oder VARCHAR-Felder? Sie sollten besser VARCHAR sein, ist speicher effizienter (1.Tipp) und du wirst denke ich keine Benutzernamen länger als 255 Zeichen erlauben, oder? :D
    2. Fang direkt an deine Passworter mit einem Salt in MD5 zu verschlüsseln. So erhält man beim hacken deiner Datenbank keine Benutzerpasswörter und Brutforce- und Dictonaryattacken haben es schon mal schwieriger (2.Tipp) :)
    (Ja, man sollte auch schon bei sowas kleinem anfangen mit der Sicherheit zu üben)
    3. (für Später) Frage direkt in der Datenbank nach genau diesem einen Benutzer und dem einen Passwort. Wenn die Datenbank etwas zurück liefert gibt es ihn, ansonsten waren die Angaben falsch.
    (auch hier schon mal an die Sicherheit denken und die Eingaben des Benutzers nur gefiltert in die Query stecken)


    Dein Problem:
    mysql_fetch_array() gibt immer nur eine Zeile aus, würdest du diese Funktion aber noch einmal aufrufen erhälst du die 2.Zeile, ergo:

    PHP
    <span class="syntaxdefault"></span><span class="syntaxcomment">// Diese while-Schleife geht so lange durch, bis mysql_fetch_assos keine Reihen mehr aus der Datenbank ausgibt.<br /></span><span class="syntaxkeyword">while((</span><span class="syntaxdefault">$row </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_assoc</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">    print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$row</span><span class="syntaxkeyword">);<br />}</span><span class="syntaxdefault"> </span>


    Gruß
    Dustin

  • Natürlich :D die while-schleife wars :P


    Vielen Dank für deine Antwort. Die war genau das wonach ich gesucht habe :)


    Auch ein großes Dankeschön für die extra Tipps :) Das mit dem hashen hab ich mir jetzt mal genauer angesehen. Ich sollte da dann einfach den gehashten Wert in der DB speichern und mit dem auch die Abfrage machen, richtig?
    Auf PHP.NET heißt es aber man soll den MD5 Hash nicht bei Passwörtern verwenden?



    Um wieder auf mein "Projekt" zurück zu kommen.



    Wäre dann die richtige Art und Weise es zu machen? (mal abgesehen davon dass es vorher noch gehasht und strip_tags() angewandt werden müsste)




    Danke, Calvin

  • Zitat von &quot;calvin&quot;

    Auf PHP.NET heißt es aber man soll den MD5 Hash nicht bei Passwörtern verwenden?

    Wenn nicht bei Passwörtern, wo den dann? :D
    Wichtig ist, benutze einen Salt (den du am besten in eine Conif-Datei schreibst:

    PHP
    <span class="syntaxdefault">define</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SALT"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"dhoä45§sx3"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxcomment">// Ein Kopf-meets-Tastatur Wert :D<br /><br />// [...]<br /><br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxstring">"SELECT * <br />FROM  `user` <br />WHERE  `name` =  '$_GET['name']'<br />AND  `pw` =  '"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">SALT</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pw'</span><span class="syntaxkeyword">]).</span><span class="syntaxstring">"'"</span><span class="syntaxkeyword">; </span><span class="syntaxdefault"></span>


    Und japp, so geht das.
    Aber halt strippen und so :wink:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!