Zitat von Humbi
Sicherlich kann man auch alles auf einmal auslesen oder das Passwort direkt in der query prüfen.
Was auch effektiver wäre.
NEIN. Kein PW in der SQL-query prüfen. Das würde mit md5 zB funktionieren. Aber md5 nimmt man NICHT.
Via password_hash werden immer unterschiedliche Hashes erstellt (liegt am Salt im Hash). Und die Prüfung ist nicht valide.
Zitat von Humbi
$sql="SELECT `id`, `passwort` FROM table WHERE `username` LIKE ?";
Never LIKE!
Du willst ganz sicher nicht einen User laden, der einen ähnlichen Namen hat.
Auch wenn hier die PLatzhalter % fehlen - LIKE gehört hier nicht hin.
Note: bei solchen Queries sollte man die Abfrage limitieren.
SELECT `id`, `passwort` FROM `table` WHERE `username` = :username LIMIT 1;
LIMIT 1 und abschließendes ;
Das LIMIT schließt von der Query her schon mal aus, dass Du (aus welchem Grund auch immer) Mehrere User mit dem gleichen Namen bekommst.
Name sollte ja sicherlich einzigartig sein. Sollte also aus irgend einem Grund ein zweiter User den gleichen Namen registrieren können, wird er ignoriert.
Denn wer zuerst kam, wird geladen (wenn default id ASC geladen wird).
Man könnte natürlich auch ohne LIMIT laden und per PHP prüfen, ob es mehrere im Ergebnis gibt - und dann Alarm schlagen. Aber das gehört denk ich nicht in den Login.
Zitat von m.scatello
$query = "Select
[...]
from
`users`
where
`user`='". mysqli_real_escape_string($mysqli, $_POST['user']) . "'";
$result = mysqli_query($mysqli, $query)
Alles anzeigen
Bitte keine Daten direkt in die Query schreiben.
Vergiss mysqli_real_escape_string.
http://php.net/manual/de/mysq…repare-examples
Zum Thema:
Eine Tabelle ist wirklich genug.
Von dem, was ich gesehen habe, kannst Du die zusammen legen.
Nur bei den Admins setzt Du dann (wir bereits erwähnt wurde) ein Feld isAdmin mit dem Wert 1.
Du könntest auch statt isAdmin ein Feld user_group_id hinzufügen.
Der Wert verweist dann auf eine Neue Tabelle user_group.
Bsp:
table user
id | name | ... | user_group_id | ...
-------------------------------------------
1 | Frank | ... | 1
2 | Hans | ... | 3
3 | Steffen | ... | 2
4 | Joe | ... | 10
table user_group
id | name | description | is_active | ...
-------------------------------------------------------
1 | Admin | ... | 1
2 | Registered User | ... | 1
3 | Pending User | Not confirmed ... | 1
...
10 | Moderator | ... | 0
Alles anzeigen
Aber das erstmal nur so eingeworfen. Ist im Moment evtl Overkill.