Welcome, Guest Login|Sign Out

0
[postlink] https://web-programcisi.blogspot.com/2012/01/php-filtreler.html[/postlink]
HP filtresi , kullanıcı girdileri gibi güvensiz kaynaklardan alınan verileri filtreleme işlemini gerçekleştirir.

PHP Filtre Nedir?

Güven vermeyen kaynaklardan alınan verileri filtreleme yapmamız gerekir.
Verileri doğrulama, test etme ve filtreleme tüm web uygulamalar için önemli bir aşamadır.
Php filter özelliği , kolay kullanıma sahip bir şekilde diyazn edilmiştir.

Neden Filtre Yapmalıyız?

Çoğunlukla tüm web uygulamaları harici veri girişleri üzerine işlem yapmaktadır.Genellikle kullanıcıdan yada başka bir uygulamadan alınan veriler kullanılır. Filtreleme yaparak projelerimize güvenilir ve doğru bir veri giriği sağlarız.
Dışardan alınan tüm verileri filtreleme yapmanız tavsiyemdir!!
İnput filtreleme web uygulamaları için en önemli güvenlik aşamasıdır.
Harici Veri Ne Demektir?
  • Formdan alınan veriler
  • Çerezler(Cookies)
  • Web Servis Verileri
  • Sunucu Değişkenleri
  • Veritabanı sorgu sonuçları

Fonksiyon ve Filtreler

Bir değişkeni filtrelemek için aşağıdaki filter fonksiyonlar kullanılır:
  • filter_var() – özel bir filter ile bir değişkeni filtreler
  • filter_var_array() – Birden fazla veriyi , aynı veya farklı filtreler ile filtreler
  • filter_input – Bir girilen veriyi alır ve filtreler
  • filter_input_array – Birden fazla girdileri alır , aynı veya farklı filtreler ile filtreler
Aşağıdaki örnekte, integer sayıyı filter_var() fonksiyonu ile filtreliyoruz,bakalım;
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo(“integer geçersiz”);
}
else
{
echo(“integer geçerli”);
}
?>
Yukardaki kod, “FILTER_VALIDATE_INT” özelliğini kullanarak değişkeni filtreler.İnteger sayının geçerli olduğunu belirttikten sonra , ekrana “integer geçerli” yazdırır.
Eğer integer değişkenimiz yerine “123abn” gibi bir değer deneseydik, ekran çıktımız, “integer geçersiz” yazılacaktı.

Doğrulama ve Sterilize Etme

İki filter türü vardır;
Filtre Doğrulama:
  • Kullanıcı girdilerini doğrulamak için kullanılır
  • Katı format format kuralları (URL yada E-Mail değerleri gibi)
  • Başarı halinda beklenen durum döner, aksi takdirde FALSE değeri döndürür.
Filtreleri Siterilize Etme
  • string içinde izin verilen veya izinsiz karakterleri ayırır
  • Veri format kuralı yok
  • Herzaman string döndürür

Seçenekler ve Flag

  • Seçenekler ve Flaglar filtrelere eklenerek özelleştirir.
  • Farkli filtreler farklı seçeneklere ve flaglara sahiptir.
