PHP ile post edilen verilerin kaybolmadığı form yapımı

makale.baslik

Bu uygulama ile PHP’ de formu post ettiğinizde verilerin kaybolmadığı yapıyı öğrenmiş olacaksınız.

Bu uygulama ile PHP’de form yapısını yeni öğrenenler biraz daha geliştirme şansı bulacaklar. Bazı form uygulamalarında formdaki veriler aynı sayfada işleniyorsa formdaki verilerin kaybolması istenen bir durum değildir.

Bunu engellemenin ASP.NET’te yöntemi kolaydır. Hatta bir şey yapmanıza bile gerek yoktur. ASP.NET’te karşılığı ViewState olan yapı sizin yerinize verilerin kaybolmasını önleyecektir. PHP’de ise form verilerinin kaybolmasını istemiyorsanız verileri post olduktan sonra bir yerlerde saklayıp form işleminden sonra verileri form elemanlarında tekrar göstermeniz gerekiyor.

Bunun için gösterdiğim yöntemi de kullanabilirsiniz veya session (oturum)’da verileri saklayarak,  geri form elemanlarına yansıtarak da yapabilirsiniz.


 

Kendi örneğime gelecek olursak burada basit bir form oluşturdum. Tasarımın güzel durması içinde bootstrap kullandım. Aynı zamanda bilmeyenler içinde form elemanlarının bir çoğunu da (text, radio, select-option, checkbox ) kullanmaya çalıştım. Yapı çok basit post ile geren verileri form elemanlarında göstermeden önce değişkenlere atıyoruz ve daha sonra değerleri form elemanlarında gösteriyoruz. Bunu metin kutularında (texbox) yapması kolay ama diğer listeleme (select), radio buton, checkbox da yapması biraz daha karmaşık olabiliyor.

php kaybolmayan veri formu

Örnek uygulamada tek sayfa (index.php) kullandım ve gerekli açıklamaları da sayfanın içinde açıklama satırı olarak ekledim.

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Form</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>

<body>
<?php
/*Örnekte doğum yeri için illerin listesi tutulmaktadır.
Bunun için iller dizi oluşturdum.*/
$iller = array('Seçiniz', 'Adana', 'Adıyaman', 'Afyon', 'Ağrı', 'Amasya', 'Ankara', 'Antalya', 'Artvin',
    'Aydın', 'Balıkesir', 'Bilecik', 'Bingöl', 'Bitlis', 'Bolu', 'Burdur', 'Bursa', 'Çanakkale',
    'Çankırı', 'Çorum', 'Denizli', 'Diyarbakır', 'Edirne', 'Elazığ', 'Erzincan', 'Erzurum', 'Eskişehir',
    'Gaziantep', 'Giresun', 'Gümüşhane', 'Hakkari', 'Hatay', 'Isparta', 'Mersin', 'İstanbul', 'İzmir',
    'Kars', 'Kastamonu', 'Kayseri', 'Kırklareli', 'Kırşehir', 'Kocaeli', 'Konya', 'Kütahya', 'Malatya',
    'Manisa', 'Kahramanmaraş', 'Mardin', 'Muğla', 'Muş', 'Nevşehir', 'Niğde', 'Ordu', 'Rize', 'Sakarya',
    'Samsun', 'Siirt', 'Sinop', 'Sivas', 'Tekirdağ', 'Tokat', 'Trabzon', 'Tunceli', 'Şanlıurfa', 'Uşak',
    'Van', 'Yozgat', 'Zonguldak', 'Aksaray', 'Bayburt', 'Karaman', 'Kırıkkale', 'Batman', 'Şırnak',
    'Bartın', 'Ardahan', 'Iğdır', 'Yalova', 'Karabük', 'Kilis', 'Osmaniye', 'Düzce');

/*Formda kullandığımız her eleman için bir değişken oluşturup varsayılan değerleri ekliyoruz.*/
$ad = "";
$mail = "";
$cins = "Kadın"; //Cinsiyet kısmı için varsayılan değeri Kadın atadım
$dyili = 0;
$dyeri = 0;
$yuzme = "";
$kosma = "";

