Čudan bug

PHP i MySQL se ponašaju “neuračunljivo” xd

Mijenjam stanje u bazi…to stanje čita php i prema tome oblikuje stranicu. Potrebno je jedno 4,5 puta kliknuti na isti link stranice dok PHP skapira da se vrijednost u bazi promjenila i da prema tome drugačije ispiše stranicu.

Ima li to uopće smisla?…meni je to nevjerovatno čudno i rekao bi da je nemoguće da se greška potkrada iz tog smjera. Ali stvari sam toliko pojednostavnio…da više nemam drugačiju sumnju u izvor greške. :S ??

možda te zafrkava što čita stranicu iz cache-a ?

Pa razmišljao sam o tome. I to je očigledno dio cijelog problema…ali neznam kako to izbjeći?

  1. stvar: lokalno radi sve dobro.
  2. stvar - svjestan sam kašnjenja da cijeli sistem prepozna da sam uploadao novu skriptu na server. Neznam kako taj delay izbjeći…pa si prosljedim neke oznake u najnovijoj verziji skripte. Znaci ovaj dio sam dobro provjerio da nebi slučajno ovdje bio korjen problema…ali problem i dalje ostaje.
    Skripta iz koje dolazi problem je php skripta i inkludana je pretežno u sve podstranice i index.
    Očigledno je da dobro promjenim parametre u bazi…provjerim promjenu i u phpAdminu i onda nastupa ono što nebi smjelo biti.
    Sve podstranice znači inkludaju tu istu skriptu…a imam totalno šarenilo koja će od tih podstranica prepoznati promjenu.
    Tipa, nekad index prepozna odmah promjenu…dok ostale kasne. Uglavnom nakon malo klikanja po linkovima (5,6 puta) …sve podstranice skuže promjenu. I naglašavam da ta klikanja po linkovima ne mijenjaju nikakve parametre u bazi. Da se nebi slucajno od tuda uvukao neki nesporazum…pratim to dobro!

Znači i više je nego očigledno da je stvar do kašnjenja kojeg nebi smjelo biti :s. Kako se boriti protiv toga??

Pokušaj sa ctrl+f5 ako ni tako ne pomogne onda je keširana na serveru.

Hmm…ovaj ctrl+f5 radi, znaci keširana je na client strani ako sam dobro skužio. Ali što mi je činiti po tom pitanju??..i koji dio uopće može biti keširan??
Ispada kao da su keširani rezultati koje inkludana skripta treba isčitati iz baze. Ako je to istina…to je u jednu ruku pametno od browsera…jer za korisnikov id su uglavnom isti rezultati koji se dohvacaju…ali u ovom slučaju je jedan podatak među njima koji je vrlo izmjenjiv :s ??

Ako ti sa ctrl+F5 radi sve kako treba, onda si, dok razvijaš stranicu, isključi keširanje browsera.
Kako to napraviti za pojedini browser ćeš lako izguglati.

Ako te brine kako to izgleda kod ostalih korisnika:
(web) aplikacija ti nije dobro napisana.

Pa nije valjda da, kad ti jednom korisnik posjeti sajt, kod svake promjene stranice ponovno čitaš jedne te iste podatke iz baze ?
To se ne radi tako.
Kod prve posjete se povuku podaci iz baze i spreme se u sesiju ($_SESSION).

Disclaimer: ovo sve pričam napamet, jer ne znam točno koja je namjena tvoje aplikacije.

Morat ću malo proguglat razliku između session-a i coockie-a, ali u suštini to radim s coocikie-ima.

Ali moja situacija je da dohvaćam podatke koje moram čitati iz baze, jer očekujem da se ti podaci izmjenjuju. Istina, čitam neke i koji su stalni, ali to iz jednog glupavog razloga (zbog nesigurnosti i ne znanja). Naime par podatka koji su zapisani u kukijima provjeravam u bazi pri svakoj konekciji jer sam pretpostavio da kuki netko može mijenjati…i tako provaliti u nečiji profil. Neznam jeli to bezobrazložen strah…ali to u svakom momentu lako uklonim.
Upravo ta skripta, koja identificira korisnika i potvrđuje ispravnost kukija…“usput” dohvaća i neke podatke o korisniku za koje očekujem da se mijenjaju.

Ali kako se to sve dešava na serveru…ne kužim kako browser može utjecati na varijablu koja je definirana na serveru čitanjem iz baze?

