• 16-08-2009, 04:46:35
    #1
    ...
  • 16-08-2009, 04:49:01
    #2
    Db'e kayıt yaptırmadan önce sorgulatma yapın.
    Eğer o veri sql'de mevcutsa ekleme değilse ekle yaparsın.
  • 16-08-2009, 15:43:08
    #3
    3 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:15
    #4
    Bü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:07
    #5
    en 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.