04 Jul

Eposta adresi doğrulama

Genellikle eposta doğrulamak için kullanılan yöntem , bir düzenli ifade ile verile adresi doğrulamaktır :

1
2
3
if(!preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email)) {
  echo  'geçersiz eposta';
}

Ama , bu sadece eposta adresinin belirli standartta yazılmasını sağlar, boyle@biradresyok.com yazdığınızda yukarıdaki kontrolü devredışı bırakır. Siz epostanın doğru olduğunu kabul edersiniz.

Eposta doğrulamanın bir başka yolu daha var . Verilen eposta adresine ait mx kaydının olup olmadığını kontrol etmek :

1
2
3
4
5
6
7
8
9
10
11
12
$email='boyle@biradresyok.com';

$sunucu= substr($email,strpos($email,'@')+1);

$sonuc= array();
getmxrr($sunucu,$sonuc);

if(count($sonuc)>0){
 echo 'adres gecerli';
}else {
 echo 'adres gecersiz';
}

Bu yöntemin bir dezavantajı, mx kaydını kontrol ederken, mx kaydı olmayan bir adres olduğu zaman bir süre bekletmesidir (birkaç saniye). Bunun haricinde mx kaydı kontrol ederek eposta doğrulaması , diğer yöntemlere göre çok daha yüsek doğruluk payı olan sonuçlar verebilir.

03 Jul

Mysql’de Tekrarlayan (Mükerrer) Kayıt Algılama

Bir tabloda , sadece bir adet aynı nitelikte bir kayıt olmasını istediğimizde , ilgili alan veya alanları “unique” yaparak bunu kolaylıkla yapabiliyoruz. Alanı unique yaptıktan sonra, aynı nitelikte kayıt girmeye çalıştığımızda bize hata döndürür. İşte bu hata ve hata kodunu izleyerek, sistemde tekrarlayan bir kayıt olup olmadığını bulabiliriz .

Örnek olarak bir testdb oluşturalım, sonrasında aşağıdaki sorguları çalıştırarak tablomuzu oluşturalım :

CREATE TABLE `kullanici` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`isim` VARCHAR( 32 ) NOT NULL ,
`nick` VARCHAR( 32 ) NOT NULL ,
`sifre` VARCHAR( 32 ) NOT NULL ,
`eposta` VARCHAR( 32 ) NOT NULL ,
`web` VARCHAR( 32 ) NOT NULL
) ENGINE = InnoDB;

ALTER TABLE `kullanici` ADD UNIQUE(`nick`);
ALTER TABLE `kullanici` ADD UNIQUE(`eposta`);

kullanıcı tablosu oluşturarak , nick ve eposta alanlarımızı unique yapıyoruz. Böylece tablomuzda benzer nick ve eposta kaydedildiğinde bize hata döndürecektir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$pdo =new PDO('mysql:dbname=testdb;host=localhost','root','q1w2e3');
$pdo->setAttribute(Pdo::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='insert into kullanici values(null,?,?,?,?,?)';

try {
   $stm =$pdo->prepare($sql);
   $stm->execute(array('ersin dogan','ersin','1234','deneme@ersindogan.com','http://ersindogan.com'));
   echo 'Kayıt başarılı';
}catch(PDOException $e) {
   if($e->getCode() ==23000 ) {
      echo 'Bu kullanıcı veya eposta sistemde mevcut<br/>';
   }
   echo '<b>Bir hata oluştu : </b>'. $e->getMessage();
}

Bu kodu ilk çalıştırdığımızda ,bilgiler tabloya kaydedilecek. İkinci defa çalıştırmayı denerseniz, “Bu kullanıcı veya eposta sistemde mevcut” hatasını görürsünüz.

Yukarıdaki koddan da anlaşılabileceği gibi, dönen hata kodu 23000 ise ( bu hata kodu mysql veritabanı ve pdo eklentisine özeldir, başka veritabanlarında bu hata kodu farklı olabilir) , kaydımızın tekrarlayan bir kayıt olduğunu anlayabiliyoruz.

Genelde ilk başladığımız zamanlarda , öncelikle o kaydı veritabanında arar, eğer yoksa kayıt işlemini yapardık. Ama artık daha efektif çözümler mevcut ve bu yöntemleri kullanarak daha kolay çözümler üretebiliriz.