Php login probleem
Ik gebruik deze query: SELECT * FROM leden where (email = '$veiligeloginemailnew' OR nickname = '$veiligeloginnew') AND password = '$passwordnew'
voor de login van mijn script. maar nu merk ik als 2 leden het zelfde wachtwoord hebben dat ze op het zelfde profiel komen.
hopelijk kunnen jullie me helpen.
Als het goed is is het niet mogelijk dat twee leden dezelfde email hebben. Je zult bij het registeren moeten controleren of het gebruikte email adres al in gebruik is. En niet toestaan dat een email twee keer gebruikt wordt.
Ik heb een controle op een uniek e-mail.
ook al zijn het verschillende login's ik kom telkens op het profiel het hetzelfde wachtwoord.
Dan kom je op dezelfde user uit.
Maar moet de invoer niet uit éénzelfde variabele komen? Je gebruikt nu $veiligeloginemailnew én $veiligeloginnew.
Je moet een gedeelde input hebben met username/mailadres.
Gewijzigd op 17/07/2019 15:57:35 door - Ariën -
Christian k op 17/07/2019 12:59:00:
Als het goed is is het niet mogelijk dat twee leden dezelfde email hebben.
Wat doe je dan bij gezinsleden welke de e-mail delen?
In de schaakwereld gebeurd dit meermaals. Ook voor de overheid gebruiken gezinspartners regelmatig hetzelfde e-mailadres.
Ook controleren op ID, wat bij goede normalisatie wel uniek is, zou beter zijn.
Jan
Bijna iedereen met een eigen telefoon heeft wel een eigen mailadres.
Met unieke mailadressen hou je een hoop ellende buiten de deur.
Gewijzigd op 17/07/2019 16:18:20 door - Ariën -
En wat uniek is... hangt af van hoe je dit controleert. En hoe er gecontroleerd wordt bepaalt de collation. Vergelijk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> SELECT ('Henk' COLLATE utf8mb4_general_ci = 'HENK') AS `match`;
+-------+
| match |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)
> SELECT ('Henk' COLLATE utf8mb4_bin = 'HENK') AS `match`;
+-------+
| match |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
+-------+
| match |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)
> SELECT ('Henk' COLLATE utf8mb4_bin = 'HENK') AS `match`;
+-------+
| match |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
Standaard is de collation voor databases, tabellen en kolommen case insensitive. Dus als je een account met nickname Henk hebt, en een met HENK, grote kans dat er dan verwarring tussen de twee ontstaat. Met deze constructie betrek je ook het wachtwoord in de identificatie van een gebruiker, en dat lijkt mij ook niet echt wenselijk.
Wat mij verontrust is dat je wachtwoorden in de query vergelijkt. Ik hoop van harte dat deze versleuteld zijn opgeslagen, bijvoorbeeld met password_hash(). Dit zou dan ook moeten inhouden dat je deze controleert met password_verify(). Op dit moment zijn je wachtwoorden mogelijk niet eens case sensitive!
Gewijzigd op 17/07/2019 23:06:06 door Thomas van den Heuvel