PHP ile Sıfırdan Script: Ders 1 – Üyelik Sistemi
PHP ile Sıfırdan Script: Ders 1 Üyelik Sistemi
PHP ile Sıfırdan Üyelik Sistemi Nasıl Yapılır
Merhaba sevgili okurum. Konuya başlamadan önce sana biraz gaz vereyim 🙂 Ben 3 yıl önce, 2016 yılında, bu internet sitesini açtığımda hiçbir yazılım dilini bilmiyordum. Sürekli öğrenmek istiyordum fakat zor olduğunu düşündüğüm için dersleri yarıda kesiyordum. Beni bu işe zorlayan kişi bir abim oldu. Okan Abime burdan teşekkürlerimi iletiyorum. Öğrenme hevesiyle başladıktan sonra her hatamda benimle ilgilendi, sorularımı yanıtladı, hatalarımı düzeltti. Ve aradan geçen 1 buçuk seneden sonra Okan Abimle beraber ortak bir projeyi tamamlayıp kullanıma sunduk. Düzgün bir çalışmayla kısa bir sürede PHP diline hakim olabilirsiniz. Sizin Okan Abiniz yoksa merak etmeyin Enes kardeşiniz var 🙂 Yorumlara elimden geldiğince yanıt vermeye çalışacağım. Okan Abime teşekkürlerimi tekrardan ileterek derse başlayalım.
Benim Sistemim:
Ben yazımı ve okuması daha kolay olduğu için Tayfun Erbilen’in yazıp geliştiriği BasicDB veritabanı sınıfını kullanacağım. Daha ilk dersten ne bu class derseniz, ben bununla öğrendim ve normal pdo sorgularından daha anlaşılır ve basit olması nedeniyle sizde bu class ile kolayca öğrenebilirsiniz.
BasicDB classını buraya tıklayarak indirebilirsiniz.
Let’s go
Evet geldik konumuza. Şimdi bir düşünelim, istediğimiz üyelik bilgileri ne olsun… Kullanıcı adı, şifre, e-posta, isim ve soyisim. Bu bilgiler şimdilik bize yeterli. Ama bu bilgilerin yanında iki şeye daha ihtiyacımız var. Bunlardan birisi üye numarası diğeri ise üye yetkisi. Toplamda 6 tane tabloya ihtiyacımız var.
Ben yaptığım projeleri kendi bilgisayarımda görüntülemek için xampp programını kullanıyorum. Buraya tıklayarak indirip bilgisayarınıza kurabilirsiniz.
Program kurulduktan sonra xampp kontrol panelini çalıştırıp Apache ve mySQL servislerini ‘start’ tuşuna basarak başlatalım.
Apache ve MySQL açılına yukarıdaki gibi arkaplanları yeşil renk olur. Eğer açılmıyorsa kontrol panelinin altında yer alan hatayı google’da aratarak çözüme kavuşabilirsiniz.
Veritabanı oluşturma:
Servislerimiz başarıla çalışıyorsa veritabanımızı oluşturalım. Tarayıcınızın adres çubuğuna localhost/phpmyadmin yazarak veritabanı yöneticimize ulaşıyoruz. Sol menünün en üstünde yer alan Yeni yazısına tıklıyoruz. Bizden bir veritabanı ismi ve karakter seti istiyor. Veritabanı ismi tamamen size kalmış. Ben örnek olarak veritabanı ismini ders yapıyorum. Karakter setini utf8_bin olarak seçtikten sonra oluştur butonuna tıklayınız. Şimdi karşımızda boş bir veritabanı var. Tablo oluştur alanında tablo adını uyeler yapalım. Kesinlikle Türkçe karakter kullanmayın. Sütun sayımızda 6 olacak. Bunları ayarladıktan sonra Git butonuna tıklayınız. Karşınızdaki tabloyu aşağıdaki resimde olduğu gibi doldurun.
Veritabanını görseldeki gibi ayarladıktan sonra Kaydet butonuna tıklayalım ve veritabanımız başarıyla oluşmuş oldu.
Dosyalarımızı oluşturalım
Xampp kontrol panelimizden Explorer butonuna basalım ve açılan sayfada htdocs klasörüne girelim. Bu klasörün içi boş değilse içindekileri silin veya hepsini başka bir yere taşıyın. Şimdi htdocs klasörüne system adında bir klasör açalım ki kodlarımız iç içe girmesin. system klasörünün içine config.php ve functions.php adında iki dosya oluşturalım. Yukarıdan indirmiş olduğunuz BasicDB.zip dosyasının içindeki BasicDB.php dosyasını da system klasörüne atınız. Şimdi veritabanı bağlantımızı yapalım. config.php dosyasını bir kod editörü ile açın.
[php]
<?php
$host = "localhost"; // Veritabanı adresiniz
$db_name = "ders"; // Yukarıda oluşturduğunuz veritabanınızın ismi
$db_user = "root"; // Veritabanı kullanıcı adınız ( xampp için root yazın )
$db_pass = ""; // Veritabanı şifreniz // ( xampp için boş bırakın )
try {
$db = new BasicDB($host, $db_name, $db_user, $db_pass);
} catch ( PDOException $e ) {
print $e->getMessage();
}
session_start();
?>
[/php]
Yukarıdaki kodlar ile veritabanı bağlantımızı yaptık. Şimdi veritabanı bağlantımızda bir sorun var mı kontrol edelim. htdocs klasörünün içine kayit-ol.php isminde bir dosya oluşturalım ve açalım.
[php]
<?php
require "system/BasicDB.php"; // BasicDB dosyamızı çağırıyoruz.
require "system/config.php"; // Veritabanı bağlantı dosyamızı çağırıyoruz.
require "system/functions.php"; // Fonksiyon dosyamızı çağırıyoruz.
?>
[/php]
kayit-ol.php dosyasına bu kodları yazdıktan sonra tarayımızda localhost/kayit-ol.php sayfasına girelim. Eğer boş bir sayfa çıkıyorsa doğru yapmışsınızdır. Ama hata metni varsa veritabanı bilgilerinizde bir sorun olabilir. Şimdi kayıt formunu yapalım. Kayıt formunda inputlara verdiğimiz name değeri, php’ye post olarak gider. Yani mesela name’i kullaniciadi olan bir input php’de $_POST[‘kullaniciadi’] olarak okunur. Formda bu name değerlerine dikkat etmenizi istiyorum.
[html]
<html>
<head>
<title>Kayıt ol</title>
<meta charset="utf8">
</head>
<body>
<form action="" method="post">
<input type="text" name="isim" placeholder="İsim girin"><br><br>
<input type="text" name="kullaniciadi" placeholder="Kullanıcı adı girin"><br><br>
<input type="password" name="sifre" placeholder="Şifre girin"><br><br>
<input type="email" name="email" placeholder="E-mail girin"><br><br>
<button type="submit" name="kayitol">Kayıt ol</button>
</form>
</body>
</html>
[/html]
Formumuzu oluşturduk. Name değerlerini inceleyiniz. Form methodumuz post olacak. Php tarafında formdaki verileri post metoduyla göndereceğiz.
Şimdi functions.php dosyamıza girelim ve kayıt işlemini veritabanımıza aktaralım.
[php]
<?php
if(isset($_POST[‘kayitol’])){
// Eğer kayıt ol formu gönderilmişse
if(!empty($_POST[‘kullaniciadi’]) && !empty($_POST[‘sifre’]) && !empty($_POST[’email’]) && !empty($_POST[‘isim’])){
/* Eğer formda boş bırakılmış bir değer yoksa burası çalışacak */
/* Formdan girilen verileri daha kolay okumak için değişkene alalım */
$kullanici_adi = $_POST[‘kullaniciadi’];
$sifre = $_POST[‘sifre’];
$email = $_POST[’email’];
$isim = $_POST[‘isim’];
/* Girilen kullanıcı adı veya e-mail ile bir üye kaydı varsa bunu tespit edelim */
$hesap_kontrolu = $db->from(‘uyeler’)
->where(‘uye_kullaniciadi’, $kullanici_adi)
->or_where(‘uye_mail’, $email)
->first();
if(!$hesap_kontrolu){
/* Eğer girilen bilgiler ile bir üye varsa kayıt işlemine devam ediyoruz */
$kayit_ol = $db->insert(‘uyeler’) // Üyeler tablosuna yeni veri ekliyoruz
->set(array( // Verilerimizi buraya gireceğiz.
"uye_kullaniciadi" => $kullanici_adi, // Kullanıcı adını yazıyoruz.
"uye_mail" => $email, // Kullanıcı e-postasını yazıyoruz.
"uye_sifre" => md5($sifre), // Şifreyi güvenlik için md5 ile tekrardan şifreliyoruz
"uye_isim" => $isim // Kullanıcının ismini yazıyoruz
));
if($kayit_ol){ // Eğer kayıt işlemi başarılı olmuşsa
$islem_mesaji = "Başarıyla kayıt oldunuz!"; // Kullanıcıya işlem durumunu bildirelim
} else { $islem_mesaji = "Sistemsel bir hata oluştu!"; /* Kayıt işleminde bir hata varsa bildirelim. */ }
} else { $islem_mesaji = "Bu kullanıcı adı veya e-mail ile başka bir üye var!"; }
} else { $islem_mesaji = "Lütfen tüm form verilerini doldurun"; /* Boş bırakılan form kutusu varsa hata verdirelim */ }
}
?>
[/php]
Veritabanına verilerimizi bu şekilde göndermeye çalıştık. Şimdi aşağıdaki kodu kayit-ol.php dosyasında form etiketinin hemen üstüne ekleyerek kullanıcıya bilgi verilmesini sağlayalım. Burada tabi ki tasarıma hiç önem vermiyorum. Ben sadece iskeleti hazırlıyorum size 🙂 Tasarımı da uğraşarak entegre edebilirsiniz sisteminize.
[php]
<?php
if(isset($_POST[‘kayitol’])){ // Eğer form gönderilmişse
echo $islem_mesaji; // İşlem mesajını göster
echo "<br><br>"; // Boşluk bırak
}
?>
[/php]
Şimdi bir kayıt olmayı deneyelim.
Görüldüğü gibi başarılı mesajını aldık. Veritabanımıza bakalım veri var mı diye.
Evet veritabanımızda verimiz gözükmekte. Şimdi gelelim bu üye bilgilerimiz ile giriş yapmaya.
htdocs klasörüne giris-yap.php adında bir dosya oluşturalım. kayit-ol.php ‘de olduğu gibi gerekli dosyalarımızı sayfamıza çağıralım. Kayıt sayfamızda olduğu gibi html ile bir form oluşturalım.
[html]
<html>
<head>
<title>Giriş yap</title>
<meta charset="utf8">
</head>
<body>
<form action="" method="post">
<input type="text" name="kullaniciadi" placeholder="Kullanıcı adı"><br><br>
<input type="password" name="sifre" placeholder="Şifre"><br><br>
<button type="submit" name="girisyap">Giriş yap</button>
</form>
</body>
</html>
[/html]
Tekrardan name değerlerine dikkatinizi çekerim. Çünkü form işlerinde bu name değerini kullanacağız.
[php]
<?php
if(isset($_POST[‘girisyap’])){ // Eğer giriş yap formu gönderilmişse
if(!empty($_POST[‘kullaniciadi’]) && !empty($_POST[‘sifre’])){
/* Eğer formda boş bırakılmış bir değer yoksa burası çalışacak */
/* Formdan girilen verileri daha kolay okumak için değişkene alalım */
$kullanici_adi = $_POST[‘kullaniciadi’];
$sifre = $_POST[‘sifre’];
/* Formdaki verilerle eşleşen bir üyenin olup olmadığını kontrol ediyoruz */
$giris_yap = $db->from(‘uyeler’) /* Üyeler tablosunda veri arıyoruz */
->where(‘uye_kullaniciadi’, $kullanici_adi) /* Formdan girilen kullanıcı adını arıyoruz */
->where(‘uye_sifre’, md5($sifre)) /* Formdan girilen şifreyi md5 ile şifreleyerek veritabanında arıyoruz */
->first();
if($giris_yap){ /* Eğer eşleşen bir üye varsa burayı çalıştırıyoruz. */
$_SESSION[‘giris’] = true; // Tarayıcıda giriş bilgilerimizi tutuyoruz
$_SESSION[‘uye_id’] = $giris_yap[‘uye_id’]; // Tarayıcıda üye numarası bilgisini tutuyoruz
header("Location: index.php"); // Giriş yapıldığı için kullanıcıyı ana sayfaya gönderebiliriz
} else {
/* Girilen bilgilerle üye yoksa kullanıcıya hata metnimizi veriyoruz. */
$hata_metini = "Kullanıcı adı veya şifre yanlış!";
}
}
}
?>
[/php]
Giriş yapılırken hata oluşursa kullanıcıya bilgi verelim. giris-yap.php dosyasında form etiketinin hemen üstüne aşağıdaki kodları ekleyelim.
[php]
<?php
if(isset($_POST[‘girisyap’])){ // Eğer form gönderilmişse
echo $hata_metini; // İşlem mesajını göster
echo "<br><br>"; // Boşluk bırak
}
?>
[/php]
Şimdi bir hatalı giriş yapalım, bakalım uyarı alıyor muyuz.
Evet hata alıyoruz şuan. Bir de doğru bilgilerimiz ile giriş yapalım.
Evet giriş işlemimiz başarılı oldu ve bizi index.php dosyamıza gönderdi. Tabi index.php adında bir dosyamız olmadığı için 404 hatası veriyor ama siz bir index.php dosyası oluşturursanız bu sorunu yaşamayacaksınız.
Peki bir sorunumuz yok mu sizce?
Şuan biz giriş yaptık ama hem giris-yap.php hem de kayit-ol.php sayfasına hala girebiliyoruz. Giriş yapılmışsa bu sayfalara girişi engellemeliyiz.
[php]
if(isset($_SESSION[‘giris’])){ // Eğer giriş yapılmışsa
header("Location: index.php"); // Ana sayfaya git
}
[/php]
Bu kodları giris-yap.php ve kayit-ol.php dosyalarımızda require kodlarının altına ekleyelim. Şimdi giriş ve kayıt sayfalarına girmeye çalışırsak bizi index.php dosyasına gönderecektir.
Bu dersin kodlarını buraya tıklayarak indirebilirsiniz.
Bu derslik bu kadar, diğer dersimizde giriş yapan kullanıcılar için bir sayfa oluşturacağız. Kendinize iyi bakın.