2009-09-03 55 views
258

thể trùng lặp:
PHP detecting request type (GET, POST, PUT or DELETE)Kiểm tra xem một yêu cầu là GET hoặc POST

này phải là một điều dễ dàng.

Tôi có một tập lệnh và trong tập lệnh tôi muốn xác định xem yêu cầu có đến phương thức GET hoặc POST hay không.

Cách chính xác để làm điều đó là gì?

Tôi đang nghĩ đến việc sử dụng một cái gì đó như thế này

if (isset($_POST)) { 
    // do post 
} else { 
    // do get 
} 

Nhưng sâu trong trái tim của tôi, tôi không cảm thấy đây là một cách đúng đắn. Bất kỳ ý tưởng?

+0

Tại sao bạn không thể thử $ _REQUEST [ "variable_name"] nếu bạn nhắm mục tiêu biến chế biến không phân biệt loại yêu cầu? –

+3

@AnoopPete - bởi vì đó không phải là những gì đã được hỏi. $ _REQUEST sẽ chấp nhận GET, POST, PUT, DELETE (bất cứ điều gì). Không chỉ là thực hành khủng khiếp này, nó có thể dẫn đến những rủi ro an ninh. Hãy tưởng tượng logic của bạn chỉ đơn giản là mong đợi một phương thức POST hình thức, nhưng bạn cho phép bất kỳ/tất cả các phương thức được chấp nhận. Điều đó có thể có hậu quả nghiêm trọng trong tay kẻ xấu. – Marcus

+0

hãy thử sử dụng tính năng này, nó sẽ giúp bạn nhận được hoặc gửi bài nếu ($ _REQUEST ["name"] || $ _REQUEST ["tuổi"]) { echo "Chào mừng". $ _REQUEST ['name']. "
"; echo "Bạn đang". $ _REQUEST ['tuổi']. " tuổi."; thoát(); } – sarvesh

Trả lời

639

Better $_SERVER['REQUEST_METHOD']:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // … 
} 
+0

@Gumbo chúng ta cần '===', điều gì sẽ xảy ra nếu tôi sử dụng '== ' –

+3

Bạn có thể sử dụng' === '* hoặc *' == '. Trước đây chỉ là thực hành tốt, vì nó kiểm tra xem các biến có 'giống hệt' hay không. (EG: '5 == '5'' là' true', nhưng '5 ===' 5'' là' false') – Justin

+2

Cũng xem xét trả lại 405 nếu nó không phải là GET hay POST. nếu ($ _SERVER ['REQUEST_METHOD'] === 'POST') { // đăng bài } elseif ($ _SERVER ['REQUEST_METHOD'] === 'GET') { // do get } else { http_response_code (405); die(); } –

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