Aşağıdaki örneğimizde , bir integer(tamsayı) değerini fiter_var() fonksiyonu min_range ve max_range secenekleri ile doğrulayalım:
<?php$var=300;
$int_options = array(
“options”=>array
(
“min_range”=>0,
“max_range”=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo(“Integer geçersiz”);
}
else
{
echo(“Integer geçerli”);
}
?>
Yukarda tasarladığımız kod örneğinde options dizisi ile ilişkili seçenekleri kullandık.Seçenek değil de sadece bir flag kullanıyor ise dizi kullanmamıza gerek yoktur.
integer değeri “300″ , bu değer verilen özelliklere(min_range , max_range) uymadığı için “integer geçersiz” çıktısını göreceğiz.

Input(girdi) Doğrulama

Tasarladığımız formdan alına verileri doğrulayalım.Öncelikle girilen verilerde aradığımız veri özelliklerini arayıp ve onaylamamız gerekir.
Daha sonra , verileri filter_input() fonksiyonu ile filtreleyim.
Aşağıdaki örnekte, input verisi olan “mail” stringi PHP dosyasına gönderiliyor; şöyleki:
<?phpif(!filter_has_var(INPUT_GET, “email”))
{
echo(“Girilen veri türü yanlış”);
}
else
{
if (!filter_input(INPUT_GET, “email”, FILTER_VALIDATE_EMAIL))
{
echo “E-Mail geçersiz”;
}
else
{
echo “E-Mail geçerli”;
}
}
?>
Örneği Açıklayalım;
Örneğimizde bir “email” değişkenini GET metodu kullanarak gönderiyor.
  • “email” girdi verisi “GET” metoduyla tanımlanan verü türüne uyuyor mu kontrol ediyor.
  • İnput değişkeni uyuyorsa, email adresinin doğruluğunu kontrol ediyor.

Input Sterilize

Formdan gelen URL adresini sadeleştirelim.
Önce aranılan verinin bulunduğunu kontrol ediyoruz;
Girilen veriyi filter_input() fonksiyonu ile sterilize ediyoruz.
Örneğimizde , “url” verisi PHP sayfasına gönderiliyor:
<?phpif(!filter_has_var(INPUT_POST, “url”))
{
echo(“Girilen veri türü yanlış”);
}
else
{
$url = filter_input(INPUT_POST,
“url”, FILTER_SANITIZE_URL);
}
?>
Örneği Açıklayalım;
“POST” metoduyla , alınan verimizi sayfaya gönderiyoruz.:
  • girdi verisinin varlığını kontrol ediyoruz.
  • veri bulundu ise,URL değerinin siterilize ediyoruz, URL standartlarına uymayan karakterleri temizleyerek URL değerini gönderiyoruz.
http://web-programcisi.blogspot.com/ ” şeklinde bir “url” değeri sterilize edildikten sonra , şu şekilde kayıt edilir:

php-filtreler

0
[postlink] https://web-programcisi.blogspot.com/2012/01/php-class-ogrenenler-icin-ilk-adm.html[/postlink] Php`ye yeni başlayanlar bu yazıyı okumasın, en az bir yıllık php kullanıcısı iseniz mutlaka okuyun.


PHP 5 - Herşeyin değiştiği gün

Php 5 versiyon ile Nesne yönelimli programlama ön plana çıktı (7 Temmuz 2004). php'yi eleştirenler bu tarihte artık söz söyleyemez hale geldi, geliştirilmiş class yapısı ve sihirli fonksiyonlar ile işler daha da kolaylaştı. Siz de halen projelerinizde Class kullanmıyorsanız yazdığınız kodlar php 4 mantığına göre çalışmaktadır, kullandığınız sunucuda php 6 kullanılıyor olsa da sizin algoritmalarınız daima php 4 kıvamında kalacaktır. bu sözüm özellikle fonksiyonlarla hayatına devam edeceğini düşünenlere geliyor. Artık daha hızlı kod yazma vaktiniz gelmedi mi, kopyala yapıştır işleminden bıkmadınız mı ?

Elbette fonksiyonlar ile her türlü işlemi yapmanız mümkündür, fakat proje büyüdükçe fonksiyonların içinde boğulduğunuzu göreceksiniz, ve hangi sayfada hangi kodların olduğunu karıştıracaksınız. kopyala yapıştır canınızı sıkmaya başlayacak.

Bu olay çok sık başınıza geliyorsa artık biraz zahmet edip yeni şeyler öğrenerek Class dünyasına girmeniz gerekiyor. öğrendikçe neler kaçırdığınıza pişman olacaksınız.


if(! Tamam ikna oldum Peki Nedir Bu Class ) exit;

Tamam class dünyasına girelim ama daha kapıdan bakarken bile birsürü ingilizce terim canımızı sıkıyor, oda yetmezmiş gibi Türkçeye çevrilmiş yazıları bile anlayamıyorum, ne olacak bizim halimiz !

Öncelikle bu ders serisinde herşeyin kolay olacağını söyliyeyim ve içiniz rahatlasın. yabancı kaynaklarda olmadığı kadar kolay ve türkçe kaynaklarda bulamadığınız kadar basit anlatacağım. yazdığım kodlara hiçbir zaman betik, yordam falan demeyeceğim



Class: Fonksiyon ve değişkenlerin bir arada olduğu pakettir.

aslında class bu kadar kolay ve kısa

Fonksiyonun ne olduğunu biliyorsunuz, değişkeni zaten kullanıyorsunuz. peki aynı anda 3-4 fonksiyonu kullanan sayfanız yok mu ? var
Gerektiğinde bu fonksiyonları kopyalıyor yada include ile çağırıyorsunuz değil mi !

işte class bu işlemi daha düzenli hale getiriyor ve dışardan müdahaleyi önlüyor. son olarak yaptığınız class paketini bir dosyaya koyup gerektiğinde include ile çağırıyorsunuz.

Yani öyle fazla abartılacak bir olay değilmiş. madem öyle hadi bir class yapalım.

diyelim ki şöyle bir fonksiyona sahibiz, bu fonksiyon dosya silme işlemi yapıyor:

function silici($dosya)
{
unlink($dosya);
}

böyle kısa fonksiyon olmaz ama örnek kodları fazla uzatmayalım.

Bu fonksiyonda önemli bir sorun var, dosya adı herhangi birşey olabilir. örneğimizi web sitesinde kullandığımızı düşünelim.


$dosya=$_GET["ismi"];
silici($dosya);

bu sayfayı çağırmak için kullanıcı adres satırına şöyle bir link ile tıklıyor:

kontrol.php?ismi=resim1.jpg

tamam işte, ne güzel sayfa. resimleri silmeye yarıyor. sorun yok !

yok mu ?

peki kullanıcı bunu yazarsa ne olur.

kontrol.php?ismi=index.php

Bu durumda fonksiyonumuz hangi dosyayı siler ?

evet tahmin ettiğiniz gibi kullanıcı sitedeki herşeyi silebilir. tabii ki bu basit bir örnek. biz kısa bir düzeltme ile bunu önleyebiliriz. şimdi durumu düzeltmek için bir fonksiyon daha ekleyelim.

$uzantilar = array("jpg", "gif", "png", "jpeg");

function resim_mi($dosya)
{
global $uzantilar;

if (in_array(end(explode('.',$dosya)), $uzantilar ))
{
return true;
}else{
return false;
}
}

function silici($dosya)
{
if(resim_mi($dosya))
{
unlink($dosya);
}
}

Şimdi elimizde iki fonksiyon var. bunları bir dosyaya koyup gerektiğinde include ederek tek bir satırla kullanmamız mümkün.

silici($dosyaismi);

Hazır başlamışken aynı dosyaya upload için gerekli birkaç fonksiyon daha koyalım ve öylece kullanalım. gayet güzel gidiyor değil mi !

Aslında class ile tam olarak bunu yapıyoruz. gerekli değişkenleri ve fonksiyonları paketliyoruz ve tek dosyada kullanıyoruz. Böylece fonksiyon.php isimli ve içinde onlarca fonksiyon olan uzun bir dosya yerine gerektiğinde kullanılacak daha küçük dosyalarımız oluyor. Bu dosyalar bir amaca uygun paketlendiği için birbirine karıştırmıyoruz. düzenli olması için dosya ismi ile class ismi aynı oluyor.

Yukarıdaki fonksiyonları kullanarak üretilecek class paketi:


---------- dosyaci.php ismiyle kaydedilecek---------

class dosyaci
{

var $uzantilar = array("jpg", "gif", "png", "jpeg");

function resim_mi($dosya)
{
if (in_array(end(explode('.',$dosya)), $this->uzantilar))
{
return true;
}else{
return false;
}
}

function silici($dosya)
{
if($this->resim_mi($dosya))
{
unlink($dosya);
}
}
}



hepsi bu... geçmiş olsun.

Şimdi kırmızı ile gösterdiğim ve yeni öğreneceğiniz bölümlere bakalım.

class dosyaci
{

}

class bu şekilde oluşturuluyor. ve isimden sonra normal parantez işareti gelmiyor. isim olarak fonksiyondaki kurallar geçerli. Türkçe karakter olamaz.



var $uzantilar

Paket içinde kullanılacak değişken. müdahale etmek gerektiğinde sayfa içinde aramakla uğraşmak yerine class.php dosyasının başına bakmamız yeterli.



$this->resim_mi($dosya)

Class paketi içersinden bir fonksiyon çağırırken bu şekilde $this diyoruz. Türkçesi bu class içindeki bir fonksiyon veya değişken.



yaptığımız dosyayı kullanmak için sayfanın başında include etmemiz gerekiyor.
örnek kullanımı:

include("dosyaci.php");

$a = new dosyaci;
$a->silici($_GET["ismi"])

önceki işlemlerimize göre bir satır fazla yazmış olabiliriz ama toplamda bize çok vakit kazandırıyor ve tekrar kullanması kolaylaşıyor. sihirli fonksiyonlarla birlikte aslında daha az yazdığımızı farkediyoruz.

Php class öğrenenler için ilk adım

0
[postlink] https://web-programcisi.blogspot.com/2012/01/php-class-yaps.html[/postlink]
Bu dersimizde Php ile ileri seviye kullanımda işinize yarayacak. daha doğrusu uzmanlık seviyesinde öğrenmek zorunda olacağınız class (sınıf) yapısına giriş yapacağız.
Normal koşullarda class yapısı kullanmadan birçok işinizi fonksiyonlarla halledebilirsiniz. Eğer fonksiyonların sağladığı kolaylığa alıştıysanız o zaman işinizi 3-4 kat daha da kolaylaştıracak bir yapıyı öğrenmeye ne dersiniz.
Herzaman olduğu gibi Öncelikle işin mantığına bakalım:
Class hazırlandıktan sonra aynı fonksiyonlar gibi tek satırda çağrılır. ve kendi başına bir değişken gibi davranır.
örnek: insan isimli bir kütüphane yaptık diyelim:
şu şekilde kullanıldığını görmeniz işin eğlenceli kısmını anlamanızı sağlayacak.

$ogrenci = new insan();
$ogrenci -> adi = "Ali";
$ogrenci -> soyadi = "Zeki";
$ogrenci -> dogum_tarihi=1990;  

$ogrenci -> adini_soyle();
$ogrenci -> yasin_kac();
Özellikle kırmızı ile gösterdiğim bölüme dikkat etmenizi istiyorum. değişkenler bir kez tanımlandıktan sonra fonksiyonların kullanımı çok kolay oluyor. işin tek zor kısmı kütüphaneyi ilk üretme aşaması. ama kütüphane yapmayı öğrendikten sonra başkalarının hazırladığı kütüphaneleri kullanmak çok kolaylaşıyor. herhangi bir hatası varsa onu giderdikten sonra birsürü hazır class emrinize olacak.

Şimdi insan isimli class kütüphanesini üretelim:
class insan
{
    public $adi;
    public $soyadi;
    public $dogum_tarihi=0;
    private $anne_kizlik_soyadi;

    function adini_soyle()
    {
        echo "Benim adım ". $this->adi ."<br>";
    }

    function yasin_kac()
    {
       $yas = date("Y") - $this->dogum_tarihi ;
       echo "Yaşım ".$yas ."<br>";  
    }

}

Sonuç:
Benim adım Ali
Yaşım 20

Class kullanımında dikkat edeceğiniz konulardan biri değişkenleri $this->degisken şeklinde yazarken $işareti sadece this kelimesi önünde bulunur. ikincisi private şeklinde tanımlanmış değişkenleri dışardan yazdırmakmümkün değildir.
örnek:
Aşağıdaki komut hata verecektir:

echo $ogrenci -> anne_kizlik_soyadi;
Sonuç:

Fatal error: Cannot access private property insan::$anne_kizlik_soyadi in test.php on line 
32

private(kişisel) 
bir değişken bu şekilde tanımlanmışsa sadece class içindeki fonksiyonlar tarafından kullanılabilir. class dışından yazdırma veya değiştirme yapılamaz.

örnek: aşağıdaki şekilde değişiklik yapılarak insan isimli class yapısını değiştirmemiz halinde "Anne kızlık adı" bilgisini öğrenebiliriz.
class insan
{
    public $adi;
    public $soyadi;
    public $dogum_tarihi=0;
    private $anne_kizlik_soyadi="zekiye";

    function adini_soyle()
    {
        echo "Benim adım ". $this->adi ."<br>";
    }

    function yasin_kac()
    {
       $yas = date("Y") - $this->dogum_tarihi ;
       echo "Yaşım ".$yas ."<br>";  
    }

   function anne_soyadi($istek)
    {
         if($istek=="lütfen")
         {
             echo "Annemin kızlık soyadı : ".$this->anne_kizlik_soyadi ;
         }else{
             echo "Nayırr, Söylemem";
         }     
    }

}

yeni fonksiyonu çağırmak için şöyle yazmak gerekir:

$ogrenci -> 
anne_soyadi("lütfen");

Php Class Yapısı

0
[postlink] https://web-programcisi.blogspot.com/2012/01/php-turkce-karakter-sorunu-duzeltmek.html[/postlink]
Sizde php kodlarınızda Türkçe karakter sorunu yaşııyorsanız aşağıdaki çözümlerden birini deneyebilirsiniz. Karakter sorunu öncelikle veritabanında kayıt türü seçmenizle alakalıdır.
Yeni veritabanı oluştururken dil olarak şunlardan birini seçebilirsiniz. ikisi de iş görür seçim size kalmış.
1- Herşeyi UTF 8 yapabilirsiniz
UTF-8 birçok ortamda size kolaylık sağlayacaktır. özellikle Ajax ile sorun yaşayanlar UTF-8 tercih etmektedir.
Çözüm:
UTF için HTML sayfasında en tepede şu yazılı olacak.
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />

Veritabanı dil seçimi ise ise şöyle olacak:
utfturk
Bu durumda türkçe karakterleri sorunsuz görüntüleyenilirsiniz.

2- Türkçe Ayarlarını kullanabilirsiniz.
Türkçe ayarlar için HTML sayfasında en başta şu tanım olmalı:

<meta http-equiv="Content-Type" content="text/HTML; charset=ISO-8859-9" />

Veritabanı olarak Latin5_Turkish seçmeniz uygun olacaktır:
latin5turkish
Eğer veritabanından alınan bilgiler yanlış gelirse veritabanı bağlantısından hemen sonra şunu eklemelisiniz.

    mysql_select_db("veritabanı_adı"); 
   
    mysql_query("SET NAMES ´latin5´");
    mysql_query("SET CHARACTER SET latin5");  
Veritabanı türü olarak latin_5_turkish seçmediyseniz en altına şunu da eklemelisiniz.
  mysql_query("SET COLLATION_CONNECTION = ´latin5_turkish_ci´ ");

Php Türkçe Karakter Sorunu Düzeltmek

0
[postlink] https://web-programcisi.blogspot.com/2012/01/php-nasl-daha-hzl-calstrlr.html[/postlink]
1. Hataları herzaman gizleyin. 
Herkes hata yapabilir. ama hatalarınızı herkesin görmesi can sıkıcı olur.
öncelikle Php sayfasının başında error_reporting(0); yazarsanız basit hatalar gizlenir.
Fakat dosya açma gibi önemli işlemler yine hata verir. bunu engellemek için de komutun başına @ koymanız yeterlidir.
örnek:  $h=@fopen("dosya","w");
veya bir mysql komutu yazarken aynısı kullanılabilir.
@include("sahte_php_$no.php");

2- Php Kısaltmaları kullanın.
$sayi=$sayi+1  yazmak yerine  $sayi ++;  aynı anlama gelir.

if($a==5){  $b=2; }else{ $b=7 }    yazmak yerine $b=($a==5)?2:7;   aynı anlama gelir.

3. include ile hız kazanın.
Php derleme aşamasında mevcut değişkenlere göre derleme yapar. bu durumda çok çok uzun bir if parantezi varsa hepsini bir dosyaya koyup hızlanma sağlayabilirsiniz.
örnek:
if($uye_login==1)
{

   //  burda 40-50 satırlık bir işlem var diyelim
   //  işin kötüsü aynı sayfaya ziyaretçiler de giriyor.
   //  ve burdaki 50 satır çoğu zaman işe yaramıyor.

}
oradaki 50 satırı alıyoruz ve farklı bir dosyaya koyuyoruz. dosya adını da user_islemleri.php yaptık diyelim. bu durumda yukarıdaki if komutu şu hale geliyor.
if($user_login==1)
{

   include("user_islemleri.php");
}

4- Strlen Yerine Isset
Çeşitli durumlarda saydırma ve döngü komutlarından kaçınmak size hız kazandırır. Örneğin Strlen aslında bir kelimedeki tüm harfleri sayan bir döngüdür. Kelimenin de harflerden oluşan bir dizi olduğunu bildiğimize göre tek tek harfleri saymak yerine son karakterin varlığına bakmak yeterlidir.
if(strlen($nick) > 10)
{
  echo "Çok uzun bir nick yazdınız";
}
onun yerine şöyle yazılabilir.

if(isset($nick[11]))  echo " çok uzun nick yazdınız";


5-  Yerine Göre Tek Tırnak veya Çift tırnak kullanın.
Php ile çift tırnak kullandığınızda verilen kelimenin içinde değişkenler olma ihtimali bulunur. bu durumda php daha fazla işlem yapmış olur.
aşağıdaki iki örneğe bakalım:
print "işlem sonucu: $sayi dir";   
burda çift tırnak olması zorunlu ama onun yerine şu kullanılırsa daha hızlı olur.

print 'işlem sonucu:' . $sayi . 'dir';

6-  Class kullanmayı öğrenin:
Class: Birkaç fonksiyonun birlikte kullanım şeklidir. Fonksiyon gibi tekrar kullanılabilir ama daha kapsamlı olduğu için fazla iş yapar.
Class kavramı php 5 ile gelmiş bir olaydır. eski derslerde class olmamasının sebeplerinden biri budur. Diğer birçok program dilinde "olmazsa olmaz" denilen önemli şeylerden biridir. Class mantığını öğrenerek projenizde hız sağlayamazsınız ama çalışma hızınız artacaktır. 


Php Nasıl daha hızlı çalıştırılır