bildirgec.org

ceyranci

11 yıl önce üye olmuş, 6 yazı yazmış. 0 yorum yazmış.

CakePHP ile Form Verilerini Doğrulama

ceyranci | 12 June 2009 17:10

Güvenli bir site yaparken dikkat etmemiz gereken en önemli noktalardan biri de kullanıcı girişlerini kontrol etmek ve doğrulamak. Her kullanıcının masum ve iyi niyetli olmadığını düşünerek sitemizi geliştirmeliyiz.
Aslında zor gibi görünen bu yöntemleri CakePHP ile çok kolay yapabiliyoruz. Modelleri tanımlarken $validate isminde bir değişken tanımlayıp gerekli kuralları orada belirtiyoruz.

1
2
3
4
5
6
7
8
9
var $validate = array(
'alanAdi' => array(
'rule' => 'kuralIsmi',
'required' => true,
'allowEmpty' => false,
'on' => 'create',
'message' => 'Hata Mesajı'
)
);

Şeklinde belirtiyoruz. Buradaki ‘rule’ parametresinin karşısına istediğimiz kuralı girebiliyoruz. Bunlardan bazıları:
alphaNumeric
Girilen değerin sadece harfler ve rakamlardan oluşması gerekir. Aksi takdirde message parametresiyle belirtilen hata mesajı alınır.

1
2
3
4
5
6
var $validate = array(
'kullanici_adi' => array(
'rule' => 'alphaNumeric',
'message' => 'Sadece harfler ve rakamlar kullanılabilir.'
)
);

Buradaki message parametresi ile kullanıcını veriyi hatalı girmesi sonucu göreceği mesajı yazıyoruz.
between
Girilen değerin karakter sayısının hangi aralıkta olacağı belirlenir.

1
2
3
4
5
6
var $validate = array(
'password' => array(
'rule' => array('between', 6, 20),
'message' => ''Şifreniz en az 6 en fazla 20 karakter olmalı"
)
);

date
Girilen değerin belirttiğimiz bir formatta bir tarih olmak zorundadır.

1
2
3
4
5
6
7
var $validate = array(
'kayit_yili' => array(
'rule' => 'date',
'message' => 'YY-MM-DD formatında bir tarih girin.',
'allowEmpty' => true
)
);

allowEmpty parametresi true olduğu zaman bu kısım boş bırakilabilir demektir.
email
Girilen değerin bir eposta adresi olmak zorundadır.

1
2
3
4
5
6
var $validate = array(
'email' => array(
'rule' => array('email', true),
'message' => 'Lütfen doğru e-posta adresi girin.'
)
);

jQuery ile Renkli Menü

ceyranci | 21 May 2009 15:27

Bilindiği gibi jQuery en popüler javascript çatılarından biridir.
Şimdi jQuery ile 4 adımda renkli menümüzü oluşturacağız.

1.Adım: Gerekli dosya ve eklentileri indirme
Şuradan jquery-1.3.2.min.js dosyasını indiriyoruz.
Renklerle işlem yapacağımız için jQuery color eklentisini şuradan indiriyoruz.

2. Adım: Stilleri oluşturma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#menu{
width:500px;
height:70px;
background-color:#fff;
border-top:1px solid #000;
border-bottom:1px solid #000;
margin:0 auto;
}
#menu ul{
list-style:none;
margin:0;
padding:0;
}
#menu ul li{
float:left;
}
#menu ul li a{
width:100px;
display:block;
text-align:center;
font-size:20px;
line-height:70px;
text-decoration:none;
color:#000;
}

Yazdığımız bu stil dosyasını stil.css isminde kaydediyoruz. Burada menünün boyutları, konumu vs. ayarlamaları yapıyoruz. Bu kısımda isteğinize göre düzenlemeler yapabilirsiniz.

CakePHP’de ilişkilendirmeler

ceyranci | 11 May 2009 14:13

CakePHP‘de modeller arasındaki ilişkilendirmeler diğer yazılarımda şurada ve şurada bahsetmiştim. Şimdi bu ilişkilendirmeleri daha ayrıntılı olarak inceleyeceğiz. CakePHP’de 4 ilişkilendirme bulunmaktadır:

  • hasOne
  • hasMany
  • belongsTo
  • hasAndBelongsToMany (HABTM)

hasOne
Bu ilişkilendirmede bir modele ait bir model bulunur.

