Bir PHP betiğine bir form gönderildiğinde o formdaki bilgi betik tarafından özdevinimli olarak kullanılır. Bu bilgiye erişmek için birçok yol vardır, örneğin:
Örnek 1 - Basit bir HTML formu
<form action="foo.php" method="post">
Name: <input type="text" name="kullanici_adi" /><br />
Email: <input type="text" name="eposta" /><br />
<input type="submit" name="submit" value="Beni gönder!" />
</form>
PHP 5.4.0 itibariyle, HTML formlarınızdaki bilgiye erişimin iki yolu vardır. Şu an için kullanılabilen yöntemler aşağıda sıralanmıştır:
Örnek 2 - Basit bir POST HTML formundan bilgiye erişim
<?php echo $_POST['kullanici_adi']; echo $_REQUEST['kullanici_adi']; ?>
There were some other ways of accessing user input in old PHP versions. These are listed below. See changelog at the bottom of the page for more details.
Örnek 3 Old methods of accessing user input
<?php
// DİKKAT: Bu yöntemler artık desteklenMEmektedir.
// Geçerli olanlar yukarıda gösterilmiştir.
// import_request_variables() kullanımı - Bu işlev PHP 5.4.0'da kaldırılmıştır
import_request_variables('p', 'p_');
echo $p_kullanici_adi;
// PHP 5.4.0'dan itibaren, bu uzun öntanımlı değişkenler kaldırılmıştır
echo $HTTP_POST_VARS['kullanici_adi'];
// register_globals kullanımı - Bu özellik PHP 5.4.0'da kaldırılmıştır
echo $kullanici_adi;
?>
Bunun yerine önceden tanımlı uygun bir GET değişkeni kullanmak dışında, GET formunun kullanımı aynıdır. GET ayrıca QUERY_STRING (Bir URL'de '?' iminden sonraki bilgi) sorgu dizgesine de uygulanır. Bu bakımdan örneğin, http://mesela.dom/dnm.php?id=3 $_GET['id'] ile erişilebilen GET verisini içerir. Ayrıca, $_REQUEST değişkenine de bakınız.
Bilginize:
Değişken isimlerindeki noktalar ve boşluklar altçizgi karakterine dönüştürülür. Örneğin, <input name="a.b" /> ifadesi $_REQUEST["a_b"] haline gelir.
PHP form değişkenleri bağlamında dizileri de anlar (ilgili SSS'ye bakınız). Örneğin, ilgili değişkenleri birlikte gruplayabilir veya bu özelliği çoklu seçim girdisinden değerleri almak için kullanabilirsiniz. Örneğin, bir formu kendine gönderelim ve gönderilen veriyi gösterelim:
Örnek 4 - Daha karmaşık form değişkenleri
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
Adı: <input type="text" name="personal[isim]" /><br />
Eposta: <input type="text" name="personal[eposta]" /><br />
Bira: <br />
<select multiple name="bira[]">
<option value="efes">Efes</option>
<option value="tuborg">Tuborg</option>
<option value="venus">Venüs</option>
</select><br />
<input type="submit" value="Gönder!" />
</form>
Bilginize: Harici değişken ismi geçerli bir dizi sözdizimi ile başlıyorsa sondaki karakterler sessizce yoksayılır. Örneğin, <input name="foo[bar]baz"> girdisi $_REQUEST['foo'] ['bar'] haline gelir.
Bir formu gönderirken, şöyle bir etiketle standart gönder düğmesi yerine resim kullanılabilir:
<input type="image" src="image.gif" name="sub" />
Kullanıcı resim üzerinde bir yere tıkladığında, eşlik eden form iki ek değişkenle sunucuya iletilmiş olur: sub_x ve sub_y. Bunlar kullanıcın resim üzerinde tıkladığı noktanın koordinatlarını içerir. Deneyimliler tarayıcı tarafından gönderilen asıl değişken isimlerinin alt çizgi yerine nokta içerdiğine dikkat etmiş olabilirler, fakat PHP noktaları özdevinimli olarak alt çizgiye çevirir.
PHP, » RFC 6265'de tanımlandığı gibi HTTP çerezlerini şeffaf olarak destekler. Çerezler kullanıcıları izleyip tanımlamak amacıyla kullanıcının tarayıcısında veri saklamak için kullanılan bir yöntemdir. Çerezleri setcookie() işlevini kullanarak belirtebilirsiniz. Çerezler HTTP başlığının bir parçasıdır, bu nedenle setcookie() işlevi tarayıcıya herhangi bir çıktı gönderilmeden önce çağrılmak zorundadır. Bu kısıtlama header() işlevi için de geçerlidir. Çerez verisi $_COOKIE veya $_REQUEST gibi uygun çerez veri dizisinde bulunur. Ayrıntılar ve örnekler için setcookie() kılavuz sayfasına bakınız.
Eğer tek bir çerez değişkenine birden fazla değer atamak isterseniz, değişkeni bir dizi olarak atayabilirsiniz. Örneğin:
<?php
setcookie("Cerezim[foo]", 'Deneme 1', time()+3600);
setcookie("Cerezim[bar]", 'Deneme 2', time()+3600);
?>
Her ne kadar betiğinizde Cerezim tek bir dizi olsa da bu iki ayrı çerez oluşturacaktır. Eğer birden fazla değere sahip tek bir çerez atamak isterseniz, önce değer üzerinde serialize() veya explode() kullanmayı düşünün.
Yolu veya alan adı farklı olmadığı sürece aynı isimdeki bir çerez önceki çerezin üzerine yazılır. Böylece, isterseniz örneğin bir alışveriş sepeti uygulaması için bir sayaç tutabilir ve bunu karşıya aktarabilirsiniz.
Örnek 5 - setcookie() örneği
<?php
if (isset($_COOKIE['sayac'])) {
$sayac = $_COOKIE['sayac'] + 1;
} else {
$sayac = 1;
}
setcookie('sayac', $sayac, time()+3600);
setcookie("Sepet[$sayac]", $mal, time()+3600);
?>
Genellikle, PHP bir betiğe aktarılan değişken isimlerini değiştirmez. Fakat, nokta iminin PHP'de değişken isimlerinde geçerli bir karakter olmadığına dikkat edilmelidir. Örnek:
<?php
$varname.ext; /* geçersiz değişken ismi */
?>
Bu nedenle, PHP'nin gelen değişken isimlerindeki nokta imlerini alt çizgi imi ile değiştirdiğini bilmekte yarar vardır.
Değişken türlerini PHP belirlediği ve (genellikle) gerektiği gibi değiştirdiği için, verilen bir değişkenin herhangi bir anda hangi türde olduğu sorgulanmadan bilinemez. PHP'de bir değişkenin hangi türde olduğunu bulan birçok işlev vardır. Örnek: gettype(), is_array(), is_float(), is_int(), is_object() ve is_string(). Ayrıca Türler bölümüne de bakınız.
Bir metin protokolü olarak HTTP'de, çoğunlukla, tamamen olmasa da, Süper küresel diziler içinde gelen içerik dizge olarak kalır. PHP değerleri belli bir türe dönüştürmeyi denemez. Aşağıdaki örnekte, $_GET["var1"] değişkeni "null" ve $_GET["var2"]ise "123" dizgesini içerecektir.
/index.php?var1=null&var2=123
Sürüm: | Açıklama |
---|---|
5.4.0 | Küresel Kayıtlar, Sihirli tırnak ve register_long_arrays kaldırıldı. |
5.3.0 | Küresel Kayıtlar, Sihirli tırnak ve register_long_arrays kulllanımı önerilmez duruma geldi. |
4.2.0 | register_globals yönergesinin öntanımlı değeri off oldu. |
4.1.0 | $_POST ve $_GET gibi Süper küresel diziler kullanılabilir oldu. |