Untitled-5Bu uygulamada klasik bir kullanıcı adı/şifre ikilisi ile giriş denetiminin nasıl yapılacağını anlatalım. Uygulama adımları aşağıdaki gibi olacaktır:

  1. MySQL’e bağlanmak MySQL veritabanını oluşturmak
  2. Uygulamanın Tasarımı
  3. index.php sayfasını hazırlamak
  4. vt sınıfını yazmak
  5. index.php’den vt sınıfını kullanmak
  6. Uygulamanın tüm kodları

MySQL’e bağlanmak MySQL veritabanını oluşturmak

NetBeans ile MySQL’e bağlanmak için temelde iki şeye ihtiyacınız var.

1- Çalışmakta olan bir MySQL sunucusu

2- MySQL sunucusunun kullanıcı adı ve şifresi

Sisteminizde MySQL’in kurulu ve çalışıyor olduğunu farz ediyorum. Eğer kurulum sırasında aksini belirtmediyseniz kullanıcı adınız root, şifreniz ise boştur (yani şifre kısmını boş bırakın).

MySQL kurulu değilse buradan Xammp ile birlikte veya buradan tek başına nasıl kurabileceğinizi öğrenebilirsiniz.

MySQL en çok PHP ile kullanılmakla beraber, Java, Ruby gibi birçok diğer dilin programcıları da veritabanı olarak MySQL’i tercih ediyor. Aslında bu makalede anlatılacaklardan NetBeans’in desteklediği dillerden herhangi biri ile MySQL’i beraber kullanmak isteyen herkes istifade edebilir.

MySQL Sunucusunu NetBeans’e tanıtmak

NetBeans’i açın:

clip_image002

1. Services sekmesinde, Databases düğümünü açın, MySQL Server düğümüne sağ tıklayın ve Connect’i seçin.

2. Eğer bağlantı gerçekleşmezse. MySQL düğümüne sağ tıklatın ve açılan menüde properties’i seçin. Aşağıdaki penceredeki bilgilerin doğruluğunu kontrol edin.

clip_image001

Eğer bağlantı başarılı olursa aşağıdaki gibi MySQL sunucusunun üzerinde bulunan veritabanlarının açıldığını göreceksiniz.

Untitled-1

Artık ister varolan veritabanları ile çalışabilir istersek de yeni bir veritabanı oluşturabiliriz.

Yeni Veritabanı Oluşturmak ve Bağlanmak

1. Services penceresinde MySQL Server düğümüne sağ tıklayın ve Create Database’i seçin. Create MySQL Database penceresi açılır.

2. Create MySQL Database penceresinde yeni veritabanının ismini yazın. Burada örnek olarak ornek isimli veritabanını kullanacağız.

Untitled-2

3. Yeni veritabanı MySQL Server düğümünün altında görünecektir. Daha aşağıda ise (connection node icon)  simgesini göreceksiniz. Bu bir bağlantı düğümüdür ve MySQL’in veritabanınıza bağlı olduğunu gösterir.

Untitled-3

Şu anda oluşturduğumuz veritabanı içerisinde tablo ve kayıt yok.

SQL Editörünü Kullanarak Tablo ve Kayıt Ekleme

1-  Database Explorer penceresinde, ornek bağlantı düğümünü (connection node icon)  açın ve Tables, Views and Procedures adında üç farklı alt klasör olduğuna dikkat edin. Tables düğümüne sağ tıklayın ve Execute Command seçeneğini seçin. Ana pencerede SQL editöründe boş bir sayfa açılacaktır.

2- SQL Editöründe aşağıdaki sorguyu yazın.

CREATE TABLE `uyeler` (
 
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 
`kullaniciadi` VARCHAR(45) NOT NULL,
 
`sifre` VARCHAR(45) NOT NULL,
 
PRIMARY KEY (`id`)
 
) ENGINE=InnoDB AUTO_INC

3- Sorguyu çalıştırmak için, görev çubuğunda üstteki Run SQL (run SQL button) düğmesine basın (Ctrl-Shift-E) veya SQL Editörünün içerisinde sağ tıklayıp Run Statement’ı seçin. NetBeans veritabanında uyeler tablosunu oluşturur ve Output penceresinde aşağıdakine benzer bir mesaj alırsınız.

Untitled-4

