RSS

PHP form kullanımı ve örnekleri

45 08 Haziran 2010 ~ Musa Avcı — Orta

PHP’de ziyaretçilerden ve kullanıcılardan bilgi almak için formları kullanacağız. Formlar sayesinde kodları dışarıdaki verilere ve dinamik içeriklere açarız. Mesela giriş formları, e-mail gönderme formları, hesaplama formları, yönetim panelleri vesaire.

Ziyaretçilerin forma yazdıkları değerleri burada bahsettiğimiz $_GET, $_POST ve $_REQUEST global dizileri aracılığyla PHP’de bir değişkene atarız.

HTML formu ile PHP scriptimize göndereceğimiz her bir form elemanı PHP de gönderdiğimiz metod türüne göre $_GET ya da $_POST içinde bir eleman olur. Yani bizi dışarıdaki hayata bağlayan ve dışarıdan bilgi almamızı sağlayan köprülerimiz, pencerelerimiz $_GET ve $_POST global değişkenleridir.

HTML Form yapımı

PHP’ye verileri göndermek için önce bir arayüz tasarlamamız gerekiyor. Verilerin gönderileceği bir form tasarlamamız gerekiyor.

Bir HTML formunu taslak şeklinde çizelim:

<form action="formun gönderileceği sayfa" method="formun verilerini gönderme metodu">
   buraya ise formun elemanları gelecek.
</form>

Temel form elemanları

Formun içerisine yerleştireceğimiz bir çok form elemanı mevcut. Metin alanları, parola alanları, çoklu onay kutucukları, radyo butonları, gönderme butonları, dosya seçim elemanları gibi çeşit çeşit form elemanı mevcuttur.

Her bir form elemanında “name” parametresi olmak zorundadır. Bu paramtre o elemanın ismini belirtir. Her form elemanının bu parametresine yazacağımız isim sayesinde PHP’de buluruz.

Aynı şekilde varsayılan form elemanı değerini belirlemek ya da radyo butonların değerini belirlemek içinde “value” parametresini kullanırız. Bu parametreye yazacağımız değerler PHP’de o elemanın değerini belirler.

İşte HTML form elemanları ve örnek kullanımları:

Eleman tipi Açıklaması Örnek kod Görünüm
text Metin kutusu <input name="metin" type="text" value="varsayılan değer" />
password Metin kutusu ile aynı fakat yazılanlar gösterilmez <input name="sifre" type="password" value="varsayılan değer"/>
checkbox İşaretlemeli onay kutusu <input name="onay" type="checkbox" />
radio Radyo butonlar <input name="cinsiyet" type="radio" value="erkek" /> Erkek, <input name="cinsiyet" type="radio" value="kadin" /> Kadın Erkek,
Kadın
file Dosya göndermek için dosya seçme elemanı <input name="dosya" type="file" />
textarea Geniş metin alanı <textarea name="metin">varsayılan değeri</textarea>
select, option Seçim listesi ve seçim listesinin seçenekleri <select name="liste">
<option value="windows">Windows</option>
<option value="linux">Linux</option>
<option value="mac">MacOs</option>
</select>
submit Formu gönderme butonu <input name="gonder" type="submit" value="Gönder" />

Hemen bunlardan yeni bir form örneği oluşturup tablodaki örnekleri uygulamalı olarak gösterelim:

<form action="index.php" method="post">
 İsim: <br/>
 <input type="text" name="isim" /><br/>
 Soyisim: <br/>
 <input type="text" name="soyisim" /><br/>
 E-mail: <br/>
 <input type="text" name="mail" /><br/>
 Cinsiyet: <br/>
 <input type="radio" name="cinsiyet" value="e" /> Erkek<br/>
 <input type="radio" name="cinsiyet" value="k" /> Kadın<br/>
 Mesaj: <br/>
 <textarea name="mesaj"></textarea><br/>
 <input type="submit" value="Formu gönder" />
</form>

Formun görünütüsü:

İsim:



Soyisim:



E-mail:



Cinsiyet:

Erkek

Kadın

Mesaj:




Form gönderme metodları (GET ve POST) arasındaki farklar

İki tane metodumuz var, bunlar GET ve POST. İkiside formumuzdaki verileri PHP scriptimize göndermeye yarıyor. Tek farkları verileri gönderme yolları.

Eğer metod olarak GET’i seçersek formu gönderdiğimizde PHP dosyamızın adı index.php ise adres çubuğunda gönderdiğimiz değerler yazacaktır. Örneğin: http://www.site.com/index.php?isim=musa&cinsiyet=e&mesaj=selam şeklinde olacaktır.

