Formun PHP'de Tek Dosyada İşlenmesi
Önceki derste formumuz bir sayfada yer alıyordu,
ancak başka bir sayfaya gönderiliyordu.
Aslında bu gerekli değildir. Eğer action
niteliği boş bırakılır veya tamamen kaldırılırsa,
form aynı sayfaya gönderilecektir.
Bu nasıl çalışacak: Sayfaya ilk girişte formu verilerle dolduracağız ve butona basacağız. Bundan sonra sayfa yenilenecek ve kodu form verileriyle tekrar çalıştırılacak.
Bir örnek üzerinden inceleyelim. Tek bir dosyada form ve onun işlemi olduğunu varsayalım:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
Sayfaya ilk girişte var_dump işlevi
boş bir dizi yazdıracak. Form gönderildikten sonra ise
artık form verilerini yazdıracak. Yani ilk
seferde $_GET boş olacak, ikinci seferde
- form verilerini içerecek.
Bu sorunlara yol açabilir. Örneğin, formaa sayılar gireceğimizi ve bu sayıların toplamını ekranda göstermek istediğimizi varsayalım:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
Bu durumda, sayfaya ilk girişte
$_GET dizisinin boş olduğu ve bizim
onun elemanlarına erişmeye çalışmamızla ilgili
PHP hataları göreceğiz.
Burada şunu söylemek gerekir, tarayıcınızda hatalar görünmeyebilir. Bu durumda PHP hata çıktısının açık olduğunu kontrol edin ve ayrıca adres çubuğunda form verileri olmadan sayfaya ilk giriş yaptığınızdan emin olun.
Problemi düzeltelim. Bunun için, formun gönderilip gönderilmediğini kontrol edeceğimiz bir koşul ekleyelim.
Örneğin, $_GET'nin boş olup olmadığını
kontrol edebiliriz. Eğer $_GET boş değilse -
form gönderilmiştir ve toplama işlemi yapılabilir.
Aksi takdirde sayfaya ilk kez giriliyordur ve toplama
işlemi yapılmayacaktır. İşte düzeltilmiş kod:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
Kullanıcıdan soyadı, adı ve baba adını sorun. Form gönderildikten sonra girilen verileri ekrana yazdırın.