| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
Zdravim, mam nasledovny problem (nie som si isty ci to patri sem alebo do php...)
Strucny popis: Robim prihlasenie. User napise meno a heslo, ja skontrolujem ci je spravne, vygenerujem session_id ktore zapisem do $_SESSION aj do databazy. Nasleduje forward na oznam ze prihlasenie prebehlo.
V com je problem: Pri zobrazeni oznamu po prihlaseni "stranka" nevie ze je user lognuty. Pri zobrazeni akejkolvek stranky vykonavam jednoduchu kontrolu na zistenie ci je user lognuty: Na zaklade udajov zo $_SESSION updatnem "datum poslednej akcie" v tabulke online userov. Potom skontrolujem affected_rows. No a tu je problem. Affected rows mi totiz vrati 0. Ale iba pri prvom zobrazeni stranky ihned po lognuti.
Postup SQL dotazov - chronologicky
1) INSERT INTO online_users... - odlozim session_id
2) forward na oznam
3) Kontrolny select z online_users (zaznam tam je, session_id sedi s tym co je v $_SESSION)
4) UPDATE online_users... affected_rows vracia 0 (ako je to mozne? v kontrolnom selecte ten zaznam vidim, mal sa updatnut!)
A teraz to najzaujimavejsie - rovnaky postup ako naposledy, akurat...
1) INSERT INTO online_users... - odlozim session_id
X) sleep(1) sekundu pockame
2) forward na oznam
3) Kontrolny select z online_users (zaznam tam je, session_id sedi s tym co je v $_SESSION)
4) UPDATE online_users... affected_rows vracia 1
Vopred upozornujem ze mi nikde nechyba ziaden commit, zaznam bol urcite uspesne insertnuty, coho dokazom je kontrolny select. Ako je mozne ze update nezbehne? Preco ten zaznam nevidi okamzite? Pri update vyuzivam prepare($sql). Sleep sice moj problem "vyriesi", ale na inom mieste ma to moze nakopat rovnako.
verzia php: 5.2.6
mysql a mysqli: 5.0.51a
tabulka je typu innDB
dakujem za typy
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava | Napísal autor témy GoodWill: 20.07.2008 11:55 | |
|
Au, poprosim lock
Nasiel som preklep (chybal commit )
ale aj tak nerozumiem preco sleep pomohol
EDIT: Uz viem preco sleep pomohol. Mimochodom, v commite sice preklep bol, ale ani jeho doplnenie neprinieslo zelany vysledok.
Problem je v tom ze affected_rows moze vratit 0 aj ked UPDATE zbehne! Stava sa to vtedy ak sa zaznam v databaze nezmeni, cize ak updatujete rovnakou hodnotou aka tam uz je. Pozor na to Velmi neprijemne spravanie.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|