POST seçtiğimizde ise GET’de olduğu gibi gönderdiğimiz veriler adres çubuğundan değilde browser üzerinden gönderilir. Yani seçtiğimzi PHP sayfasına içten gönderilir, aynı cookie ve sessionlar gibi.

Örnekler ile gösterelim:

index.php adında bir dosya oluşturalım ve içerisine aşağıdaki kodu ekleyelim.

echo $_GET['isim'];

Ve bu sayfaya index.php?isim=musa şeklinde girelim. Wamp kullanıyorsanız http://localhost/index.php?isim=musa şeklinde olacaktır. Sonuç olarak ekranda adres çubuğunda belirttiğimiz isim değeri yani musa yazar.

GET metodunu kullanmak için bir forma ihtiyaç yoktur fakat POST metodu yanlızca bir form ile gönderilir.

Bir örnek daha yapalım, bu sefer bir matematik işlemi yaptıralım:

carp.php adında bir dosya oluşturuyoruz ve aşağıdaki kodları yazıyoruz:

$sayi = $_GET['x'];
$sonuc = $sayi * 5;
echo $sonuc;

carp.php?x=10 şeklinde girdiğimizde ekranda 50 yazacaktır. Adres çubuğuna yazacağımız her x değerini 5 ile çarpıp ekrana yazacaktır.

Formu kontrol etmek

Bir formun verilerini işlemeden önce bize form ile veri gönderilip gönderilmediğini ya da gönderilen değerlerinin boş olup olmadığını kontrol etmemiz gerekiyor. Bunun içinde if ifadesini, isset() ve empty() fonksiyonunu kullanacağız.

İlk olarak basit bir form yapalım, dosyamızın adı giris.php olsun, buradan kontrol.php ye veri göndereceğiz:

<form action="kontrol.php" method="post">
Kullanıcı:<br/>
<input type="text" name="kullanici" /><br/>
Şifre:<br/>
<input type="password" name="sifre" /><br/>
<input type="submit" value="Giriş yap" />
</form>

Şimdide kontrol.php‘nin içeriğini kodlayalım ve kontrolümüzü yapalım:

<?php
if(isset($_POST['kullanici']) && isset($_POST['sifre'])) {
   $kullanici = $_POST['kullanici'];
   $sifre = $_POST['sifre'];

   if(empty($kullanici) || empty($sifre)) {
      echo 'Lütfen boş bırakmayın';
   } else {
      echo 'Girilen kullanıcı adı: ' . $kullanici . ' şifre: ' . $sifre;
   }
} else {
   echo 'Lütfen formu kullanın';
}
?>

İlk koşulda “isset($_POST['kullanici']) && isset($_POST['sifre'])” $_POST['kullanici'] ve $_POST['sifre'] diye bir değişken tanımlanmış mı diye sorduk. Eğer ikiside tanımlanmış ise bu ifadenin kod bloğuna yazdığımız ikinci bir koşul daha devreye giriyor ve bu sefer gönderilmiş olan verilerin boş mu olup olmadığına bakıyor.

İkinci koşulda “empty($kullanici) || empty($sifre)” $kullanici değişkeninin değeri boşsa ya da $sifre değişkeninin değeri boşsa diye bir koşul tanımlıyoruz. Eğer ikisinden birisinin içeriği boşsa bu sefer ekrana uyarı olarak Lütfen boş bırakmayın yazdırıyoruz. Eğer ikiside boş değilse bu seferde ekrana forma yazdığımız kullanıcı adı ve şifre çıkıyor.

Bu örnekte aynı zamanda iç içe if ifadesi kullanmayıda göstermiş olduk.

Form ile kullanıcı girişi

Bu konudan ayrılmadan önce basit bir örneklede kullanıcı girişi olayını göstermek istiyorum. Veritabanı ve fazla detaya girmeden session ve form kullanarak bir kullanıcı girişi olayı yapalım.

Yukarıdaki giris.php örneğindeki formu kullanalım. O form bize kullanici ve sifre adında iki veri gönderilmesini sağlıyordu. Bunun yanında biz bir kontrol ve bir de panel sayfası yapacağız.

Kontrol sayfasında gönderilen kullanıcı adı ve şifrenin bizde kayıtlı kullanıcı adı ve şifre ile aynı olup olmadığına bakacağız, eğer bizdekiler ile aynı ise bu değerleri session ile kaydedeceğiz sonrasında panel.php‘ye gönderip giren kişinin giriş yapıp yapmadığını kontrol edip ona göre kullanıcıya özel olan sayfayı göstereceğiz.

kontrol.php:

