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, 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:
msj parametresinin değeri: cikis
id parametresinin değeri: 12
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
Bazı durumlarda parametre gelmeyebilir. Bunu kontrol etmek önemlidir:
<?php
if (isset($_GET['ad'])) {
echo "Ad: " . htmlspecialchars($_GET['ad']);
} else {
echo "Ad parametresi bulunamadı.";
}
?>
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:
XSS (Cross Site Scripting)
SQL Injection
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..
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
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_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
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.
Toplam 33 Makale
Lütfen yorumlarınızda saygılı, yapıcı ve anlaşılır bir dil kullanın.
Küfür, hakaret ya da spam içerikler onaylanmaz.