Input (Girdi) - muhametsafak/phpxi Wiki

Input kütüphanesi PHP’nin $_POST, $_GET, $_FILES ve $_REQUEST global değişkenleri yerine kullanabileceğiniz bir kütüphanedir. Input kütüphanesine kontrolcü (Controller) ve model içerisinden $this->input ile erişilebilir.

Neden kullanılır?

Temel olarak input olarak isimlendirilen ve kullanıcı tarafından oluşturulan veriler kullanıcı tarafından kolaylıkla manipüle edilebilir. Input sınıfları bu tip manipülasyonların önüne geçmek için bir çeşit filtreleme yaptıkları için kullanılmak istenir.


Inputlar 4 temel fonksiyonla kullanılır ve bunlar PHP’nin varsayılan 4 global değişkeninin yerini alır.


post() methodu $_POST evrensel değişkeni yerine kullanılır.

$this->input->post("post_name");

yukarıdaki ifade

$_POST['post_name'];

ile aynıdır. Yoksa false döndürür.


get() methodu $_GET evrensel değişkeni yerine kullanılır.

$this->input->post("get_name");

yukarıdaki ifade

$_GET["get_name"];

ile aynıdır. Yoksa false döndürür.


files() metodu $_FILES evrensel değişkeni yerine kullanılır.

$this->input->files("file");

yukarıdaki ifade

$_FILES["file"];

ile aynıdır. Yoksa false döndürür.


request() metodu $_REQUEST evrensel değişkeni yerine kullanılır.

$this->input->request("data_name");

yukarıdaki ifade

$_REQUEST["data_name"];

ile aynıdır. Yoksa false döndürür.


Validation İşlemleri

Input verilerini alırken belirli filtrelerden geçirmek için, uygulamak istediğiniz filtreleri ikinci parametre olarak dizi türünde belirtebilirsiniz.

Aşağıdaki örnekler get() metodu ile veriliyor. post(), files(), request() metotları ile kullanımı birebir aynıdır.

Doğrulama işlemi başarılı olursa değerini döndürür, başarısız olursa false döndürür.


Bir mail adresi olmalı :

$this->input->get("input_name", ["mail"]);

Boş olmamalı :

$this->input->get("input_name", ["required"]);

URL olmalı:

$this->input->get("input_name", ["url"]);

IP olmalı:

$this->input->get("input_name", ["ip"]);

IPv4 olmalı:

$this->input->get("input_name", ["ipv4"]);

IPv6 olmalı:

$this->input->get("input_name", ["ipv6"]);

Karakter sayısı minimum şu olmalı :

Gelen verinin en az kaç karakter olması gerektiği parantez içinde belirtilmelidir.

$this->input->get("input_name", ["minLength(20)"]);

yukarıdaki örnekte gelen verinin karakter sayısı 20'den az ise false dönecektir.


Karakter sayısı maksimum şu olmalı :

Gelen verinin en fazla kaç karakter olması gerektiği parantez içinde belirtilmelidir.

$this->input->get("input_name", ["maxLength(255)"]);

yukarıdaki örnekte gelen verinin karakter sayısı 255'den büyükse false dönecektir.


Minimum şu sayı olmalı :

Gelen veri sayısal ve kabul edilecek en küçük sayı parantez içinde belirtilir.

$this->input->get("input_name", ["min(30)"]);

yukarıdaki örnekte gelen veri 30'dan küçükse false dönecektir.


Maksimum şu sayı olmalı :

Gelen veri sayısal ve kabul edilecek en büyük sayı parantez içinde belirtilir.

$this->input->get("input_name", ["max(999)"]);

yukarıdaki örnekte gelen veri 999'dan büyükse false dönecektir.


Çoklu Validation Uygulama

Örneğin kullanıcının gönderdiği bir input verisinin birden fazla şemaya uyması gerekiyor. Kullanıcıdan en az 20 en fazla 255 karakterden oluşan bir mail adresi girmesi isteniyorsa;

$this->input->get("input_email", ["mail", "minLength(20)", "maxLength(255)"]);

Veri istenilen gibi ise veriyi döndürür, doğrulama işlemlerinden biri veya birden fazlası başarısız olursa false döner.

Düzenli İfadeler ile Validation

Kullanıcınızdan aldığınızı verinin belli bir desene (pattern) uymasını isteyebilirsiniz. Bu durumda hazır sunulan desenler ya da kendi yazacağınız desenler ile bu doğrulama işlemini yapmanız mümkündür.

Öntanımlı desenler (pattern) şunlardır;

$patterns = [
    'uri' => '[A-Za-z0-9-\/_?&=]+',
    'slug' => '[-a-z0-9_-]',
    'url' => '[A-Za-z0-9-:.\/_?&=#]+',
    'alpha' => '[\p{L}]+',
    'words' => '[\p{L}\s]+',
    'alphanum' => '[\p{L}0-9]+',
    'int' => '[0-9]+',
    'float' => '[0-9\.,]+',
    'tel' => '[0-9+\s()-]+',
    'text' => '[\p{L}0-9\s-.,;:!"%&()?+\'°#\/@]+',
    'file' => '[\p{L}\s0-9-_!%&()=\[\]#@,.;+]+\.[A-Za-z0-9]{2,4}',
    'folder' => '[\p{L}\s0-9-_!%&()=\[\]#@,.;+]+',
    'address' => '[\p{L}0-9\s.,()°-]+',
    'date_dmy' => '[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}',
    'date_ymd' => '[0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}',
    'email' => '[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+.[a-zA-Z0-9-.]+[.]+[a-z-A-Z]'
];

Örneğin;

$this->input->get("input_name", ["regex(alphanum)"]);

yukarıdaki örnekte parantez içerisindeki alphanum ibaresi hemen üst tarafta görebileceğiniz gibi öntanımlı ([\p{L}0-9]+) desenine karşılık gelir ve bu sınamayı uygular. Diğer ön tanımlı desenlerde aynı şekilde kullanılabilir. Burada alphanum yerine doğrudan [\p{L}0-9]+ olarak da yazılabilirdi.

$this->input->get("input_name", ["regex([\p{L}0-9]+)"]);

Her ikiside birebir aynı şeyi yapar.

Böylece kendi özel desenleriniz ile doğrulama yapmanıza izin verir.

Önemli

$pattern = '[\p{L}0-9]+';
$pattern = '/^(' . $pattern . ')$/u';