PHP’de Çok Boyutlu Dizileri Sıralamak

Filed in PHP | Programlama Leave a comment

PHP çok boyutlu dizileri sıralamak için array_multisort işlevi kullanılır. Elbette bu işlev tek satırda çalışmamakta öncesinde dizinin belirli bir biçime getirilmesi gerekiyor. O konunun detayına hiç girmeden php.net’deki şu arkadaşın yazmış olduğu işlev bu işlemi çok kolaylaştırıyor. Bu makale biraz üzümünü ye bağını sorma şeklinde oldu ama amerikayı yeniden keşfetmeye gerek yok :) gelelim işleve ve kullanımına;

function array_msort($array, $cols)
{
    $colarr = array();
    foreach ($cols as $col => $order) {
        $colarr[$col] = array();
        foreach ($array as $k => $row) { $colarr[$col][‘_’.$k] = strtolower($row[$col]); }
    }
    $eval = ‘array_multisort(‘;
    foreach ($cols as $col => $order) {
        $eval .= ‘$colarr[\''.$col.'\'],’.$order.‘,’;
    }
    $eval = substr($eval,0,-1).‘);’;
    eval($eval);
    $ret = array();
    foreach ($colarr as $col => $arr) {
        foreach ($arr as $k => $v) {
            $k = substr($k,1);
            if (!isset($ret[$k])) $ret[$k] = $array[$k];
            $ret[$k][$col] = $array[$k][$col];
        }
    }
    return $ret;
}
// Sıralanacak dizi tanımlanıyor
$arr1 = array(
    array(‘id’=>1,‘name’=>‘aA’,‘cat’=>‘cc’),
    array(‘id’=>2,‘name’=>‘aa’,‘cat’=>‘dd’),
    array(‘id’=>3,‘name’=>‘bb’,‘cat’=>‘cc’),
    array(‘id’=>4,‘name’=>‘bb’,‘cat’=>‘dd’)
);
// array_msort işlevi sıralama ölçütleri bir dizi şeklinde tanımlanarak çağırılıyor…
$arr2 = array_msort($arr1, array(‘name’=>SORT_DESC, ‘cat’=>SORT_ASC));

, , , ,

Codeigniter Form Doğrulama

Filed in Codeigniter | PHP | Programlama | Web Tasarım Leave a comment

Codeigniter ile geliştirme yaparken form doğrulama işlemlerinde öncelikle form_validation kütüphanesini yüklemeniz gerekmektedir. Form gönderildikten sonra hatalar oluşması durumunda formun kullanıcıya girmiş olduğu veriler silinmeden yeniden sunulması için ihtiyaç duyulacak işlevler ise form_helper kütüphanesinde bulunmaktadır. Bu kütüphaneleri şu şekilde projenize dahil edebilirsiniz.

$this->load->helper(‘form’);
$this->load->library(‘form_validation’);

Kütüphaneleri yükledikten sonra bu kütüphane ile ilgili ayarlar ve kuralların belirtilmesi gerekiyor. Basit bir kullanıcı kayıt formunda kullanılabilecek form ayar ve kuralları şöyledir.

$this->form_validation->set_error_delimiters(‘<span class="input-notification error png_bg">’, ‘</span>’);
$this->form_validation->set_rules(‘username’, ‘Kullanıcı Adı’, ‘trim|required|min_length[5]|max_length[128]|xss_clean|callback_username_exist’);
$this->form_validation->set_rules(‘password’, ‘Şifre’, ‘trim|required|matches[passconf]|min_length[5]|max_length[64]|xss_clean’);
$this->form_validation->set_rules(‘passconf’, ‘Şifre’, ‘trim|required|min_length[5]|max_length[64]|xss_clean’);
$this->form_validation->set_rules(‘firstname’, ‘Ad’, ‘trim|required|min_length[3]|max_length[128]|xss_clean’);
$this->form_validation->set_rules(‘lastname’, ‘Soyad’, ‘trim|required|min_length[3]|max_length[128]|xss_clean’);
$this->form_validation->set_rules(‘displayname’, ‘Görünür İsim’, ‘trim|required|min_length[5]|max_length[128]|xss_clean’);
$this->form_validation->set_rules(‘email’, ‘E-Posta’, ‘required|valid_email|callback_email_exist’);

Bu kod parçacığında yapılanları kısaca açıklayalım. Öncelikle “set_error_delimiters” ile hatalar ekrana basılırken kullanılmasını istediğiniz html etiketler ve css sınıflar tanımlanmıştır. Ardından “set_rules” ile html formunda bulunan bütün girdi alanları için kurallar yazılır. Kurallar üç bölümden oluşmaktadır. İşlevin çağrılması için kullanılacak yapı şu şekildedir.

set_rules(‘girdi ismi’,‘girdi etiketi’,‘denetim işlevleri’)

Kullanılabilecek tüm denetim işlevlerine buradan erişebilirsiniz. Denetim işlevleri değer alarak özelleştirilebilmektedir. Örneğin:Girilen şifrenin doğrulamasını yapmak için yeni bir işlev yazmanıza gerek yoktur, eşleştirme kontrolünde kullanılan “matches[passconf]” işlevinde köşeli parantezler arasında eşleşecek diğer girdi ismini tanımlanabilmektedir. Ayrıca kendinize özgü denetim işlevi yazılabilmektedir. Örneğin buradaki “callbak_username_exist” işlevi veritabanında aynı kullanıcı adı ile başka bir kullanıcı olup olmadığını kontrol etmektedir. Bu işlev form denetimi yaptığınız controller sınıfı içerisinde tanımlanmış olmalıdır. Basit bir kullanıcı ismi varlığı kontrol işlevi şu şekildedir.

function username_exist($username)
{
$this->load->model(‘users_model’,‘User’);
if($this->User->getInfoByUsername($username) != false)
{
$this->form_validation->set_message("username_exist", "Kullanıcı Adı mevcut, lütfen farklı bir kullanıcı adı seçiniz.");
return false;
}else{
return true;
}
}

Form kontrolü ile ilgi tüm ayarlar ve kurallar düzenlendikten sonra “$this->form_validation->run()” işlevi çağrılarak formun kontrolü şu şekilde yapılabilmektedir.

if ($this->form_validation->run() == FALSE)
{
// Formda hata varsa yapılacak işlemler…
}else{
// Formda hata yoksa yapılacak işlemler
}

, ,

Codeigniter URL Yapısından index.php Kaldırma

Filed in Codeigniter | Genel | PHP | Programlama Leave a comment

Codeigniter URL yapısını SEO için düzenlemek gerektiğinde index.php bağlantısının tüm URL’lerden kaldıması için yine .htaccess kullanılmalıdır. Aşağıdaki .htaccess dosyası Codeigniter projesinin kök dizininde bulundurulmalı ve Codeigniter ayarlarının yapıldığı application->config->config.php dosyasındaki $config['index_page'] = ‘index.php’; değeri $config['index_page'] = ”; olarak değiştirilmelidir.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

, , , ,

Flow Chart Visual Programming Language

Filed in Programlama 3 Comments

Algoritma ve Akış Diyagramı eğitimde kullanılabilecek çok güzel, VisualBasic ile yazılmış, open source bir proje; ben çok beğendim ve derslerimde de kullanmaya başladım. Normalde zipli bir klasörle buradan erişebilirsiniz. Ayrıca kurulumunun windows makinelerde kolay olması için bir yükleyici (installer) oluşturdum. Onu da buradan indirebilirsiniz. Son olarak kurulum klasöründe kaynak kodlara ve örneklere erişebilirsiniz…

CURL(Client URL Library Functions) Nedir? CURL ile kullanıcı kontrolü nasıl yapılır?

Filed in PHP | Programlama | Web Tasarım 4 Comments

Daniel Stenberg tarafından yazılan bu PHP kütüphanesi, birçok farklı tipteki sunucunun, birçok farklı tipte protokol kullanarak birbirleriyle bağlantı ve iletişim kurabilmesini sağlamaktadır. Desteklenen protokoller ise http, https, ftp, gopher, telnet, dict, file, ve ldap protokolleridir.PHP 4.0.2. versiyonundan sonra PHP’ye eklenmiştir. Basit bir örnek vermek gerekirse cURL ile bir sitenin ana sayfasını HTML dosyası olarak sunucunuza kaydedebilirsiniz. Bununla beraber bu web sitesindeki ilgili sayfaya birden çok değişkeni POST metodu ile gönderebilirsiniz.

CURL’un kullanımına basit bir örnek verelim;
Sitemizin dışındaki farklı bir sunucuda bulunduğu iddia edilen bir kullanıcının varlığının doğrulanmasının gerektiğini varsayalım. Kullanıcıdan üye olduğunu iddia ettği sistemin kullanıcı adı ve şifresini aldıktan sonra aşağıdaki fonksiyon ile bunu kontrol edebilirsiniz;

function kullaniciyiKontrolEt($kul_adi,$sifre) {

        $site = "http://hedef_url.php";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$site);
        curl_setopt($ch,CURLOPT_REFERER,$site);
        $data = array(‘Kul_adi’ => $kul_adi, ‘Sifre’ => $sifre);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ha=curl_exec($ch);
        $pos = strpos($ha, "Gecersiz Tekrar Deneyin");
        curl_close($ch);
        return $pos;
}

