Autor | Zpráva | ||
---|---|---|---|
nodo Profil |
#1 · Zasláno: 24. 3. 2020, 15:35:09
Zdravím.
Mám tabulku logins - id, attempts, usercode, login(datetime), stav(enum:ano-nie) Do attempts sa ukladá počet nesprávnych pokusov o prihlásenie, do loginu aktuálny čas zápisu do databázi a a po troch neúsppešných pokusoch stav sa prepíše na ano. Užívateľ sa na 30 minút zablokuje. Nepodarí sa sprejazdniť výppis touto formou, trápim sa s tým už od rána. už som rozmýšlal či tam netreba do DB zapísať nie aktuálny čas, ale čas o 30 minút. výpi vyzerá takto: $query1 = "SELECT * FROM logins WHERE usercode='$usercode', stav='ano' and login BETWEEN DATE_SUB(NOW()- INTERVAL 30 minutes) LIMIT 1"; Vedel by ma niekto nasmerovať, kde robím chybu. Ďakujem za odpovede. |
||
Tomášeek Profil |
#2 · Zasláno: 24. 3. 2020, 15:44:35
nodo:
A co hlásí SQL error? Minimálně je špatně čárka ve WHERE podmínce. Pak i ten interval by IMHO měl být 30 minute (nikoliv 30 minutes ).
|
||
nodo Profil |
#3 · Zasláno: 24. 3. 2020, 18:09:52
Tomášeek:
A co hlásí SQL error? You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' stav='ano' and login BETWEEN DATE_SUB(NOW()- INTERVAL 30 minute) LIMIT 1' at line 1 |
||
Tomášeek Profil |
#4 · Zasláno: 24. 3. 2020, 18:57:32
nodo:
Ano, syntaktická chyba. Dokonce víš přesně kde. Navíc o té jsem ti už psal. |
||
nodo Profil |
Tomášeek:
„Ano, syntaktická chyba. Dokonce víš přesně kde. Navíc o té jsem ti už psal.“ Prisahám, neviem. Hrám sa tu s tým, ale neviem aká čiarka. $query1 = "SELECT * FROM logins WHERE login='BETWEEN DATE_SUB(NOW()- INTERVAL 30 minute)' and usercode = '$usercode' and stav='ano' LIMIT 1"; |
||
Kajman Profil |
SELECT * FROM logins WHERE login='BETWEEN DATE_SUB(NOW()- INTERVAL 30 minute)' and usercode = '$usercode' and stav='ano' LIMIT 1 Between potřebuje dva parametry hranice minimum a maximum. Vzhledem k tomu, že budoucí záznamy se neočekávají, between bych nepoužíval a dal obyčejné většítko. SELECT * FROM logins WHERE login > DATE_SUB(NOW()- INTERVAL 30 minute) and usercode = '$usercode' and stav='ano' LIMIT 1 Edit: A Nezapomeňte $usercode správně escapovat. |
||
nodo Profil |
Kajman:
„ SELECT * FROM logins WHERE login > DATE_SUB(NOW()- INTERVAL 30 minute) and usercode = '$usercode' and stav='ano' LIMIT 1 “
Pri tomto hlási tú istú syntaktickú chybu. Pri nižšie uvedenej zmene zase žiadna chybová hláška, ale nič sa ani nedeje. Login je datetime, preveril som si to. Som samouk, vždy som si veci dohladal, naučil. Teray som sa zasekol poriadne. $query1 = "SELECT * FROM logins WHERE login > 'NOW()+INTERVAL 30 minute' and usercode = '$usercod' and stav='ano' LIMIT 1"; |
||
Tomášeek Profil |
#8 · Zasláno: 24. 3. 2020, 22:20:11
nodo:
V kajmanove dotazu syntaktická chyba neni. Ve tvém dotazu take ne, tam je logická chyba (hledas v datetime sloupci nesmyslný string). |
||
Keeehi Profil |
„Pri tomto hlási tú istú syntaktickú chybu“
Těžko to může hlásit stejnou syntaktickou chybu. Vlastně ano může. V případě, že jsi soubor zapomněl uložit nebo nahrát na server. Tak Kajmanův dotaz zkus ještě jednou, pomalu a dej si pozor abys v procesu na nic nezapomněl. Nebo to byla jiná chyba. |
||
Kajman Profil |
#10 · Zasláno: 24. 3. 2020, 22:53:24
Ještě tam zůstala chyba, nevšiml jsem si, že ve funkci date_sub má jeden parametr (tedy, že tam má mínus a ne čárku).
Lze použít login > NOW() - INTERVAL 30 minute login > DATE_SUB(NOW(), INTERVAL 30 minute) |
||
nodo Profil |
#11 · Zasláno: 25. 3. 2020, 23:02:59
Keeehi:
Nezabudol som uložiť, nič také. Problém bol inde, do teraz som sa s tým hral. $query1 = "SELECT * FROM logac WHERE logins > NOW() - INTERVAL 30 minute and usercode = '$usercode' and stav='ano' LIMIT 1"; Takto to funguje na 100%. Veľmi pekne ďakujem každému. |
||
Časová prodleva: 5 let
|
0