Ako sam dobro shvatio…onda browser za pristup stranici niti ne posjećuje server…nego sve ispiše kako je bilo i zadnji put?

Znaci tom logikom bi ja one podatke koji su promjenjivi…trebao dohvatiti s ajaxom na onload?

Čekaj, kad ti promjeniš vrijednost u bazi i kad čitaš te podatke? Daj objasni detaljnije o čemu se radi i dio koda nebi bilo loše

Pa mijenjam vrijednost tako da korisnik korisniku pošalje poruku. (ajax). Dodje mi na isto promjenio li ja to i ručno preko phpAdmina.

Kad taj korisnik koji je dobio poruku posjeti stranicu, u headeru bi mu trebalo svjetlit pismo. Ili pojednostavljeno…u headeru ispisujem 1 ili 0.
Kad korisnik posjeti svoj inbox, automatski mu se postavlja da je pročitao poruku…i pratim to u phpAdminu i taj dio dobro odradi. Ali kad korisnik dalje posjeti neku od podstranica, nova poruka i dalje svjetli …tj. ispisuje se 1. Nakon par kliktanja po okolnim straincama ta jedinica shati da bi trebala zapravo biti nula i dodje u svoje pravo stanje. Naglasavam da se tokom tog vremena (kliktanja) ništa ne mijenja u bazi.

Često neka od podstranica ispisuje jedinicu, dok druga nulu…tek nakon nekog vremena sve dodju u isto i točno stanje.
A ista skripta je inkludana u tim podstranicama koja čita taj podatak.

Dio koda ću ovako predočiti:
$q;
//pročitam iz baze njegovu vrijednost 1 ili 0 pomoću inkludane skripte koja čita još svašta…i mora čitati jednako za sve podstranice u koju je inkludana
echo $q //svejedno ispise ponekad 1 ponekad 0 …tek nakon nekog vremena se ispisuje točno stanje.

simple as that.

Rješeno…tj. nadam se shvaćen uzrok problema.
Meni je jedino bilo logično da browser proučava stranicu i pamti onu na kojoj se rijetko mijenjaju parametri…te da ju nekako označi. Sljedeći put kad ide na tu stranicu, zaboravi na internet i cijelu je pokaže iz svoje memorije.

Jer stranice na kojima se mijenjaju non stop podaci…tu ne dolazi do ovakve zbrke, mada su uvijeti svi identični osim broja parametara koji se mijenjaju. Ova stranica gdje dolazi do zbrke…razlikuje se samo u jednoj jedinici ili nuli (tj. jednoj liniji…jer u prvoj namjeri je jedna linja ovisia o tom 1/0) …ali ta jedna linija je bila rijetko promjenjiva, i kao da je browser odlučio ne čitati tu stranicu sa servera. Tj. čitati ju, ali svaki cca 11 put. To sam išao testirai…i stvarno, svaki put nakon 11 klikanja on shvati promjenu. Zbunjivalo me malo da ponekad promjena dodje i nakon 13 klikanja. I onda sam skontao. Browser da shvati promjenu treba mu zapravo cca 10 sekundi, unutar kojih sam ja stigao kliknuti 11-13 puta na link. Znaci dovoljno mi je stisnuti jedanput, ako pricekam prvo 10 sekundi.

Sad mi je jasno i čemu to…veoma brzi povratak na istu stranicu neće zahtjevati ponovno učitavanje stranice itd. Ali ovdje stvarno može zbuniti. Tipa netko ima novu poruku, udje u poruke…vidi neku kratku poruku “ok…dogovoreno” …krene dalje, a ono poruka još svijetli. A najviše mene zbunilo dok sam pretumbao sve da vidim jel se negdje potkrala greška.

Kako sam ja shvatio ti zapisuješ varijablu u cookie, to mi se čini kao najizgledniji problem. Ako je podatak 1 ili 0 spremljen u bazu, postoji li mogućnost da prilikom svakog otvaranja stranice provjeriš podatak u bazi bez spremanja podatka u session ili cookie. Tako bi podatak uvijek bio “svijež” i ne bi dolazilo do ovakvog problem

nema veze ovaj podatak s kukijima. Problem i jeste što ga ja pokušavam čitati iz baze…a ono mi vraća drugu vrijednost. No kako sam objasnio u zadnjoj poruci…mislim da sam skuzio o cem se radi.