Bir PHP kodlayıcısı olarak $_GET
, $_POST
, $_COOKIE
gibi değişkenlere aşina olabilirsiniz, ancak ham kullanıcı girdisi her zaman güvenliğiniz ve veri bütünlüğünüz için iyi değildir. Bu yüzden Cotonti'de tüm verileri cot_import() fonksiyonu ile içe aktarıyoruz:
1 |
function cot_import( $name , $source , $filter , $maxlen = 0, $dieonerror = false, $buffer = false) |
Parametrelerin açıklaması:
Dönen değer ya bir filtre uygulanmış değerdir ya da doğrulama başarısız olduysa NULL döner ve kullanıcının yeni bir değer girmesi gerekir. İşte bazı örnek çağrılar:
1 2 3 4 5 |
$title = cot_import( 'title' , 'P' , 'TXT' ); $code = cot_import( 'code' , 'P' , 'ALP' ); $count = cot_import( 'count' , 'P' , 'INT' ); $text = cot_import( 'text' , 'P' , 'HTM' ); $notify = cot_import( 'notify' , 'P' , 'BOL' ); |
Değerleri içe aktardıktan sonra, bunları belirli bir değere karşı (özellikle giriş mevcut değilse veya filtreye karşı doğrulama başarısız olursa döndürülen NULL) kontrol etmek ve bir hata mesajı vermek isteyebilirsiniz.
Detaylı bir biçimde şu şekilde yapabilirsiniz:
1 2 3 4 |
if ( is_null ( $count )) { cot_error( 'Lütfen geçerli bir tamsayı girin' , 'count' ); } |
cot_error() fonksiyonu, sistemin bir hata oluştuğunu bilmesini sağlamak ve daha sonra görüntülenebilecek bir hata mesajı vermek için standart bir yöntemdir. İki parametresi vardır:
$L['my_err_msg']
varsa, yalnızca 'my_err_msg' kodunu geçerek yerelleştirilmiş mesajın kullanıcıya gösterilmesini sağlayabilirsiniz.Aslında, "if" ve "cot_error()" fonksiyonlarını hata durumunda birleştirmenin daha kısa (ve önerilen) bir yolu vardır:
1 |
cot_check( is_null ( $count ), 'Lütfen geçerli bir tamsayı girin' , 'count' ); |
cot_check() fonksiyonunun parametreleri:
Verileri kaydetmeden önce sistemde herhangi bir hata olup olmadığını kontrol etmek için cot_error_found() fonksiyonunu kullanabilirsiniz:
1 2 3 4 |
if (!cot_error_found()) { // Tamam, doğrulama başarılı olduğu için verileri kaydedebiliriz } |
Bu kadar, artık Cotonti'de giriş doğrulamanın temellerini biliyorsunuz.
Tüm mesajlar hata mesajı değildir. Kullanıcıya bir işlemin başarıyla tamamlandığını bildirmek veya kritik olmayan bir konuda onu uyarmak da isteyebilirsiniz. Cotonti'nin mesaj API'si bu tür durumları da kapsar.
İşte Hata ve Mesaj API'sine ait diğer fonksiyonlar:
Bu fonksiyonların çoğu gelişmiş kullanımlar içindir ve modül veya eklentilerinizde bunları kullanmanız gerekmeyecektir. En yaygın kullanılanlara bir göz atalım.
cot_message() fonksiyonu, cot_error()
fonksiyonuna benzer ancak daha geneldir. İşte parametreleri:
Bu fonksiyonu, bir form işlemi tamamlandığında kullanıcıyı bilgilendirmek ve normal sayfaya geri döndürmek için kullanabilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 |
cot_check( $some_input != '' , 'some_err_msg' , 'some_input' ); if (!cot_error_found()) { // Tamam // Verileri kaydet... // ... // Mesajı yayınla cot_message( 'Yeni öğe başarıyla eklendi' ); // Arayüze geri dön cot_redirect(cot_url( 'mymod' , 'm=edit' )); } |
Eğer bir hata meydana geldiyse ve betiğin çalışmasını durdurmak istiyorsanız, cot_die()
fonksiyonunu kullanabilirsiniz:
1 2 3 4 5 |
if ( $something_really_wrong ) { // Kullanıcı buraya nasıl geldi? cot_die(); } |
Eğer hata durumu, yaygın bir HTTP hata kodu ve mesajıyla temsil edilebiliyorsa, cot_die_message()
fonksiyonunu bir hata kodu ile kullanabilirsiniz:
1 2 3 4 5 |
if ( $page_not_found ) { // Doğru HTTP koduyla standart bir 404 sayfası göster cot_die_message(404); } |
Ayrıca, cot_die_message()
fonksiyonunu özel hata durumlarını yönetmek ve hata sayfası başlığını ve içeriğini üçüncü ve dördüncü parametreler olarak geçirmek için kullanabilirsiniz.
Artık verileri doğrulayıp mesajları oluşturabilirsiniz, ancak bunları nasıl göstereceksiniz? Modül veya eklentinize hata ve mesaj görüntüleme eklemek için genellikle iki satır kod yeterlidir.
İlk olarak, şablon dosyanıza standart mesaj görüntüleme şablonunu içeren bir satır ekleyin:
1 |
{FILE "{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/warnings.tpl"} |
İkinci olarak, MAIN bloğu işlenmeden önce aşağıdaki satırı PHP kodunuza ekleyin:
1 |
cot_display_messages( $t ); |
Yukarıdaki örnek şu varsayımlara dayanır:
Bu varsayımlar doğru olmayabilir, bu nedenle cot_display_messages($tpl, $block = 'MAIN') fonksiyonunun parametrelerini açıklayalım:
Şimdiye kadar öğrendiğiniz parçaları bir araya getirecek gerçek bir uygulama örneği:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// Mesajları içeren dil dosyasını bağla require_once cot_langfile( 'mailout' , 'plug' ); if ( $a == 'send' && $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) { // Form gönderimini işle $subject = cot_import( 'subject' , 'P' , 'TXT' ); $limit = cot_import( 'limit' , 'P' , 'INT' ); $content = cot_import( 'content' , 'P' , 'HTM' ); // Girdi doğrulaması cot_check( empty ( $subject ), 'mailout_err_subject_empty' , 'subject' ); cot_check( empty ( $content ), 'mailout_err_content_empty' , 'content' ); cot_check( $limit <= 0, 'mailout_err_invalid_limit' , 'limit' ); if (!cot_error_found()) { // Doğrulama başarılı, verileri kaydet $sql_limit = $limit > 0 ? "LIMIT $limit" : '' ; $res = $db ->query( "SELECT user_name, user_email FROM $db_users $sql_limit" ); $counter = 0; foreach ( $res ->fetchAll() as $row ) { $to = '"' . addslashes ( $row [ 'user_name' ]) . '" <' . $row [ 'user_email' ] . '>' ; cot_mail( $to , $subject , $content , '' , false, null, true); $counter ++; } // Başarı mesajını göster cot_message( "$counter mesaj gönderildi." ); } // Kullanıcıyı geri yönlendir ve mesajları orada göster cot_redirect(cot_url( 'admin' , 'm=other&p=mailout' , '' , true)); } // Kullanıcı arayüzünü ve formu görüntüle $t = new XTemplate(cot_tplfile( 'mailout.tools' , 'plug' )); // Şablon üzerinde çalış, etiketleri ata ve blokları render et // Eğer mesajlar varsa, onları göster cot_display_messages( $t ); |
Bu sayfanın başında, kullanıcı verisi girişi için yerleşik filtrelerin nasıl kullanılacağını öğrendik. Bunun yanı sıra, geliştirici kendi ihtiyaçlarına göre özel filtreler de ekleyebilir.
Bunu bir örnekle gösterelim. Diyelim ki kullanıcıların cep telefonu numarasını girdiği bir formumuz var ve girilen numaranın bazı temel kurallara uygun olup olmadığını kontrol etmemiz gerekiyor.
Bunu 3 basit adımda yapabiliriz:
Filtreleme fonksiyonunu oluşturma. Bu fonksiyon, cep telefonu numarası doğrulamak için kullanılacaktır (operatör kodu ve numara dahil):
function mobilenum_filter( $input_value , $name ) { // Sadece rakamları bırak, diğer karakterleri temizle $filtered = preg_replace( "/[^\d]/" , '' , $input_value ); // Numaranın uzunluğunu kontrol et if (preg_match( '/\d{10,12}/' , $filtered )) { // Uzunluk 10 ile 12 arasında ise geçerli kabul edilir // Son 10 karakteri döndür (3 operatör kodu ve 7 numara için) return substr ( $filtered , -10); } else { // Çok kısa veya çok uzun ise filtreyi geçemediğini belirtmek için NULL döndür return NULL; } } |
$input_value
parametresi, kullanıcının girdiği "ham" veriyi içerir. $name
parametresi ise giriş alanının adını içerir.
Filtreleme fonksiyonunu oluşturduktan sonra, bunu "filtre kaydına" eklememiz gerekiyor:
$cot_import_filters['MOB'][] = 'mobilenum_filter';
$cot_import_filters
dizisi, filtre kaydını içerir. Bu değişken globaldir, bu yüzden herhangi bir fonksiyon içinde global
anahtar kelimesi kullanılarak erişilebilir.cot_import()
fonksiyonunda kullanılacak filtre adıdır. Yeni bir özel filtre oluşturuyorsak özel bir ad belirleyebiliriz veya mevcut bir yerleşik filtreyi yeniden tanımlayabiliriz.Şimdi kullanıcıdan gelen veriyi filtrelemek için bu fonksiyonu kullanabiliriz:
$mob_number = cot_import('mobnum', 'P', 'MOB');
Burada 'mobnum' form giriş alanının adıdır ve 'MOB' bizim özel filtre adımızdır.
Ayrıca, bir filtre adı için birden fazla filtreleme fonksiyonu tanımlayabiliriz. Bu fonksiyonlar sırayla çağrılır ve giriş değeri yalnızca tüm filtreleme adımlarını başarıyla geçerse geçerli kabul edilir.
Thanked: 58 kez
Респект!!! я оказывается не все видел))))
Thanked: 175 kez
Очень полезная информация, чем больше таких статей в документации тем активнее будет приток новых пользователей.
p.s. В последнем примере описано:
"Для добавления параметра безопасности в ссылку используется функция" cot_xp()
а в примере кода cot_xg()
Thanked: 58 kez
Да все-же опечатка, cot_xg() для добавления в url, а cot_xp() для добавления скрытого input со значением x в форму.
Thanked: 181 kez
Исправил. спасибо, что читаете доки!
Thanked: 27 kez
Хорошо бы расписать
Что именно должно быть в шаблоне, что это относится к ресурсам и что нужно добавить параметр $error а то важная мелочь :)
Thanked: 181 kez
CrazyFreeMan, сейчас в ядре этого нет. Т.е. сделать такой вывод можно только написав свой обработчик. `$src` используется системой для разделения ошибок внутри соответствующего массива.