Post / yönlendirme / alın desen benim uygulanması ile sorun

4 Cevap php

Ben her zaman benim formları Post/Redirect/Get yöntemini kullanın. Benim formları genellikle hep kendilerine gönderin. Ben şeklinde bir hata var, ancak, herhangi bir yeni başlık göndermek yok. Bu yüzden kolayca bu gibi şeyler yapabilirim

<input type="text" name="email" value="<?php echo $this->input->post('email', '') ?>" />

PHP mevcut değilse 2 argümanlar, $ _POST anahtar ve varsayılan değer kolları sadece bir kütüphane fonksiyonudur.

Bu kimse şeklinde bir hata yaparsa, bu formu ikinci defa dolum zorunda kalmazsınız. Dezavantajı sayfayı yeniden kendi tarayıcısında onlara POST uyarı vermesidir.

Devlet (yani çerezler, oturum, veritabanı vb) için bir şey kullanmadan, bunu önlemek için yine de var mı

4 Cevap

Bunu yapmak için en iyi yolu başlık işlevini kullanın bulmak. Hiç bile kendisini doğrulama o başarısız olursa formuna geri dönmek için başlık yönlendirme kullanırım ihtiyaç dosya ne gönderebilirsiniz. Oturum veya başka bir ulaşılabilir değişkende post'd değerleri saklamak, bu nedenle daha önce girdiğiniz verilere erişebilir.

Header ("location: myscript.php") kullanırken; Bir çıkış dahil emin olun (); daha sonra aksi hala bir tazelede POST uyarı alırsınız.

myscript.php

if($_POST['submit'])
{
    //check for errrors

    if ($error)
    {
        $_SESSION['myPostVars'] = $_POST;
        header("location: myscript.php");
        exit();
    }
}

<form>
    // your form code
</form>

Düzenleme: Ben sadece oturumları kullanarak önlemek için soru düzenlenmiş olduğunu fark ettim.

Sen mesaj size () (başlığı üzerinden gönderilen dönmek ve sorgu dizesinde onları koymak istiyorum vars serialize olabilir

Oturumda devleti kaydetmeden Bunu önlemek için hiçbir yolu yoktur. Eğer bir hata karşılaştığınızda muhtemelen aşağıdaki gibi bir şey yapabilirsiniz:

  1. benzersiz bir kimliği oluşturmak
  2. Yukarıdaki benzersiz id tarafından anahtarlı oturumuna $_POST değişkeni kopyalamak
  3. Şimdi ne gibi yönlendirmek, ancak sorgu dizesi bir parçası olarak benzersiz id geçmek
  4. benzersiz kimliği isteği veya adı geçti değilse oturumda bu benzersiz id yerine doğrudan $_POST değişkeni erişen (hata durumları) aramak için kütüphanenizi güncellemek, sen 'doesn arıyor t varsayılan değerini kullanmak var
  5. isteği sonunda oturumu benzersiz kimliği girdisini kaldırın. Bu çok fazla çöp ile oturum kirletici kaydeder. Ayrıca kütüphaneye göre talep başında bu yapabilirdi

Ben böyle bir şey demek düşünüyorum:

function Value($array, $key, $default = false)
{
    if (is_array($array) === true)
    {
    	settype($key, 'array');

    	foreach ($key as $value)
    	{
    		if (array_key_exists($value, $array) === false)
    		{
    			return $default;
    		}

    		$array = $array[$value];
    	}

    	return htmlspecialchars($array);
    }

    return $default;
}

<input type="text" name="email" value="<?= Value($_POST, 'email', ''); ?>" />

Ayrıca read this tutorial isteyebilirsiniz.

Bu temelde doğru yapıyoruz. "Repost" uyarıları önlemek özellikle iyi bir yol diye bir şey yok.