Web uygulamaları geliştirirken, sayfalar arası veri almak için çeşitli yöntemler kullanılır. Bunlardan biri de URL üzerinden veri aktarımı sağlayan query string yapısıdır. PHP'de bu yapının nasıl çalıştığını ve nasıl kullanılacağını detaylı bir şekilde ele alalım.
QUERY STRING NEDİR?
Query string, bir URL’nin sonunda yer alan ve ? karakteriyle başlayan, anahtar-değer çiftlerinden oluşan veri yapısıdır. Anahtar yerine parametrede denilebilir. Örneğin:
sayfa.php?msj=cikis&id=12
Yukarıdaki URL'de:
PHP'DE QUERY STRING VERİLERİNE ERİŞİM
PHP’de query string ile gelen verilere $_GET süper global dizisi aracılığıyla erişilir. Örnek:
<?php
$isim = $_GET['isim'];
$yas = $_GET['yas'];
echo "Merhaba, ".$isim." Yaşınız: ".$yas";
?>
Bu script çalıştırıldığında ve URL şu şekildeyse:
sayfa.php?isim=Zeynep&yas=30
Çıktı olarak şunu alırız:
Merhaba, Zeynep Yaşınız: 30
PARAMETRE KONTROLÜ (HATA ÖNLEME)
Bazı durumlarda parametre gelmeyebilir. Bunu kontrol etmek önemlidir:
<?php
if (isset($_GET['ad'])) {
echo "Ad: " . htmlspecialchars($_GET['ad']);
} else {
echo "Ad parametresi bulunamadı.";
}
?>
GÜVENLİK VE FİLTRELEME
Query string verileri doğrudan kullanıcıdan geldiği için güvenlik önlemleri alınmalıdır. En yaygın güvenlik problemleri:
1. XSS’e Karşı htmlspecialchars()
$isim = htmlspecialchars($_GET['isim']);
echo "Merhaba, $isim";
Yukarıda hmlspecialchars fonksiyonu, olası HTML karakterlerinin parametre değeri olarak gönderilmesinde bu krakterleri işlevsiz kılacaktır.
2. Veri Tipi Kontrolü
$yas = filter_input(INPUT_GET, 'yas', FILTER_VALIDATE_INT);
if ($yas === false) {
echo "Geçersiz yaş bilgisi.";
} else {
echo "Yaşınız: $yas";
}
Yukarıda ise , querystring ile gelecek verinin INT (sayı) tipinde oacağı beliritliyor. Dolayısıyla sayı dışında bir veri değeri gelirse , "geçersiz yaş bilgisi" yazdırılıyor..
QUERY STRING OLUŞTURMA (DİNAMİK LİNKLER)
PHP’de linklere dinamik olarak parametre eklemek için, link aşağıdaki gibi oluşturulabilir:
<?php
$kategori = "kitap";
echo "<a href='urunler.php?kategori=$kategori'>Kitapları Gör</a>";
?>
Bu linke tıklanınca tarayıcı şu URL’yi çağırır:
urunler.php?kategori=kitap
ÇOKLU PARAMETRELERLE ÇALIŞMAK
Query string yapısı birden fazla parametre içerebilir. Bunun için parametre=deger ikililerinin arasına & işareti eklenir.
<a href="filtrele.php?renk=mavi&beden=L&stok=var">Filtrele</a>
PHP tarafında:
$renk = $_GET['renk'];
$beden = $_GET['beden'];
$stok = $_GET['stok'];
Yukarıda 3 farklı parametre değeri gönderilmiş olur.
HTTP_BUİLD_QUERY İLE DİZİDEN QUERYSTRING OLUŞTURMA
http_build_query() fonksiyonu dizi hakindeki değerleri , querystring formatına dönüştürür.
$data = [
'name' => 'Ali',
'age' => 30,
'city' => 'İstanbul'
];
$query = http_build_query($data);
echo "profil.php?". http_build_query($query);
Yukarıda daqta dizisindeki elemanlar, querystring formatında yazılır ve aşağıdaki link elde edilmiş olur. (Boşluk ve türkçe karakterler kodlanır.)
listele.php?name=Ali&age=30&city=%C4%B0stanbul
SEO DOSTU ALTERNATİF: URL REWRITE
Query string genellikle SEO açısından dezavantajlı olabilir. Bu nedenle mod_rewrite ile daha anlamlı URL’ler oluşturulur:
site.com/urun/45
Bu URL aslında şunu temsil eder:
site.com/urun.php?id=45
Apache .htaccess dosyası ile yönlendirme yapılır:
RewriteEngine On
RewriteRule ^urun/([0-9]+)$ urun.php?id=$1 [L]
Query string yapısı, PHP ile web uygulamaları geliştirirken kullanıcıdan hızlı ve kolay veri almak için ideal bir yöntemdir. Ancak, kullanıcıdan gelen veriler her zaman güvenlik süzgecinden geçirilmeli ve gerekli filtrelemeler yapılmalıdır. $_GET ile alınan veriler üzerinde doğrulama ve kaçış işlemleri yapılmadan doğrudan kullanılmamalıdır.