<?php
if(isset($_POST['kullanici']) && isset($_POST['sifre'])) { // form gönderilmiş mi
   $kullanici = $_POST['kullanici'];
   $sifre = $_POST['sifre'];

   if(empty($kullanici) || empty($sifre)) { // gönderilenler boş mu
      echo 'Lütfen boş bırakmayın';
   } else {
      if($kullanici == 'musa' && $sifre == '123456') { // bilgiler doğru mu
         session_start();
         $_SESSION['kullanici'] = 'musa';
         $_SESSION['sifre'] = '123456';
         echo 'Giriş yaptınız! Şimdi panel.php ye girebilirsiniz.';
      } else {
         echo 'Yanlış kullanıcı adı ya da şifre';
      }
   }
} else {
   echo 'Lütfen formu kullanın';
}
?>

Burada bir önceki örnekteki form kontrol etme ifadelerinden sonra ekstra olarak bir gönderilenlerin tam olarak ne olduğunu da kontrol eden bir ifade ekledik. Eğer değerler boş değilse ve istediğimiz değerlere eşit ise session başlatıp kullanici ve sifre adında iki adet session oluşturduk. Bu oluşturduğumuz session değerlerinin içerisine yine şifremizi kaydettik. Bu bilgiler browser kapatılana kadar silinmeyeceği için bu süreç içinde kullanıcı oturum yapmış şekilde gözükecek ve panel.php’ye girdiğinde ona kullanıcı içeriğini gösterecektir.

panel.php:

<?php
session_start(); // session kullanımı başlattık
if(isset($_SESSION['kullanici']) && isset($_SESSION['sifre'])) { // bu sefer sessionlar tanımlanmış mı diye bakıyoruz
   if($_SESSION['kullanici'] == 'musa' && $_SESSION['sifre'] == '123456') {
      echo 'Panele hoşgeldiniz! Bu yazıyı sadece giriş yapmış kişiler görebilir.';
   } else {
      session_destroy(); // bilgileri yanlış olduğu için sessionlar silinir
      echo 'Bilgileriniz yanlış, buraya yanlızca giriş yapmış kişiler girebilir';
   }
} else {
   echo 'Sadece giriş yapmış kişiler görebilir';
}
?>

Burada ise kontrol.php de gönderilen POST verilerini kontrol ettiğimiz gibi SESSION verilerini kontrol ettik. Sadece 1 kere giris.php üzerinden giriş yaptıktan sonra bir oturum boyunca panel.php sayfasında oturum açmış bir şekilde durabiliriz.

İşte genel olarak kullanıcı girişinin ve form kullanımının mantığı budur.
Form ile dosya yükleme olayını ise daha sonraki derslerde detaylı olarak anlatacağım.

Bir sonraki PHP serüveninde görüşmek üzere esen kalın!

Etiketler:

Bu yazıyı PDF olarak indir

Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.

