• 30-09-2013, 13:19:35
    #1
    Arkadaşlar bir iletişim formum var.
    İletişim formumdaki verileri kaydete bastığımda veritabanına yazıyor.
    Arkasından o sayfada klavyeden f5 tuşuna bastığım anda "Yeniden form gönderme işlemini onayla" yazısı çıkıyor ve tamama basıldığında aynı veri ikinci kez ekleniyor.

    Bir kullanıcı birden çok kez iletişim formunu kullanabilir.Bu yüzden bu gönderilen veritabanında varmı veya yokmu diye kontrol edemiyorum.

    Peki bunun kontrolünü nasıl sağlarım? Yani sayfa refresh yapılarak ikinci kez post edilmesin.
  • 30-09-2013, 13:36:06
    #2
    işlem bittikten sonra header(location: ) ile yönlendirirsen bu sorun ortadan kalkar.
  • 30-09-2013, 13:55:38
    #3
    Irresistible adlı üyeden alıntı: mesajı görüntüle
    işlem bittikten sonra header(location: ) ile yönlendirirsen bu sorun ortadan kalkar.
    Yönlendirme olmazsa?

    Bu adresteki uygulama işinize yarayacaktır.
  • 30-09-2013, 13:58:10
    #4
    Güvenlik Kodu yap her postta değişeceği için hata verir
  • 01-10-2013, 04:15:21
    #5
    Formu kaydettikten sonra sessiona bir veri atarsınız. Şayet sessionda da bu veri ayarlanmamışsa veritabanına kaydetme işlemini yaparsınız. Ayarlanmışsa da zaten doldurdunuz gibi bir uyarı verirsiniz.
  • 01-10-2013, 10:44:46
    #6
    @msgr arkadaşın verdiği linkte gayet basit anlatılmış. Oradaki örnekten yola çıkarak şöyle basitleştireyim;

    <?php
            /*** sessionı başlat ***/
            session_start();
    
            /*** unique bir id belirle ***/
            $form_token = uniqid();
    
            /*** değişkeni session'a ata***/
            $_SESSION['form_token'] = $form_token;
    ?>
    
    <form method="post" action="yaz.php">
    <input type="text" name="first_name" placeholder="Adınız Soyadınız" />
    <input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
    </form>
    <?php
            /*** sessionı başlat***/
            session_start();
    
            /*** bütün değerlere değer verilmiş mi kontrol et ***/
            if(!isset($_POST['first_name'], $_POST['form_token'], $_SESSION['form_token']))
            {
                    $message = 'Geçersiz giriş';
            }
            /*** formdan gelen veri ile session verisi eşit mi kontrol et ***/
            elseif($_POST['form_token'] != $_SESSION['form_token'])
            {
                    $message = 'Erişim engellendi';
            }
            /*** isim soy isimi kontrol et (boş mu, uzunluğu 50 karakterden büyük mü)***/
            elseif(strlen(trim($_POST['first_name'])) == 0 || strlen(trim($_POST['first_name'])) > 50)
            {
                    $message = 'Hatalı isim soyisim';
            }
            else
            {
    
                    /*** mesajı belirle ***/
                    $message = 'Teşekkür ederiz ' . $first_name;
    
                    /*** session'u unset ediyoruz, yani kaldırıyoruz ***/
                    unset( $_SESSION['form_token']);
            }
    
    ?>
  • 01-10-2013, 11:01:15
    #7
    session değil cookie kullanın. session sunucuya kaydediliyor, cookie kullanıcının bilgisayarına. gereksiz yere tmp de session bilgisi tutulmasın