1
2
3
4
5
6
7
<?php
class Kullanici extends AppModel
{
var $name = "Kullanici";
var $hasOne = "Profil";
}
?>

Burada Kullanici ve Profil adında iki farklı modelimiz var. İlişkilendirme sonucunda bir kullanıcının bir profili olur.

1
2
3
4
5
6
7
<?php
class Kullanici extends AppModel
{
var $name = "Kullanici";
var $hasOne = array("Profil"=>array("className"=>"Profil","dependent"=>true));
}
?>

Burada bir array kullanarak özellikleri biraz daha değiştirdik. İlk örnekteki ilişkilendirmelerde model isimlerinin de uygun olması gerekiyordu. Ama şimdi model ismini biz belirttiğimiz için sorun yok. “dependent” parametresini true yaptığımızda ise herhangi bir kullanıcı silindiğinde ona ait profil de silinir.

sıfırdan django öğrenebileceğiniz 14 kaynak

ceyranci | 22 April 2009 18:00

django
django

django *, yüksek seviyeli bir python * web programlama çatısıdır. kurulumu ve kullanımı çok kolaydır. DRY (don’t repeat yourself) prensibiyle kod tekrarını kaldırıp az kodla çok iş yapar. mvc yapısını kullanan django, çok karmaşık yapıları kullanan web uygulamalarını kolay bir şekilde yapmayı sağlar. django ile ilgili yeterince türkçe kaynak bulunmadığı için bahsedeciğimiz sitelerin çoğu ingilizce olacaktır. kaynakları incelemeye hemen başlayalım.

django ile yaptığımız siteleri yükleyeceğimiz sunucuların django’yu desteklemesi gerekiyor. django destekleyen sunucuların listesini ve kullanıcı yorumlarını şuradan görebilirsiniz.
django ile yapılmış bazı siteler:

CakePHP ile basit bir ziyaretçi defteri – 2

ceyranci | 20 April 2009 15:10

Bir önceki yazımda oluşturduğumuz ziyaretçi defterine herkes yazı yazabiliyordu. Şimdi de bu ziyaretçi defterine yazı yazmak için üye girişi yapma zorunluluğu ekleyeceğiz.
Ziyaretçi defterinde yazdığımız yazıların saklanacağı bir tablo oluşturmuştuk. Şimdi de kullanıcı bilgilerinin saklanacağı bir tablo oluşturacağız. Fakat bu tabloyu oluşturmadan önce diğer tablomuzda bir değişiklik yapmamız lazım. Ziyaretçi defterinde oluşturduğumuz tablo şu şekildeydi:

1
2
3
4
5
6
7
CREATE TABLE `defter`.`posts` (
`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`created` DATETIME NOT NULL ,
`title` VARCHAR( 128 ) NOT NULL ,
`body` TEXT NOT NULL ,
`user` VARCHAR( 32 ) NOT NULL
) ENGINE = MYISAM

Buradaki user alanını user_id olarak değiştirip VARCHAR( 32 ) yerine de INT( 8 ) yazıyoruz. Değişiklik yaptıktan sonraki hali:

1
2
3
4
5
6
7
CREATE TABLE `defter`.`posts` (
`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`created` DATETIME NOT NULL ,
`title` VARCHAR( 128 ) NOT NULL ,
`body` TEXT NOT NULL ,
`user_id` INT( 8 ) NOT NULL
) ENGINE = MYISAM

Bunu yapmadan önce user bir string değere karşılık geliyordu ve ziyaretçi defterine yazı eklerken kullanıcı tarafından giriliyordu. Şimdi ise user_id oldu ve bir sayıya karşılık geliyor. Yani birazdan oluşturacağımız users tablosunda yer alan kullanıcıların id değeri.
Ali isminde bir kullanıcımız olsun. Ali’nin id’si 17 olsun ve Ali ziyaretçi defterine bir yazı eklemek için giriş yapsın. Ali, ziyaretçi defterine bir yazı yazdığında bu yazının user_id değeri 17 olur. Yazıyı ekrana yazdırırken de id’si o yazının user_id değeri olan kullanıcın adı yani name değeri veritabanından okunur. Şimdi ziyaretçi defterimizi geliştirmeye başlayalım. Ziyaretçi defterini oluşturmadıysanız buradan oluşturduktan sonra yazının geri kalan kısmını okumaya devam edin.
Oluşturduğumuz veritabanında (defter) users isminde bir tablo oluşturalım.