4- Değişiklikleri Tables düğümüne sağ tıklayıp Refresh’i seçerek görebilirsiniz. Yeni Uyeler tablosu düğümü (table node icon) Tables düğümünün altında görünüyor olmalı. Eğer tablonun düğümünü açarsanız oluşturduğunuz kolonları (alanları) birincil anahtardan (primary key) (primary key node icon) başlamak üzere görebilirsiniz.

5- SQL Editöründeki kodu silip aşağıdaki kodu yazarak tekrar Run SQL (run SQL button) düğmesine basarak örnek kayıtlarımızı veritabanına ekleyelim.

INSERT INTO `uyeler` (`id`,`kullaniciadi`,`sifre`) VALUES
 
(1,'hrzafer','netbeans'),
 
(2,'kullanici2','mysql'),
 
(3,'kullanici3','php');

Yukarıda SQL kodu çalıştırarak yaptığımız işlemleri ve daha fazlasını görsel olarak da yapabilirsiniz. Aşağıda kısaca bu işlemlerden bazılarını menüden nasıl yapabileceğinizi listeledim.

Görsel Arayüz Kullanarak Veritabanı İşlemleri

  • Yeni Tablo Oluşturmak: Tables düğümüne sağ tıklayarak Create Table’ı seçin
  • Tablodaki Verileri görüntülemek: İlgili tablo düğümünün (bu örnekte uyeler) üzerine sağ tıklayarak View Data
    • Bu işlemi yaptığınızda sağ tarafta SQL editöründe select * from uyeler kodunun çalıştırıldığını ve hemen aşağıda kayıtların listelendiğini göreceksiniz. Oradaki menü ve simgeleri kullanarak kayıt ekleme, silme vb. birçok işlemi görsel olarak yapabilirsiniz.
  • Tabloya yeni kolon eklemek/silmek: Tablo düğümünün üzerine sağ tıklayarak Add Column’u seçerek kolon ekleyebilir veya bir kolona sağ tıklayıp delete’i seçerek o kolonu silebilirsiniz.

Uygulamanın Tasarımı

Uygulamamızda veritabanımız haricinde iki temel kısım olacak. Birincisi kullanıcının giriş yapacağı index.php sayfası. Diğeri ise arka planda çalışacak ve veritabanına bağlanma, veritabanı üzerinde sorgu çalıştırma gibi işlemleri yapacak olan vt.php dosyası.

İlk bölümde anlatıldığı gibi yeni bir PHP Application projesi açalım. Projenin ismi Giris olsun.

index.php üzerinde bir kullanıcı girişi formu oluşturmak için aşağıdaki kodu kapanan </body> etiketinden önce yapıştıralım:

Username: Password

Şimdi asıl kısım olan vt.php dosyasını oluşturalım.

vt.php dosyasını yeni bir dizin içerisinde oluşturmak için:

1. Source Files düğümünün üzerine sağ tıklayın ve New > Folder’ı seçin

2. Açılan New Folder penceresinde Folder Name alanına Includes yazın ve Finish’i tıklayın.

3. Includes düğümünün üzerine sağ tıklayın ve New > PHP File’ı seçin.

4. Açılan New PHP File penceresinde File Name alanına vt yazın. Finish’i tıklayın.

vt.php dosyasını açın. <?php ile  ?> etiketlerinin otomatik olarak oluşturulmuş olması lazım. Aşağıdaki kodu bu iki etiket arasına yapıştırın:

class vt {
 
// Bu sınıfın bellekte aynı anda yalnızca bir örneği oluşturulacak
 
private static $instance = null;
 
// db connection config vars
 
private $user = "root";
 
private $pass = "";
 
private $dbName = "ornek";
 
private $dbHost = "localhost";
 
private $con = null;
 
}

vt.php dosyamızın içerisinde vt isimli bir sınıf oluşturduk. Bu sınıf uygulamamızın tüm veritabanı işlemlerinden sorumlu olacak.
Değişkenlerin başındaki private bu değişkenlerin yalnızca bu sınıf tarafından kullanılabileceğini dışarıdan erişilemeyeceğini belirtiyor. Birazdan yazacağımız public metodlar ise bu sınıfın dışarıya bakan yüzü olacak. Konunun bu kısmı nesneye yönelik programlamanın alanına girdiğinden daha fazla ayrıntıya girmiyorum.
Normalde sınıfların bellekte birçok örneği oluşturularak kullanılır. Ancak bu sınıf veritabanı gibi kritik bir kaynağı kullandığından bu sınıf aynı anda bellekte yalnızca bir kez oluşturulmalı. İkinci bir oluşturma girişimine izin verilmemeli. Bunu yüzden bu sınıf singleton türü bir sınıf olacak.
Sınıfa aşağıdaki kodu ekleyelim:

