Form bilgi hatırlayarak

3 Cevap php

Bu daha önce de sorulmuş özür dilerim ama benim durumum biraz farklı hissediyorum ...

Ben (onay kutularını, açılan çıkışlar, metin kutuları ve textareas içeren 50 soru) gibi büyük bir form var

Bir kullanıcı, bir form gönderir ve doğrulama sayfasında bir hata atar, onlar girilen bilgi tutmak için kolay bir yolu var mı?

Benim intitial formu form.php üzerinde ve bir şey ben bir hata numarası (örn. form.php ile form.php geri kullanıcı gönderir benim doğrulama kodu var form_posted.php çalıştırılan önce sonra form eylemi, form_posted.php olduğunu ? hatası = özellikle herhangi bir sorun yoktu 3) eğer. Bu, ile yapılır

header("form.php?error=3")

böylece im zaman geri form.php üzerinde yayınlanan değişkenler var mı? sayfa özellikle herhangi gönderdi değişkenleri ile gönderilen değildi Tho bile.

Bu durumda eğer Ayrıca, daha önce ne bir metin değerini yapma gibi tamamen güvenli?

gibi <input type="text" value="php echo $_POSTED["username"] ?>">

3 Cevap

Sen sessions bu işlemek için kullanmalısınız. Form işleme kodunda, bir oturum değişkeni örneğin içine, (that you recognise) $ _POST diziden her elemanını ayarlayın:

session_start();

$_SESSION["myField"] = $_POST["myField"];
$_SESSION["myField2"] = $_POST["myField2"];

(Bir hata varsa, örneğin) ilk form sayfasına geri yönlendirme Şimdi, eğer, siz örneğin kullanabilirsiniz:

<input type="text" name="myField" value="<?php echo $_SESSION["myField"]; ?>" />

için alanını önceden doldurmak. Eğer set oturum değişkenleri form kullanılabilir olduğundan emin olmak için form sayfası üstüne <?php session_start(); ?> eklemeniz gerekir.

Geri yerine sadece tekrar görüntüleme form sayfasına kullanıcıyı yönlendirmek gerekiyorsa oturumları yararlıdır. Muhtemelen mümkünse kullanıcıyı yönlendirmek için değil sadece daha iyi olurdu. Bu önbelleklerini gelince istekleri yapmak GET daha POST istekleri genellikle daha az sorunları var. Bazı tarayıcılar kendi önbellek en iyimser biraz olmanın suçlu ve o zaman zaten yapmadıysanız eğer sayfa için önbellek bilgi eklemek gerekiyor.

Ayrıca yenileme düğmesi ne yapacağı kendi zihniyetini bozmayacak daha iyi olurdu. Bir kullanıcı olarak, ben sayfa% 99 zaman yenileyin sayfa bana aynı çıktıyı vermek için bekliyoruz. (Önemli istisnalar hala resubmission iyi yanıt gerektiğini her ikisi de CAPTCHA ve kayıt formları ile biçimleridir). Onlar formu yeniden istediğinizden emin olan tarayıcıların çoğu kullanıcı soracaktır.

Eğer oturumları kullanmak istiyorsanız, her iki sayfada session_start () fonksiyonunu kullanmak için ihtiyacımız olacak. Form sayfasında oturum bilgilerini almak ve teslim sayfada bir oturumu kaydetmek için. Ben bir oturum değişkeni içine tüm $ _POST dizi saklanması tavsiye etmem, orada ne olduğunu bilmiyorum ya da ne kadar yer alacağım. Sen $ _SESSION $ _POST informtion saklamak için nasıl richsage cevabı bakabilirsiniz. Ayrıca bir dizi istediğiniz alanları saklamak ve böylece gibi bilgileri kaydetmek için dizi kullanarak düşünebilirsiniz:

$allowed_fields = array('name', 'company', 'email');
foreach($allowed_fields as $field) {
  if(isset($_POST[$field])) {
    $_SESSION[$field] = $_POST[$field];
  }
}

Geri formda çıktılamak zaman htmlspecialchars'dan gibi bir şey () veya Htmlentities (şöyle) "> htmlentities () ile çıkış kaçmak için emin olun:

<input type="text" name="myField" value="<?php echo htmlspecialchars($_SESSION['myField']); ?>" />

Aksi takdirde kod XSS (Cross Side Scripting) için şüphelenilemeyen olacak demektir.

Oturumlar ne ihtiyaç vardır. Okumak için çekinmeyin fine manual :)