Hi,

Voor mijn loginsysteem wil ik een wachttijd instellen.
De eerste 3 pogingen zonder wachttijd. Daarna steeds het dubbele. Start op 30' daarna 1u, 2u, 4u, ...
Ik heb al meerdere pogingen ondernomen maar steeds is er iets wat niet juist is.

SELECT
	attempts,
    DATE_ADD(LastLogin, INTERVAL if(attempts<3, 0, power((attempts-3+1), 2) * 30) MINUTE) nextlogin
FROM
	post_LoginAttempts 
WHERE 
	DATE_ADD(LastLogin, INTERVAL if(attempts<3, 0, power((attempts-3+1), 2) * 30) MINUTE)>NOW()
    
order BY
	Attempts

Waarbij ik volgend resultaat terug krijg
attempts nextlogin
3 2019-04-09 11:30:00
4 2019-04-09 13:00:00
5 2019-04-09 15:30:00
6 2019-04-09 19:00:00
7 2019-04-09 23:30:00
8 2019-04-10 05:00:00
Alle tijden staan in deze test op 9/4/2019 11u om eenvoudiger te rekenen.
Na poging 3, 4 en 6 staat een goede uitkomst.
echter bij 5, 7 en 8 niet deze zouden 11u+ 4/16/32u moeten zijn.
5 zou dus 11+4=15u moeten zijn
7 zou dus 11+16=27u of 3u 10/4 moeten zijn
8 zou dus 11+32=43u 19u 10/4 moeten zijn

Waar zit mijn fout??

Jan
Voeg LastLogin ook eens toe aan je SELECT, en dump het lijstje dan nog eens.
Rob Doemaarwat op 09/04/2019 17:31:08

Voeg LastLogin ook eens toe aan je SELECT, en dump het lijstje dan nog eens.

Stond er bij hoor :)
Alle tijden staan in deze test op 9/4/2019 11u
En het is in formaat datetime
Het lijkt er op dat INTERVAL XXX MINUTE een max bevat van 60.
Nee, want dan zou de rest ook niet werken.
select now(),now() + interval 600 minute
Werkt gewoon.

O duh, je hebt de parameters van power() verkeerd om. Je wilt "2 tot de macht (attempts-3+1)" doen, maar je doet nu "(attempts-3+1) in het kwadraat"

3 -> 1^2 = 1 = +0:30 = 11:30
4 -> 2^2 = 4 = +2:00 = 13:00
5 -> 3^2 = 9 = +4:30 = 15:30
6 -> 4^2 = 16 = +8:00 = 19:00
7 -> 5^2 = 25 = +12:30 = 23:30
8 -> 6^2 = 36 = +18:00 = 05:00 + 1

Klopt dus precies, maar niet zoals bedoeld.
(en nogmaals: denk aan een bovengrens, anders kan een of ander ettertje zo al je gebruikers voor een paar jaar buitensluiten - of je moet het op basis van IP doen of zoiets)
Hoe kon ik zo lomp zijn :)
Dit was dus wat fout liep. Omkering van parameters.
Bovengrens is opgevangen op 2 manieren. Beheerders kunnen de teller op 0 stellen en er komt een max. wachtduur. Ik had het ipad artikel ook al gezien. Wel grappig.

Bedankt
Jan
.

Reageren