Burada, karşı sistemin kullanıcı adı ve şifreyi kontrol ettiğini bildiğimiz URL, $site değişkeninde tanımlanmaktadır. curl_init() fonksiyonu ile yeni bir oturum başlatılıyor ve curl_setopt() fonksiyonunda kullanılmak üzere bir tanıtıcı değer (handle) döndürülüyor. Daha sonra CURL aktarım işlemlerinde kullanılacak Öntanımlı Sabitler curl_setopt() fonksiyonu ile tek tek tanımlanıyor ve curl_exec() fonksiyonu ile CURL oturumunda tanımlanan Öntanımlı Sabitlere göre işlem gerçekleştiriliyor. Bu işlem sonucunda hedef URL’den bir HTML dosyası dönüyor. Burada fonksiyon geri dönen dosya içerisinde “Geçersiz Tekrar Deneyin” gibi kullanıcının varolmadığı durumlarda karşılaşılabilecek bir ifadeyi strpos() fonksiyonu ile arıyor. Bu arama işlemi sonucunda $pos değişkenine true yada false değeri atanıyor ve en son adımda fonsiyondan geri döndürülüyor. Elbette burada tanımlanan POST edilecek değişken adeti ve ve adları karşı sisteme göre değişiklik gösterecektir.

$site = "http://hedef_url.php";
$data = array(‘Kul_adi’ => $kul_adi, ‘Sifre’ => $sifre);
$pos = strpos($ha, "Gecersiz Tekrar Deneyin");

satırlarındaki değerleri kendinize göre düzenleyerek sizde farklı bir sistemdeki kullanıcının var olup olmadığını doğrulayabilirsiniz.

,

TOP