2012-08-31 19 views
5

Olası Çoğalt:
PHP header() redirect with POST variablesPHP Başlık Yer

Ben form verilerini başka komut sunulmadan bir senaryo yazıyorum. İkinci betiğin gönderilen $_POST verilerinde hata denetimi gerçekleştirmesini istiyorum ve her şey yolundaysa, verileri işleyin. Verilerin hataları varsa, ziyaretçiyi form sayfasına geri döndürmek için header('Location: http://www.example.com/script.php'); kullanıyorum.

Yapmakta olduğum sorun, formun yapışkan olmasını istiyorum. Doğru veriye sahip alanlar, kullanıcının içine koyduğu değerleri korur. Açıkçası, bu değerleri almak için $_POST dizisine erişmem gerekiyor. Ancak, bu, header() çağrısı, ziyaretçiyi forma geri gönderdiğinde çağrı yok edilir gibi görünüyor.

$_POST verilerini hala korurken, ziyaretçiyi başka bir sayfaya yönlendirmek için Başlık öğelerini kullanmanın bir yolu var mı?

Şimdi böyle kullanıyorum: header('Location: http://www.example.com/add.php?id='.$id.'&name='.$name.'&code='.$code.'&desc='.$description.''); ve $_GET olarak erişiliyor.

Aynı şey için header('location: xxx') numaralı POST kullanabilir miyim? sadece çok senin hata sayfasının üst kısmında session_start() var unutmayın, $_SESSION['submitted_data'] değişkenden yükleyerek girişlerine içine değerleri yüklemek sonra

session_start(); 
$_SESSION['submitted_data'] = $_POST; 

Ve:

+0

http://www.php.net/manual/en/book.session.php – DaveRandom

+0

[$ _POST 'öğesini manuel olarak ayarlayabilirsiniz) (http://stackoverflow.com/questions/3418044/setting-post- yeniden yönlendirmeden önce tekrar-form-kullanarak-form). – Havelock

+0

Neden gönderi verilerini saklamak için oturum değişkenini ayarlamıyorsunuz? ? – kushalbhaktajoshi

cevap

2

Bir oturumda $_POST verileri depolayabilir .

15

Bu 'yapışkan form' elde etmenin en iyi yolu bir oturum kullanmaktır. Bunun için

<?php 
session_start(); 
//use $_SESSION like you would the post data 
?> 
0

Kullanım sessions:

<?php 
session_start(); 
$_SESSION = $_POST; 
//do error checking here 
//if all is valid 
session_write_close(); 
header('Location: *where you want your form to go*'); 
die; 
?> 

ve bunu gibi kullanabilirsiniz yönlendirme sayfasına

. $ _POST verileri alan bir komut olarak

<?php 
if (!empty($_COOKIE[session_name()])) { 
    // we only start session if there is a session running 
    session_id() || session_start(); 
} 

if (empty($_POST) && !empty($_SESSION['POST'])) { 
    // make sure you're not overwriting 
    $_POST = $_SESSION['POST']; 
} 
// and so on just like you have $_POST filled 

: Form sayfasında

<?php 
// after you're done with checking and stuff 
session_id() || session_start(); 
$_SESSION['POST'] = $_POST; 
header('Location: /script.php'); 

Her iki komut işe oturumları için kaydetmek etki alanında olmalıdır. Konum başlığında göreceli URI kullanıyorsanız, her şey düzgün çalışmalıdır.