//Bu metod static olmalı ve eğer zaten bir nesne mevcut değil ise oluşturup döndürmeli
 
public static function getInstance() {
 
if (!self::$instance instanceof self) {
 
self::$instance = new self;
 
}
 
return self::$instance;
 
}
 
//clone ve wakeup metodları dışarıdan singleton sınıfın kopyalarının oluşturulmasını engelleyerek çoğaltılma ihtimalini ortadan kaldırır.
 
public function __clone() {
 
trigger_error('Clone is not allowed.', E_USER_ERROR);
 
}
 
public function __wakeup() {
 
trigger_error('Deserializing is not allowed.', E_USER_ERROR);
 
}

getInstance metodunun public ve static olduğuna dikkat edin. Public olduğu için bu metoda dışarıdan erişilebilir ve static olduğu için bu metoda sınıftan bir nesne oluşmuş olmasa da erişilebilir. Zaten bu metod sınıfı oluşturacağından static olmak zorunda.
Çift iki-nokta (::) ve self anahtar sözcüğü static fonksiyonlara erişmek için kullanılır. Self anahtar sözcüğü ise sınıf içerisinde sınıfın kendisini referans göstermek için kullanılır. Eğer çift iki-nokta işlecini sınıfın dışında kullansaydık self yerine sınıfın adını yazmamız gerekirdi.
vt sınıfının yapıcı (constructor) metodu
Yapıcı bir sınıfın bellekte bir örneği (nesne) her oluştuğunda çalışan özel bir metoddur. Burada yapıcı metodumuz veritabanına bağlanma işini gerçekleştiriyor.
vt sınıfına aşağıdaki kodu ekleyelim:

// private yapıcılar. Normalde yapıcı metodlar public olurlar. Burada yapıcı metodun private olması singleton tasarım deseninin bir gereği
 
private function __construct() {
 
$this-&gt;con = mysql_connect($this-&gt;dbHost, $this-&gt;user, $this-&gt;pass)
 
or die ("Could not connect to db: " . mysql_error());
 
mysql_query("SET NAMES 'utf8'");
 
mysql_select_db($this-&gt;dbName, $this-&gt;con)
 
or die ("Could not select db: " . mysql_error());
 
}

vt sınıfındaki diğer metodlar
Şu ana kadar vt sınıfında eklediğimiz kodlar sınıfın bellekte aynı anda yalnızca bir kere oluşturulmasını ve oluşturulurken de veritabanı bağlantısını yapmasını sağlayan kodlardı. Şimdi veritabanından kullanıcı adı/şifre denetimi yapan fonksiyonu (metodu) yazalım

public function uye_girisi_denetle ($name, $password){
 
return mysql_num_rows(mysql_query("SELECT * FROM uyeler
 
WHERE kullaniciadi = '" . $name . "' AND sifre = '" . $password . "'"));
 
}

Burada kullanıcının index.php sayfasından girdiği verileri parametre olarak alıp sorguya ekleyen ve sorguyu çalıştırarak sonucunu döndüren bir fonksiyon söz konusu.
Birazdan index.php sayfasından bu sınıfı kullanıp fonksiyonlarını (metodlarını) çağırdığımızda mesele daha iyi anlaşılacak.
Öncelikle index.php sayfamıza vt sınıfını tanıtmakla başlayalım. Aşağıdaki kodu <?php etiketinin hemen altına ekleyiniz.
require_once(“Includes/db.php”);
Şimdi de vt sınıfının uye_girisi_denetle isimli fonksiyonunu çağıran kodu ekleyelim:

if ($_SERVER["REQUEST_METHOD"] == "POST"){
 
if(vt::getInstance()-&gt;login($_POST["username"], $_POST["password"])==1) {
 
echo 'Giriş Tamam’;
 
} else {
 
echo 'Giriş Hatalı';
 
}
 
}

Evet böylelikle bu çok basit örnek uygulamamızı tamamlamış olduk.
Kodların tamamlanmış halini buradan indirebilirsiniz.
Herkese Kolay Gelsin
Kaynaklar

http://www.netbeans.org/kb/

http://www.netbeans.org/kb/trails/php.html

http://www.netbeans.org/kb/articles/mysql.html

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPrint this pageEmail this to someone