if ($_POST) //form post olduğunda çalışacak kodları buraya ekliyoruz
{
//posttan gelen değerlei değişkenlere atıyoruz.
    $ad = $_POST["ad"];
    $mail = $_POST["mail"];
    $cins = $_POST["cins"];
    $dyili = $_POST["dyili"];
    $dyeri = $_POST["dyeri"];

    /*diğer değişkenlerden farklı olarak checkbox değerini
      isset ile kontrol edip seçildiğinde değişkenin içine gerekli veriyi atıyoruz */
    if (isset($_POST["kosma"])) {
        $kosma = "Koşma";
    }

    if (isset($_POST["yuzme"])) {
        $yuzme = "Yüzme";
    }

}
?>
<h1>Başvuru formu</h1>
<form action="" method="post" class="col-md-4">
    <table class="table">
        <tr>
            <td>Ad Soyad</td>
            <!-- metin kutularında (textbox) değerin kaybolmaması için değişkende tuttuğumuz veriyi
            ($ad) value özelliğine (attribute) yazdırıyoruz. -->
            <td><input type="text" class="form-control" name="ad" maxlength="70" value="<?php echo $ad; ?>"></td>
        </tr>
        <tr>
            <td>Mail Adresi</td>
            <!--Ad soyad da olduğu gibi mailde de veriyi metin kutusunda göstermek için value özelliğinde yazdırıyoruz.-->
            <td><input type="text" class="form-control" name="mail" maxlength="70" value="<?php echo $mail; ?>"></td>
        </tr>
        <tr>
            <td>Cinsiyet</td>
            <td>
                <!--
                Burası önemli! radio butonu için cins değişkenindeki değere göre
                Kadın veya Erkek radio elemanına checked özelliği ekliyoruz. burada isteyen if else de kullanabilir
                ama kodlar uzar diye bu formatı tercih ettim.
                -->
                <label><input type="radio" name="cins" value="Kadın" <?php echo $cins == "Kadın" ? "checked" : "" ?>>
                    Kadın </label>
                <label><input type="radio" name="cins" value="Erkek" <?php echo $cins == "Erkek" ? "checked" : "" ?>>
                    Erkek </label>
            </td>
        </tr>
        <tr>
            <td>Doğum Yılı</td>
            <td>
                <select name="dyili" class="form-control">
                    <option value="0">Seçiniz</option>
                    <?php
                    /*
                    Doğum yılı içinde bir döngü yardımı ile liste elemanlarını (option)
                    ekliyoruz. Eğer bir değer seçilmiş ise bunu if yardımı ile kontrol edip
                    selected kodunu ekliyoruz ki o değer seçili gelsin.
                    */
                    $j = date("Y");//yılı verir
                    while ($j > 1920) {
                        if ($j == $dyili)
                            echo "<option value='$j' selected>$j</option>";
                        else
                            echo "<option value='$j'>$j</option>";
                        $j--;
                    }

                    ?>
                </select>

            </td>
        </tr>

        <tr>
            <td>Doğum Yeri</td>
            <td>
                <select name="dyeri" class="form-control">
                    <?php
                   /* Doğum yeri içinde doğum yılı ile aynı mantığı kullanıyoruz. 
                     Tek farkı illerin değerleri diziden çekiliyor.
                   */
                    for ($i = 0; $i < 82; $i++) {
                        if ($dyeri == $i) 
                            echo "<option value='$i' selected>" . $iller[$i] . "</option>";
                        else 
                            echo "<option value='$i'>" . $iller[$i] . "</option>";
                    }

                    ?>
                </select>

            </td>
        </tr>
        <tr>
            <td>Hobiler</td>
            <td>
              <!-- Checkbox için de oluşturulan değişkenlerin içeriğini kontrol ediyoruz.
                   eğer değişkenler boş değilse seçilmiş anlamnına geliyor. -->
                <label><input type="checkbox" name="kosma" <?php if ($kosma != "") echo "checked" ?> > Koşma</label><br>
                <label><input type="checkbox" name="yuzme" <?php if ($yuzme != "") echo "checked" ?>> Yüzme</label>
            </td>

        </tr>

        <tr>
            <td></td>
            <td><input type="submit" name="gonder" value="Gönder" class="btn btn-primary"></td>
        </tr>
    </table>
</form>

<div class="col-md-12">
    <?php
    // En son alınan verileri altta yazdırdım siz isteğinize göre bunu değiştirebilirsiniz. 
    if ($_POST) {
        echo "Adı: $ad <br>Mail Adresi: $mail <br>Cinsiyet: $cins <br>Doğum Yılı: $dyili <br>Doğum Yeri: " . $iller[$dyeri] . "<br>Hobiler: $kosma $yuzme ";
    }

    ?>
</div>
<p>&nbsp;</p>
</body>
</html>

Formda doğum yeri ve doğum tarihini özellikle ekledim bunlarda çoğu uygulamada kullanılabilir. Gerektiğinde buradan alıp geliştirip istediğiniz form yapısında özellikle iş başvuru formu, yeni kullanıcı oluşturma formu gibi uygulamalarda kullanabilirsiniz.

PHP ile MySQL veri tabanına bağlanıp, mysqli ile veri ekleme, silme, düzenleme ve listeleme işlemleri“ yazımdan da yararlanarak bu form yapısını veri tabanına da bağlayarak güzel uygulamalar geliştirebilirsiniz.

İyi kodlamalar.

Uygulama dosyaları ve veri tabanı dosyasını indirmek için: KaybolmayanForm.zip

Çalışmanın demo uygulaması için tıklayın.

Paylaş:

Yorumlar

  1. mesut bey merhabalar size bu konuyla ilgili ama farklı bir soru sormak istiyorum diyelim ki bu formda bir de file alanımız var ve adsoyad kismi slug bir şekilde bu image dosyasının ismi olarak değiştirilmis olsun. örn ayse-isil-kandemir.jpg sorum update kısmında ben ismi değiştirip file bölümünü boş bıraktığım zaman bu değişen adsoyad nasıl update edilmeyen isme eklenir. örn adsoyad isil-kandemir ama file hala ayse-isil-kandemir.jpg bunu nasıl isil-kandemir.jpg olarak değiştirebilirim acaba

    1. Tam olarak anlayamadım.