PHP: Hafta 7

php-logo php-logo   {right}Bu hafta genel olarak sessionları tekrar ettik. Bunun dışında bazı teknolojilerden ve biraz da bitirme projesinden bahsettik. Bitirme projesinin son teslim tarihinin 7 Ocak 2010 Perşembe olduğunu unutmayınız. Projeye buradan ulaşabilirsiniz.

Bugünkü tekrar sonucunda sessionlar ve veri tabanı kullanarak basit bir oturum açma sistemi tasarladık derste. Ödev için de oldukça kullanışlı olabilecek, sessionsların kullanımına güzel bir örnek olan kaynak kodlarını bu yazının sonunda bulabilirsiniz.

Gelecek hafta Salı günü için bir ek ders planlandı, ancak kesin bir şey yok şu noktada. O gün boş laboratuvar olup olmadığını öğrendikten sonra netleşecek. Duyuru yapacağım.

24 Aralık Perşembe günü laboratuvarda yazdığımız kodları buradan indirebilir, ya da indirmeden incelemek isterseniz yazının devamına bakabilirsiniz. (Kodlar daha anlaşılır olması için biraz daha düzenlenmiştir.)

index.php

 <?php /* DİKKAT: Bu koddaki oturum açma sistemi, gerçek bir PHP projesinde kullanılamayacak kadar dış etkilere açık olduğundan kodu dikkatli kullanmanızı öneririm. */ header("Content-Type: text/html; charset=utf-8"); session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="tr-TR"> <head profile="http://gmpg.org/xfn/1"> <!-- EgeBK PHP Kursu Örnek Kaynak Kodları --> <title>Basit Bir Oturum Açma Programı</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="author" content="Umut Benzer" /> </head> <body> <form action="index.php" method="post"> <label for="name">Kullanıcı adı</label> <input type="text" id="name" name="name" size="10" /> <label for="pass">Şifre</label> <input type="text" id="pass" name="pass" size="10" /> <button type="submit">Yallah</button> </form> <?php /* İnit */

// ezSQL include_once "ez_sql_core.php"; include_once "ez_sql_mysql.php";

// Veritabanı yapılandırması $vt_kullanici="root"; $vt_parola=""; $vt_isim="kullanici"; $vt_sunucu="localhost";

// ezSQL sınıfından bir nesne... $db = new ezSQL_mysql($vt_kullanici,$vt_parola,$vt_isim,$vt_sunucu);

// Dil ayarlaması $db->query("SET NAMES utf8");

/* Oturum kapatma bilgisi gönderilmiş */ if(isset($_GET["cikis"]) && $_GET["cikis"] == 1) { $_SESSION["kullanici_id"] = NULL; $_SESSION["kullanici_adi"] = NULL; }

/* Oturum açma bilgisi gönderilmiş */ if(isset($_POST["name"]) && isset($_POST["pass"])) { // Güvenlik önlemleri $name = $db->escape($_POST["name"]); $pass = $db->escape($_POST["pass"]); $sql = "SELECT * FROM `kullanici` WHERE name='".$name."' AND pass='".$pass."'"; echo "Yaratılan SQL cümleciği: " . $sql . "<br />\n"; $sonuc = $db->get_row($sql);

if(!is_null($sonuc)) { $_SESSION["kullanici_id"] = $sonuc->id; $_SESSION["kullanici_adi"] = $sonuc->name; } else { $_SESSION["kullanici_id"] = NULL; $_SESSION["kullanici_adi"] = NULL; echo "Kullanıcı adı veya şifre yanlış!" . "<br />"; } }

/* Oturum açılmış mı kontrolü */ if(isset($_SESSION['kullanici_adi']) && !is_null($_SESSION['kullanici_adi'])) { echo "Oturum açan kullanıcı: " . $_SESSION['kullanici_adi'] . " Oturumu kapatmak için <a href='?cikis=1'>tıkla</a>."; } else { echo "Naber ziyaretçi?"; }

/* SESSION süperdeğişkeninde neler olup bitiyor? */ echo "<br />"; echo var_dump($_SESSION); ?></body>

Veri Tabanı Yapısı (SQL)

[sql] -- phpMyAdmin SQL Dump -- version 3.2.0.1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Dec 24, 2009 at 09:09 PM -- Server version: 5.1.36 -- PHP Version: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT /; /!40101 SET @[email protected]@CHARACTER_SET_RESULTS /; /!40101 SET @[email protected]@COLLATION_CONNECTION /; /!40101 SET NAMES utf8 */;

-- -- Database: kullanici -- CREATE DATABASE kullanici DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE kullanici;


-- -- Table structure for table kullanici --

CREATE TABLE IF NOT EXISTS kullanici ( name text NOT NULL, pass text NOT NULL, id int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

-- -- Dumping data for table kullanici --

INSERT INTO kullanici (name, pass, id) VALUES ('Hayrullah', 'abc', 2), ('Sercan', 'def', 3), ('Rıfkı', '123', 4), ('Müge', 'wasd', 11); [/sql]