1
2
3
4
5
6
7
CREATE TABLE `defter`.`users` (
`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 32 ) NOT NULL ,
`password` VARCHAR( 64 ) NOT NULL ,
`email` VARCHAR( 128 ) NOT NULL ,
`created` DATETIME NOT NULL
) ENGINE = MYISAM

Model Oluşturma
Şimdi cakeyol/app/models/ dizini içine user.php ismiyle user modelimizi oluşturup içine şunları yazalım:

1
2
3
4
5
6
7
<?php
class User extends AppModel
{
var $name = 'User';
var $hasMany = 'Post';
}
?>

CakePHP ile basit bir ziyaretçi defteri

ceyranci | 09 April 2009 09:45

CakePHP kurulumu daha önceden yazılmıştı. Şimdi de basit bir ziyaretçi defteri yapacağız. Öncelikle verilen saklanacağı bir veritabanı oluşturmak için phpmyadmin sayfasına girip defter isminde bir veritabanı oluşturuyoruz. CakePHP’nin dosyalarının bulunduğu dizine cakeyol diyelim. Burası localhost içinde defter isminde bir dizin olsun. Şimdi de cakeyol/app/config/database.php.default dosyasının adını database.php olarak değiştirdikten sonra dosyayı açıp default ayarlar bölümüne mysql kullanıcı adımızı (herhangi bir kullanıcı adı belirtmediyseniz kullanıcı adımız root olacaktor), parolamızı (parola belirtmediyseniz boş bırakın) ve kullanacağımız veritabanı ismini (defter) yazıyoruz.

1
2
3
4
5
6
7
8
9
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'defter',
'prefix' => '',
);

Şimdi http://localhost/defter yazdığımızda karşımıza CakePHP varsayılan sayfası gelecek. Bizden güvenlik için cakeyol/app/config/core.php dosyasındaki Security.salt değerini değiştirmemizi isteyen bir uyarı çıkacak. Bu değeri değiştirdikten sonra bu uyarı kaybolur. Bu sayfada bunun haricinde dört bilgilendirme daha vardır. Bunlar:

  • Your tmp directory is writable.
  • The FileEngine is being used for caching. To change the config edit APP/config/core.php
  • Your database configuration file is present.
  • Cake is able to connect to the database.
    Bu dört uyarı herşey herşey yolunda demektir.
    Tablo Oluşturma
    Veritabanını oluşturduktan sonra defter ismindeki veritabanının içine posts isminde bir tablo oluşturalım. Bunun için şu sorguyu çalıştıralım:
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `defter`.`posts` (
    `id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `created` DATETIME NOT NULL ,
    `title` VARCHAR( 128 ) NOT NULL ,
    `body` TEXT NOT NULL ,
    `user` VARCHAR( 32 ) NOT NULL
    ) ENGINE = MYISAM

    Tablomuzu oluşturduk. Tablomuzda 5 eleman var. Bunlardan id her yazının kimlik numarasıdır, created oluşturulma tarihi, title başlığı, body yazını içeriği, user ise yazıyı yazanın adıdır. Bunları istediğimiz kadar arttırabiliriz. Tablodaki bu isimleri ingilizce seçmemizin nedeni ise CakePHP’nin bazı ilişkilendirmelerinde ingilizce gramer kullanmasıdır. Mesel tablo ismi model isminin çoğuludur. Yani tablo ismi posts ise model ismi post olmalıdır ya da tablo ismi children ise model ismi child olmalıdır. Buna benzer bir kaç kural daha var onları da gerektiğinde kullanacağız.
    Model oluşturma
    cakeyol/app/models dizini içine post.php isminde bir dosya oluşturuyoruz -tablomuz verdiğimiz ismin tekil hali- ve içeriğini de şöyle yapıyoruz:

    1
    2
    3
    class Post extends AppModel {
    var $name='Post'
    }

    Şu an içinde modelimizde isimden başka belirteceğimiz birşey yok. $name değişkenine atadığımız ‘Post’ değerinin başharfinin büyük olmasına dikkat edin.
    Controller Oluşturma
    cakeyol/app/controllers dizinin içine yazilar_controller.php isminde bir dosya oluşturuyoruz ve içeriğini de şöyle yapıyoruz:

    1
    2
    3
    4
    5
    6
    class YazilarController extends AppController{
    var $name='Posts';
    function index(){
    $this->set('tum_yazilar',$this->Post->findAll());
    }
    }

    Burada tanımladığımız sınıfın ismi ile controller dosyasının ismiyle aynı olup başharfi büyük olmalı, _ karakterleri kaldırılmalı ve _ karakterinden sonra gelen ilk harf büyük olmalı. (yazilar_controller.php -> YazilarController, kullanicilar_controller.php -> KullaniciController ). Sayfa isimleride controller adı/fonksiyon adı şeklinde oluyor. Yani yazilar_controller.php dosyasının içine yazdığımız bir fonksiyon – index() fonksiyonu – www.sitem.com/yazilar/index adresindeki olaydır.
    View Oluşturma
    Controller dosyasında yazdığımız her fonksiyon için bir view dosyası tanımlamamız lazım. cakeyol/app/views dizini içine posts isminde bir dizin oluşturup içine fonksiyonun adi+*.ctp şeklinde bir dosya oluşturuyoruz. index fonksiyonunun viewini yazdığımız için index.ctp isminde bir dosya oluşturuyoruz ve içine şunları yazıyoruz:

    1
    2
    3
    4
    5
    6
    <?php foreach($tum_yazilar as $p):
    echo "<h2>".$p['Post']['title']."</h2>";
    echo "yazan: <b>".$p['Post']['user']."</b>";
    echo "<p>".$p['Post']['body']."</p>";
    endforeach;
    ?>

    Controller dosyasında $this->set(‘tum_yazilar’,$this->Post->findAll()); satırıyla /yazilar/index sayfasına tum_yazilar isminde bir dizi gönderiyoruz. Bu dizini içeriğinde ise veritabanından çektiği Post modelimize ait tüm veriler bulunmaktadır. View sayfasında da bir foreach döngüsüyle $p değişkenine sırayla veritabanından çektiği tablo değerlerini atıyoruz ve sayfaya yazdırıyoruz. Artık verileri veritabanından okuyabiliyoruz. Şimdi de veritabanına bilgi girişi yapalım. Bunun için control dosyamıza bir fonksiyon daha ekleyelim.

    1
    2
    3
    4
    5
    6
    7
    function ekle(){
    if (!empty($this->data)){
    if ($this->Post->save($this->data)){
    $this->flash('Yazınız Eklendi','/yazilar/index');
    }
    }
    }

    İlk fonksiyonda ziyaretçi defterindeki yazıları okuyorduk. Burada ise ziyaretçi defterine yazı ekliyoruz. $this->data‘nın içeriği ise sayfada kullanıcın girdiği verilerdir. Bu fonksiyonda ise $this->Post->save($this->data)) satırıyla veritabanına bilgi girişi yapıyoruz. $this->flash() komutunun ikinci parametresi ise – /yazilar/index – yazıyı ekledikten sonra yönlendirilecek olan sayfasını belirtir. Ekleme sayfasının view’i ise cakeyol/views/posts/ekle.ctp olacaktır ve içeriği de şöyle olacaktır:

    1
    2
    3
    4
    5
    6
    7
    <?php
    echo $form->create('Post',array('url'=>'/yazilar/ekle'));
    echo $form->input('user');
    echo $form->input('title');
    echo $form->input('body');
    echo $form->end('Kaydet');
    ?>

    Burada form oluşturmak için CakePHP’nin $form helperıni kullanıyoruz. $form->create() satırında parametre olarak modelimizin adı ve ekleme yaptığımız sayfanın adresini giriyoruz.$form->input() satırlarında ise tabloda belirttiğimiz alanları giriyoruz. “user” alanını özelliğini VARCHAR olarak belirttiğmiz için sayfada otomatik olarak

    1
    <input type=text>

    şeklinde görülüyor veya “body” alanını TEXT olarak belirttiğimiz için sayfada

    1
    <textarea></textarea>

    olarak görülüyor. $form->end() satırında ise Gönder butonunu oluşturuyoruz. index sayfasına yazı ekleme sayfasının linkini koyduktan sonra ziyaretçi defterimiz bitmiş olacak;

    1
    echo $html->link('Yazı ekle','/yazilar/ekle');

    Bu satırı index.ctp dosyasının sonuna ekliyoruz.
    Ziyaretçi defterimizi oluşturmuş bulunuyoruz. Eğer stilleri değiştirmek isterseniz cakeyol/app/webroot/css/cake.generic.css dosyasını düzenleyebilirsiniz.