2011-09-01 30 views
5

Tôi đang phát triển tập lệnh php có chứa biểu mẫu html.Chức năng "header()" php có bỏ đặt biến toàn cầu không?

Nếu không phải tất cả các trường được điền một cách đúng kịch bản sẽ báo hiệu một lỗi và chuyển hướng trở lại cùng một trang với chức năng tiêu đề thiết lập một biến lỗi để vâng với method get:

header("Location: registration_page.php?error_empty=yes"); 

của tôi script có một phần xử lý lỗi trong đó nó làm nổi bật các trường có chứa một lỗi, nhưng tôi muốn giữ giá trị của các trường được điền chính xác.

Tôi đang thực hiện tính năng này như tôi tìm thấy trong câu hỏi này khác:

How can I keep a value in a text input after a submit occurs?

nhưng vấn đề là khi trang mở lại các hình thức sẽ không chứa các giá trị cũ.

Câu hỏi của tôi là: không ai biết chức năng tiêu đề có hủy bỏ biến toàn cục trong mảng $ _REQUEST không?

Và bạn có biết tôi có thể sử dụng loại giải pháp nào không?

Xin cảm ơn trước,

Matteo!

Trả lời

8

$_COOKIES sẽ vẫn được đặt, nhưng $_POST & $_GET sẽ bị hủy khi khách hàng chuyển sang trang mới. Nếu họ cần phải được giữ lại, trước tiên họ phải được lưu trữ vào $_SESSION trước khi gọi chuyển hướng.

session_start(); 
$_SESSION['last_post'] = $_POST; 
header("Location: http://example.com"); 
exit(); 

// On the redirected page, use the stored POST values and unset them in $_SESSION 
session_start(); 
if (empty($_POST) && isset($_SESSION['last_post'])) { 
    $post = $_SESSION['last_post']; 
    unset($_SESSION['last_post']); 
} 
else $post = $_POST; 
+0

sau khi bắt đầu phiên khi nào tôi nên hủy nó? khi tất cả các trường đã được điền thành công? – Matteo

+1

@Matteo 'session_destroy()' được gọi ngầm khi thực thi tập lệnh hoàn tất. Bạn không cần phải gọi nó trừ khi bạn có lý do để đóng phiên trước khi kịch bản được thực hiện. 'session_destroy()' _does not_ xóa các biến phiên. Tôi chỉ ngắt kết nối tập lệnh hiện tại khỏi phiên. –

+0

@Matteo xem phần bổ sung ở trên về việc xóa bài đăng được lưu trữ '$ _SESSION' sau khi sử dụng nó –

3

Có ai biết chức năng tiêu đề có hủy bỏ biến toàn cục trong mảng $ _REQUEST không?

Không, không. Cookie ($_COOKIE) sẽ vẫn còn.

Rõ ràng $_GET sẽ chứa bất cứ điều gì bạn có trong chuyển hướng (ví dụ: $_GET['error_empty'] = 'yes') and $ _POST` sẽ trống bởi vì bạn không đăng

Vì vậy, nó $_REQUEST sẽ là một sự kết hợp của $_COOKIE$_GET thông số mới bạn. thiết lập.


bạn có lẽ không nên sử dụng $_REQUEST anyway. xác định chính xác nơi bạn mong đợi các thông số yêu cầu của bạn là ...

2

Nó không, nhưng nó thực hiện một yêu cầu mới. Yêu cầu mới có nghĩa là $_REQUEST mới không nhất thiết có tất cả dữ liệu cũ. $_COOKIE sẽ vẫn ở đó nhưng $_GET$_POST sẽ là ý nghĩa mới mà $_REQUEST sẽ phản ánh điều đó. ($_FILES cũng sẽ trống và trong khi nó không có trong `$ _REQUEST, nó là một giá trị do người dùng cung cấp khác sẽ được đặt lại).

Nếu bạn muốn khôi phục các biểu mẫu, bạn sẽ cần phải hoặc là đưa tất cả các biến trong url trong tiêu đề, hoặc sử dụng $_SESSION hoặc setcookie và sau đó khôi phục từ $_GET, $_SESSION hoặc $_COOKIES.

+0

giá trị quá cũ sẽ không thể truy cập được nữa đó là lý do tại sao nếu việc sử dụng lệnh ? kết quả sẽ được sản phẩm nào? – Matteo

+0

'$ _FILES' đã bị xóa khỏi' $ _REQUEST' một thời gian dài trước đây. – NullUserException

+1

Đúng vậy. Bởi vì '$ _REQUEST' phụ thuộc vào đầu vào từ trình duyệt, nếu trình duyệt tạo một yêu cầu mới, thì' $ _REQUEST' bị làm trống. – cwallenpoole

Các vấn đề liên quan