"PHP form kullanımı ve örnekleri" yazısı için 45 yorum yapılmış.

  1. [...] dizileri PHP from kullanımı ve örnekleri, PHP Cookie ve PHP Session başlıkları altında detaylı bir şekilde ele [...]

  2. Murat diyor ki:

    Teşekkürler yararlı bi anlatım

  3. BuLL MeRT diyor ki:

    Yalın ve anlaşılır anlatım için çok teşekkürler

  4. [...] dosya yükleme işleme için önceki derslerde öğrendiğimiz html formunu kullanacağız. Başkalarının bilgisayarında olan dosyaları kendi sunucumuza göndereceğimiz [...]

  5. [...] önce bir mail formu yapmamız gerekiyor. HTML formları hakkında daha fazla bilgi almak için önceki yazımıza göz [...]

  6. Bekir diyor ki:

    Allah sizden razı olsun.Çok güzel bir yazı ve çok faydalı oldu.

  7. ilhami diyor ki:

    formdaki doldurulan bilgileri bi mail adresine nasıl gondeririz ?

  8. bora fırlangeç diyor ki:

    öncelikle merhabalar!
    benim ufak bir sorum olacak:
    ben sitem için ziyaretçi defteri oluşturmak istiyorum. bunu bir text dosyasına yerleştirmek istiyorum. ama ufak bir sıkıntım var: bütün mesajları alıntı bloğu içine almam gerek. acaba text yerine .html dosyası mı oluşturmalıyım?
    bir de bunu örnek bir kodla anlatırsanız sevinirim. bu arada da ben bir görme engelliyim.
    teşekkürler!

  9. engin diyor ki:

    yazıda kontrol.php den panel.php nasıl yönlendiği anlatılmamış.
    kodda da bir yönlendirme gözükmüyor.
    bu konuda bir açıklama yapabilirmisiniz.

    • Musa Avcı diyor ki:

      kontrol.php’de giriş başarılı olduğunda ekrana “Giriş yaptınız! Şimdi panel.php ye girebilirsiniz” yazdırdım.

      yazıyı hazırlamadaki amacım temeli açıklayıcı bir örnek çalışma sunmak olduğu için bu tip detaylara önem vermedim.

    • Fevzi diyor ki:

      Aşağıdaki Yönlendirme kodunu kullanırsanız bağlantı otomatikman sağlanır :)

      echo "Giriş Başarılı. Panel'e yönlendiriliyorsunuz";
      header('refresh: 5; url=panel.php');

  10. mehmet kemal diyor ki:

    Hocam blog sitemde, ziyaretçilerin soru gönderebileceği bir form yapmak istiyorum bu sorular benim mail adresime gelsin istiyorum bunu yapmak için güvenlik koduna ihtiyacım, kendim 10 tane kadar basit güvenlik sorusu oluşturup bunların rastgele döndürmek istiyorum.
    Bunu nasıl yapabilirim ?

  11. eyaz diyor ki:

    ben de yaptım çok güzel kodlar çalışıyor super

  12. gulnaz diyor ki:

    merhaba ben php de hesap makinesi yapmaya çalışıyorum.Php ye daha yeni başladım.mesela hesap makinesinde 1 butonuna basılınca 1’i ardından + butonuna basılın topama olduğunu ardından 2 butonuna basılınca 2’yi alıp sonra bunları toplayıp textboxa yazdırmak istiyorum asp.net veya actionscript olsa benim için çok kolay bir şey olurdu ama phpyi daha yeni başladım dediğim gibi pek fikrim yok yardımcı olabilirmisin normalde tüm programlama dilleri mantık olarak aynıdır ama php de şu button işini bir türlü bulamadım lütfen yardımcı olun…

  13. Ümit Güven diyor ki:

    Bu güzel ve bilgi verici paylaşım için çok teşekkürler, devamını bekliyoruz.

  14. suat diyor ki:

    ben localhost’da phpmyadmin sayfasına giremiyorum veritabanı oluşturmam lazım nasıl yapabilirim acil yazarsanız sevinirim.

  15. Deniz diyor ki:

    merhabalar, emeğinize sağlık! ben, php yi öğrenmeye yeni başladım, editör olarak da php designer 8 kullanıyorum. bu html form kısmını nasıl kullanacağımı anlamadım arayüz nasıl tasarlanır? oradaki satırları kopyala yapıştır yapınca her bir satırı hata verior da, bunun önüne geçebilmek için ne yapmam lazım? saygılarımla…

  16. webmaster forum diyor ki:

    güzel paylaşım olmuş teşekkürler..

  17. hd full izle diyor ki:

    Bu açıklayıcı örnekler için teşekkürler üstat ;) sitenizi takipteyim.

  18. Hasan Yılmaz diyor ki:

    Bu güzel ve bilgi verici paylaşım için çok teşekkürler, devamını bekliyoruz.

  19. Sky Han diyor ki:

    Çok teşekkür ederim işime yarayan kısımları aldım

  20. HAKAN diyor ki:

    formdaki veriler diğer sayfaya gitmiyor sorun ne olabilir sizce

  21. Cmatrax diyor ki:

    ilk baştaki html kodu 3 ayrı texten 3 sayı girişi oluyor sadece

  22. fufi diyor ki:

    Benim soyle bir sorunum var profil duzenle sayfasında askerligini yaptın mı bolumunu 3 secenekli yapamiyorum 2 secenekte sorun yok ama 3 uncuyu nasil yapacagimi bulamadim.

    <option value="1" >Yaptım
    <option value="0" >Tecilli

    Bu sekilde kod calisiyor bunu 3 secenekli nasil yaparim?

  23. TheŞafak diyor ki:

    Php konusunda oldukça yalın, sade ve anlaşılır anlatımlardan olmuş. Her seviyeden yazılımcının anlayabileceği şekilde anlatımlar daha çok hoşuma gidiyor. Kısacası Teşekkürler… :)

  24. muhammet diyor ki:

    Merhabalar bir php formunun ne kadar sürede doldurulup action yani gönderme işlemi yapıldığını nasıl buluruz.

    • Musa Avcı diyor ki:

      Forma gizli bir eleman ekleyip, onda da formun oluşturulma zamanını saklayıp formu gönderdikten sonra buradan gelen zamanla farkı hesaplayıp yapabilirsiniz.

      Örnek form:

      ...
      <input type="hidden" name="start_time" value="<?php echo time() ?>"> 
      ...
      

      Formu postladığınız sayfada:

      // ...
      $start_time = $_POST['start_time'];
      $diff = time() - $start_time;
      
      echo 'Formu ' . $diff . ' saniye içerisine doldurdunuz';
      // ...
      
  25. Taner diyor ki:

    Merhaba,

    Sayfalarınızdan bir çok şey öğrenmiş bulunuyorum bunlar için teşekkürler.

    Belki bana yardım edebilrisinz. Şimdi ben bir form sayfası tasarladım. Ancak bu spiderlar ve spam yollayan programlardan kurtulmak istiyorum. Onun için resimli güvenlik kodu oluşturdum. ancak resimin sayfada çıkmaması yada kişinin bunu okuyamamasına karşılık resimi yenile diye bir link koydum ve bu linki tıkladığında herşey güzel resim değişiyor.
    Ama kullanıcı olurya önce forma bilgi girer ise ve sonra resimin okunamadığını fark eder ise resmi değiştir dediğinde formu resetlemiş oluyor. Şimdilik buraya bir Submit butonu koyup olayı çözdüm ama güzel görünmüyor gözüme.

    teşekkür ederim

    • Musa Avcı diyor ki:

      formu resetlemek ve sayfayı yenilemek yerine aşağıdaki kodla sadece güvenlik resminin yenilenmesini sağlayabilirsin;

      <img src="guvenlik_resmi.php" id="guvenlik">
      <a href="javascript:;" onclick="document.getElementById('guvenlik').src='guvenlik_resmi.php?' + Math.random()">Yenile</a>
      
  26. Yusuf Backhen diyor ki:

    Eline Sağlık Hocam Süper Anlatım .

  27. metin diyor ki:

    merhablar konudan bağımsız bir şey sorayım
    şu paylaşımı içine yaptığınız siyah ekran bir div etiketimi yoksa özel birşey mi php ile yazdığım bir safada echo içinde php kodlarını nasıl gösterebilirm

  28. Musa diyor ki:

    elinize saglık ya adaş bişeyi anlamadım onu soracaktıkm

    panel.php kodlarını vermişsiniz orda if i açmışsınız fakar ardından iki defa else demişsiniz şu kısım

    } else {
    session_destroy(); // bilgileri yanlış olduğu için sessionlar silinir
    echo ‘Bilgileriniz yanlış, buraya yanlızca giriş yapmış kişiler girebilir';
    }
    } else {
    echo ‘Sadece giriş yapmış kişiler görebilir';
    }
    ?>

    neden böyle yapmışsınız bir daha else yazmamızın ne anlamı var. yazmasak ne olur?

  29. Beykan diyor ki:

    Hocam , kontrol.php’de zaten bilgiler doğruysa session oluşturuyoruz.Panel.php’de if($_SESSION['kullanici'] == ‘musa’ && $_SESSION['sifre'] == ‘123456’) { bu kısım gereksiz gibi geldi.

    • Musa Avcı diyor ki:

      Tespitiniz doğru, örnek bayağı eski. Yeni bir session kullanımı örneği hazırlamam gerekiyor. Bu hali de çalışıyor fakat geliştirilebilir, bazı ufak gereksiz kısımları var sizin de fark ettiğiniz gibi.

  30. Beykan diyor ki:

    Kusura bakmayın spam gibi oluyor ama hala çözememişim.Hocam kısaca tekrar session kullanıcı adı şifre kontrolünü neden yapıyorsunuz açıklayabilir misiniz?

  31. nikos diyor ki:

    <?php
    if(isset($_POST['ism'])&&isset($_POST['surname'])&&isset($_POST['username'])&&isset($_POST['pass'])){
    $ism=$_POST['ism'];$soys=$_POST['surname'];$usr=$_POST['username'];$parol=$_POST['pass'];
    if(empty($ism)||empty($soys)||empty($usr)||empty($parol])){
    echo 'cant be null';
    }
    else{
    echo 'name : '.$ism.'’.’surname : ‘.$soys;
    }
    }
    ?>

    bu sekilde yazdim kodlari ama calismiyor lutfen yardimci olur musunuz cildirmamak elde degil

  32. ferhat diyor ki:

    kardeş ben senin kodlarının aynısını yapıyorum her seferinde kontrol.php’de bir komut yanlış çıkıyor çok uğraştım ama sorunu çözemedim daha sonra senin kodlarının aynısını yazıyorum yine’de aynı sorun kontrol.php kısmında ” lütfen formu kullanın ” yazıyor.

Bir Cevap Yazın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>