Yenile deyince tekrar DB 'ye kaydetmesin (?)
4
●658
- 16-08-2009, 15:43:083 sayfa oluşturun,
a.php, b.php ve c.php olsun
a.php de form olsun verileri alsın.
b.php de db kaydı yapılsın ardından header ile c.php ye yönlendir ve bir get değişkeniyle durum 1 - 0 ata.
eğer sorunsuzsa db aktarımı 1 gönder değişkeni ve c.php de başarılı yazısı çıksın, hata varsa 0 gönder hata oluştu yazsın.
böylece c.php yi yenilese bile sadece uyarı çıkar db kayıt b.php de kaldığı için.
elle b.php ye girmeye çalışsa POST lar geçersiz olduğundan boş veri kayıt yapmaz.. - 16-08-2009, 16:39:15Bütün bu işlemlerin tamamı tek dosya ile de yapılabilir. a,b,c gibi alfabeyi dizmeye gerek yok.
En basit haliyle form.php dosyası;
<?php if($_GET['durum'] == 'kayit'){ # veritabanı kayıt işlemlerini buraya yaz //Kayıt işlemi başarılı ise # header('Location: form.php?durum=basarili'); //Kayıt işlemi başarısız ise # header('Location: form.php?durum=basarisiz'); }elseif($_GET['durum'] == 'basarili'){ echo 'form başarıyla kaydedildi.'; }elseif($_GET['durum'] == 'basarisiz'){ echo 'form kaydedilemedi.'; }else{ //ziyaretçinin göreceği formun kodlarını buraya yaz. //<form method="post" action="form.php?durum=kayit"..... //şeklinde olacak } ?> - 16-08-2009, 20:27:07en son yapılan kaydı sessionda bir dizi halinde tutup, her kayıt yapılışında formdan gelen bilgiler ile sessiondaki verileri eşleştirerek de yapabilirsin;
<?php session_start(); $Ad = htmlspecialchars($_GET["Ad"]); $Soyad = htmlspecialchars($_GET["Soyad"]); function Ekle($_Ad,$_Soyad) { $_EkleIzin = false; if((string)$_SESSION["SonKayit"]=="" || (string)$_SESSION["SonKayit"]==null) { $_EkleIzin = true; } else { $_Bolunmus = split('®',(string)$_SESSION["SonKayit"]); if($_Bolunmus[0]!=$_Ad || $_Bolunmus[1]!=$_Soyad) { $_EkleIzin = true; } } if($_EkleIzin) { # Ekleme İşlemleri $_SESSION["SonKayit"] = $_Ad.'®'.$_Soyad; echo'Ekledi'; } else { echo'Eklenmedi'; } } Ekle($Ad,$Soyad); ?>bu betikte son gelen veri parçalarının herhangi biri, bir öncekinden farklı ise ekleme işlemine izin verir.
bu şekilde sadece yenileme değil, geri butonuna basıldığında formdaki verilerin tekrar post edilmesi halinde de veriler var ise ekleme işlemi iptal edilebilir.
bunu basit anlamıyla yazdım fakat üzerinde biraz daha çalışarak 1-2 alan için değil bir diziye bağlı olarak gelen bütün alanları kontrol edip her ekleme işlemini kontrol edebiliriz. db ye gidip kayıtları kontrol etmek yerine sessionda tutarak en son kaydı daha hızlı bir biçimde kontrol edebiliriz.