Problem einen User einndeutig zu identifizieren.

MasterDP23

Mitglied
Sehr geehrte Experten,

ich habe ein Login nach dem Vorbild des auf dieser Webseite erläuterten Tutorials aufgebaut, und würde nun gerne den User im eingeloggten Zustand eindeutig Identifizieren und mir per SQL Befehl die jeweilig dazugehörigen Daten in eine $query ausgeben lassen.

Zu dieser Thematik habe ich mir folgend Gedanken gemacht.

Da ich noch Anfänger in Php bin, bitte ich euch den Code mit Nachsicht zu genießen und etwaige Anfänger Fehler zu entschuldigen.

Erläuterung zum Code: 'sessionhelpers.inc.php' ist wie im Tutorial beschrieben aufgebaut.

Der Code:
session_start();
include 'sessionhelpers.inc.php';


//Versuch Nr.1 mit Wild Card
if (!logged_in())
{
$query2= ("SELECT * FROM users WHERE UserName='".$name."'AND UserPass=MD5('".$pass."') LIMIT 1");
$result2= mysql_query($query2) or die(mysql_error());
}



//Versuch Nr2 mit definiertem Feld (die E-Mail-Adresse)
if (!logged_in())
{
$query3="SELECT 'UserMail' FROM users WHERE UserId='".$UserId."';
$result3= mysql_query($query3) or die(mysql_error());
}

//ENDE

Ich freue mich über jede gute Idee wie ich das Problem in den Griff bekomme.

Vielen Dank für Eure Mühe und Zeit

Mit freundlichsten Grüßen
Dom ;-)
 
Ok, das ist wirklich die absolute Basis :)

Zuerstmal wäre es hilfreich wenn du die PHP BBCOde Tags verwenden würdest, das macht das ganze lesbarer.

Nun zu deinem Problem. Die Funktion mysql_query() schickt deinen SQL-Befehl an die Datenbank, diese führt ihn aus und gibt dir ein ResultSet zurück. Mit dem kannst du aber nicht direkt etwas anfangen. Wenn du es auslesen willst, musst du einer der folgenden Funktionen verwenden: mysql_fetch_assoc(), mysql_fetch_array(), mysql_fetch_object() oder mysql_fetch_row() (siehe dazu am besten mal ins PHP-Handbuch zu den MySQL Funktionen).

Entsprechend kannst du dann folgendes machen:
PHP:
if (!logged_in())
{
    $query = ("SELECT * FROM users WHERE UserName='".mysql_escape_string($name)."'AND UserPass=MD5('".$pass."') LIMIT 1");
    $result = mysql_query($query2) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    echo '<pre>';
    var_dump($row);
    echo '</pre>';
}
Ich würde dir aber empfehlen, statt "SELECT *" den Query so aufzubauen, dass nur relevante Daten geholt werden und MySQL auch die INDEXes verwenden kann, z.B. solltest du einen auf die Spalten "UserName" und "UserPass" legen. Wichtig ist auch, dass du die Werte prüfst, bevor du sie in die Datenbank schreibst. Also Integer auch auf Integer Werte prüfen, Strings escapen mit mysql_escape_string() etc. - sonst ist es kinderleicht SQL Injection Attacken auszuführen!
 
In MySQL gibt es verschiedene INDEXes die man setzen kann. PRIMARY wäre einer davon. Dann gibt es noch UNIQUE und INDEX. UNIQUE wird im Web klassischer Weise auf "Username" gelegt, dass dieser einmalig sein muss. INDEX kann man wiederum auf diverse Spalten legen, z.B. ist das dann Sinnvoll, wenn man eine SELECT Anweisung mit einer WHERE Bedingung eingrenzt und auf die WHERE-Spalten einen INDEX legt. Dadurch verarbeitet MySQL die SELECT Anweisung wesentlich schneller. Bei wenigen Datensätzen spielt das zwar kaum eine Rolle, aber je mehr Einträge eine Tabelle hat desto mehr macht sich das bemerkbar!

Ein Beispiel. Wir haben eine einfache Tabelle "users". Diese hat als PRIMARY KEY die Spalte 'user_id'. Nun prüfen wir einen Login mittels folgender Query:
Code:
SELECT * FROM users WHERE username = 'administrator' AND password = 'testpw';
Die Anfrage funktioniert. Aber was macht MySQL? Das prüfen wir, indem wir ein "EXPLAIN" vor die Query schreiben:
Code:
EXPLAIN SELECT * FROM users WHERE username = 'administrator' AND password = 'testpw';
Ich hab jetzt gerade dafür kein Beispiel parat wie das aussieht, aber da gibt's ne Spalte wie "used indexes" oder so ähnlich, wenn da nichts drin steht ist die Query nicht optimiert und kann halt bei vielen Datensätzen sehr langsam werden. Noch schlimmer wird es bei JOINs wenn kein Index verwendet werden kann ...
 
Hallo liebe Experten,
vielen Dank für Eure so zahlreiche Hilfe.

Also mein genaues Problem ist, dass ich den User eindeutig identifizieren will um Ihm seine Daten wie zb. in Mein Ebay (Stammdaten) wiedergeben will.
Das wollte ich so hinbekommen, dass ich die Ergebnise aus der SQL Anfrage in entsprechende Var packe und diese in den entsprechenden Ebenen Feldern mit echo ausgeben. :confused:



Vielen Dank für Eure HIlfe und Zeit.

Mit freundlichsten Grüßen

Dom ;-)
 
Zurück