Veri tabanı kullanıcı tablosunda yetki diye bir sütun oluşturun, varsayılan değeri de 0 olsun, yeni üye her kayıt olunca otomatik 0 yani yetkisiz olarak kayıt olur, sorgu yaparken WHERE yetki=0 ekleyin tamamdır :)
Bir kişinin bir kere kayıt olmasını engellemek imkansız aslında, ama üyelerin en belirleyici kayıtları olan e mail adreslerini sorgulayıp daha önceden varsa kayıt olamasın. Yani yine sorguya $sql=$db->..... WHERE eposta='{$_POST[\'email\']}' yazarsınız. Daha sonra eğer bu e posta yoksa yani
if(!$sql->rowCount()) {
Yeni üye ekleme işlemleri
}
Yaparsanız olur :)
Aktivasyon olayını da yine tabloda bir aktivasyon sütunu açın, kullanıcı kayıt olduğu anda o sütuna rastgele bir yazı eklensin, kontrol işlemlerinde eğer o sütundaki yazı atıyorum onaylandı değilse hesabınızı aktif edin yazısı çıksın.
Arka planda da o sütuna eklenen rastgele yazıyı üyenin e posta adresine
https://site.com/onay/rastgeleyazı şeklinde gönderin, üye o bağlantıya tıkladığı zaman onay.php dosyasına gitsin orda ister hem session ile rastgele yazı ister sadece sondaki rastgele yazıyı veri tabanından kontrol etsin, eğer varsa öyle bir rastgele yazı üyenin aktivasyon sütununa onaylandı yazsın.
Benim kendimce uydurduğum senaryo bu, kendim de bu sistemi yazdım kullandım :)