PDA

View Full Version : Kako napraviti activation mail


gorrc
23-05-2008, 19:29
Odlučio sam napraviti activation email.
I postupak je sljedeći korisnik dođe, upiše se u bazu stavi se nula, ako potvrdi ide na jedinicu i to je to.

No što ako ne potvrdi email, kako ga se riješti iz baze nakon nekog vremena.
Pošto imam pristup mysql 5 odlučio sam da točno u ponoć da se brišu svi korisnici stariji od 1 dan a da nisu aktivirali emal.

Jel ima koji bolji način?

tsereg
23-05-2008, 22:29
Ništa ne fali tome tvome načinu.

Neovisan način o bilo kakvim "servisima" sa strane jest da skripta za aktivaciju PRIJE samog obavljanja posla aktivacije korisnika koji ju je pokrenuo obavi brisanje svih korisnika kojima je interval aktivacije istekao. Imaš posve identičnu situaciju nakon toga.

Dakle, naprosto taj kod koji ti se izvršava u ponoć dodaj na sam početak skripte koja se izvršava kada korisnik klikne na link u aktivacijskom e-mailu. Taj kôd je zasigurno jedna jedina SQL naredba (ako su svi potrebni podaci u jednoj tablici i povezani s ON DELETE CASCADE na evt. druge tablice), no čak i da se sastoji od izvođenja više SQL DML-ova, sumnjam da je neko posebno opterećenje na server.

Efekt će biti posve isti, samo se teoretski može desiti da zapisi kojima je period istekao "zagađuju" bazu malo dulje od 1 dan (koliko je maksimum u tvome rješenju). U praksi će taj interval u prosjeku onoliki koliko često se novi članovi uspješno aktiviraju.

Kako je teoretski moguće da imaš samo članove koji se registriraju, ali se nikada nitko ne aktivira onda možeš u potpunosti zapriječiti takvu rupu tako da kôd u pitanju dodaš u skriptu za registraciju umjesto u skriptu za aktivaciju, jer se svatko mora registrirati prije nego se aktivira.

gorrc
24-05-2008, 10:07
Nažalost eventsi su tek u posljednjoj verziji mysql koja se nije udomačila kod web hostera. Tako da ću riješiti to na predloženi način.

Pokušavati ću se držati prakse da čim toga više rješavam na samoj bazi, kad je to moguće.

Pošto mysql iz verzije u verziju sve više jača, uskoro bi se mogla dogoditi generacija "mysql web developera" koja bi svu interakciju s bazom rješavala na samoj bazi (stored procedure, eventi, trigeri) a php koristila samo kao medij za prijenos.

tsereg
24-05-2008, 10:26
Ne zaboravi samo da izvođenjem brisanja kod registracije člana (umjesto prije aktivacije) imaš mogućnost da se član aktivira i nakon aktivacijskog perioda ukoliko nije na vrijeme obavljena registracija koja će pobrisati zapis. Zato ne bi trebao raditi aktivaciju samo na temelju postojanja ili nepostojanja zapisa, već i kalkulirati proteklo vrijeme ukoliko zapis postoji, jer je moguće da se naprosto još nitko nije registrirao, pa da "smeće" nije uklonjeno.