PHP - Yönlendirme Sonrası Al (PRG)

Carissa

Administrator
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,439
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,280
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 6 Gün
Başarım Puanı
1,051
MmoLira
695,092
DevLira
234
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

PHP'de PRG, "Post/Redirect/Get" (Gönder/Yönlendir/Al) anlamına gelir. Bir formun gönderildikten sonra tekrar gönderilmesini önlemek için tasarlanmış yaygın olarak kullanılan bir tekniktir. Bu tekniği, PHP'de yinelenen form gönderimlerini önlemek için kolayca uygulayabilirsiniz.

Genellikle bir HTML formu, verileri sunucuya POST yöntemiyle gönderir. Sunucu betiği, arka uç veritabanına yeni bir kayıt eklemek veya verileri almak için bir sorgu çalıştırmak gibi daha fazla işlem için verileri alır. Kullanıcı yanlışlıkla tarayıcıyı yenilerse, aynı form verilerinin tekrar gönderilme olasılığı vardır ve bu da muhtemelen veri bütünlüğünün kaybolmasına yol açar. PHP'deki PRG yaklaşımı, bu tuzağa düşmemenize yardımcı olur.

Örnek

Başlamak için, basit bir HTML formu oluşturan ve bunu POST yöntemiyle kendisine geri gönderen aşağıdaki PHP betiğini ele alalım. Kullanıcı verileri doldurup gönderdiğinde, arka uç betiği verileri alır, sonucu oluşturur ve boş formu tekrar göstermek için geri döner.

PHP:
<?php
   if (isset($_POST["submit"])) {
      if ($_SERVER["REQUEST_METHOD"] == "POST")
         echo "First name: " . $_REQUEST['first_name'] . " " . "Last Name: " . $_REQUEST['last_name'] . "";
   }
?>

<html>
<body>
   <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
      First Name: <input type="text" name="first_name">  <br/>
      Last Name: <input type="text" name="last_name" />
      <button type="submit" name="submit">Submit</button>
   </form>
</body>
</html>

Sunucunun çalıştığını varsayarak yukarıdaki script belge kök klasörüne yerleştirilir ve tarayıcıda ziyaret edilir.

Verileri doldurun ve gönderin. Tarayıcı sonucu yankılar ve formu yeniden işler. Şimdi tarayıcı sayfasını yenilemeyi denerseniz, aşağıda gösterildiği gibi bir uyarı açılır:


Devam tuşuna bastığınızda aynı veriler tekrar gönderilir.

Sorun aşağıdaki şekille anlaşılabilir:


Sorunu önlemek için PHP betiğinde aşağıdaki adımlar izlenir:

  • HTML formundan önce gelen PHP betiği yeni bir oturum başlatır.
  • Formun POST metoduyla gönderilip gönderilmediğini kontrol edin.
  • Eğer öyleyse, form verilerini oturum değişkenlerinde saklayın.
  • Tarayıcıyı bir sonuç sayfasına yönlendirin. Bizim durumumuzda, aynı sayfadır. Çıkış komutuyla, daha fazla kod yürütülmediğinden emin olmak için bu betiği sonlandırın.
  • PHP, REQUEST yönteminin POST olmadığını bulursa, oturum değişkenlerinin ayarlanıp ayarlanmadığını kontrol eder. Ayarlanmışsa, formun yeni kopyasıyla birlikte işlenirler.
  • Artık form yenilense bile yeniden gönderme ihtimalini başarıyla ortadan kaldırdınız.

Örnek

İşte PRG tekniğini kullanan PHP kodu:

PHP:
<?php
   session_start();
   if (isset($_POST["submit"])) {
      $_SESSION['fname'] = $_POST['first_name'];
      $_SESSION['lname'] = $_POST['last_name'];
      header("Location: hello.php");
      exit;
   }
   if (isset($_SESSION["fname"])) {
      echo "First name: " . $_SESSION['fname'] . " " . "Last Name: " . $_SESSION['lname'] . "";
      unset($_SESSION["fname"]); unset($_SESSION["lname"]);
   }
?>

<html>
<body>
   <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
      First Name: <input type="text" name="first_name">  <br />
      Last Name: <input type="text" name="last_name" />
      <button type="submit" name="submit">Submit</button>
   </form>
</body>
</html>
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)