2012-02-01 36 views
5

Khi tiếp tục Adding Values to a Query String in a URL, tôi có hộp tìm kiếm sẽ thêm đối số bổ sung vào URL hiện tại.Vượt qua URL hiện tại khi gửi biểu mẫu

http://example.com/?s=original+new+arguments&fq=category 

Mẫu mã trông như thế này:

<form id="FilterSearch" method="get" action="http://example.com/search_result.php"> 

đâu search_result.php chỉ là một trang mới, tôi tạo ra để phân tích nộp và chuyển hướng sử dụng các URL mới.

Làm cách nào để chuyển URL ban đầu tới search_result.php để tôi có thể thao tác URL?

EDIT # 1: Tôi đã thêm một đầu vào ẩn:

<?php $current_url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> 
<input type="hidden" name="current_url" value="<?php $current_url; ?>" /> 
<input name="send" id="send" type="submit" value="Search" /> 

đầu ra của tôi là chỉ thêm các đối số trang trình (search_result.php) và không phải là trang truy vấn dự định.

<?php 
if (isset($_GET['send'])){ 
       $searchField = urlencode($_GET['SearchField']); 
       $location = $_GET['current_url']; 
       $location = preg_replace($location, '/([?&]s=)([^&]+)/', '$1$2+'.$searchField); 
       header('Location: '.$location); 
       } 
?> 

Tôi đang truyền sai hoặc làm sai hoặc cả hai!

EDIT # 2: URL Output giống như:

http://example.com/wp-content/themes/child_theme/search_result.php?SearchField=newTerm&current_url=www.example.com%2F%3Fs%3DoldTerm%26searchsubmit%3D&send=Search 

EDIT # 3 Tôi lặp lại URL đầu ra và đó là chính xác. Tôi đã loại bỏ preg_match chỉ để xem liệu tôi có thể nhận được cùng một URL khi tôi xử lý biểu mẫu hay không. Thật thú vị, tôi nhận được một trang không tìm thấy. Tôi quyết định thêm http: // tiêu đề và nó làm việc:

header('Location: http://'.$location); 

Vì vậy, do đó, tôi tin rằng điều duy nhất sai ở đây là preg_replace.

+0

Dường như bạn cần thực hiện giá trị = "". Bạn cũng có thể sử dụng $ _SERVER ['HTTP_REFERER'] như dfsq gợi ý thay thế cho phương pháp này, nhưng nó không phải lúc nào cũng đáng tin cậy. –

+0

không hoạt động:/ – AlxVallejo

+0

Bạn có nhận được bất kỳ giá trị nào trong biến số vị trí $ của mình không? –

Trả lời

8

Tôi nghĩ bạn đang tìm kiếm đầu vào bị ẩn.

Something như thế này:

<input type="hidden" name="current_url" value="(Current URL here)" /> 

Sau đó truy cập vào nó giống như bạn làm bất kỳ thông số khác $ _GET hoặc $ _POST.


EDIT để đáp ứng chỉnh sửa:

Có thể bạn echo $location; die; sau dòng này:

$location = $_GET['current_url']; 

và cho tôi biết những gì mà đầu ra là gì? Điều này sẽ cho chúng tôi biết liệu thông tin đó có được chuyển không chính xác hoặc được xử lý không chính xác hay không.

+0

xem URL xuất của tôi – AlxVallejo

+0

Đã chỉnh sửa câu trả lời của tôi để khắc phục sự cố. –

+0

Xem EDIT # 3 (Tôi xin lỗi vì tất cả các chỉnh sửa!) – AlxVallejo

1

Chỉ cần sử dụng $_SERVER['HTTP_REFERER'] trong số search_result.php của bạn. Một tùy chọn khác là sử dụng đầu vào bị ẩn, nhưng tôi sẽ sử dụng tùy chọn đầu tiên.

+0

Tôi không đồng ý, người giới thiệu có thể không ổn định trên một số môi trường. Nếu đó là nỗ lực nhỏ để sử dụng đầu vào bị ẩn, hãy sử dụng phương thức đó thay thế. –

0

Cách tốt hơn để có URl hiện tại bạn tạo đầu vào bị ẩn và trong đó bạn chuyển URL hiện tại và bắt đầu máy chủ. I E.

<input type="hidden" name="cur_url" value="(your Current URL here)" /> 
Các vấn đề liên quan