2011-12-28 3 views
0

나는 웹 사이트를 운영하고 있습니다. 페이지 매김이 있습니다. 링크를 클릭하면 필요한 페이지로 연결되며 링크는 $_GET 변수 (a href="?pn=2")를 전달하고 올바르게 작동합니다. 내가 카테고리 링크를 추가 할 때

그러나 (또한 $_GET 변수 은 (a href="?sort=english")가 같은 페이지, 페이지에 가지 종류의 내용, 그것을 클릭에, 시스템은 단순히 URL을 무시하고 이전의 모든을 삭제 포함 . $_GET 년대 예를 들어

, 나는 2 페이지 (http://website.com/index.php?pn=2) 을에있어 다음 나는이 정렬 링크를 클릭하고 내가 얻을 것으로 예상하고있어이 (http://website.com/index.php?pn=2&sort=english)이지만, 내가 얻을 것은 이것이다 : (http://website.com/index.php?sort=english). 이전에 $_GET을 추가하는 대신 간단히 덮어 씁니다.

+1

미래의 지식을 위해 : 그들은'$ _GET '이 아닌 * 질의 매개 변수 *라고 부릅니다. 그것은 당신이 그들을 액세스하는 방법입니다. –

+0

먼저 기본 지식을 배우십시오. –

+0

http_build_query' 읽어주세요 – diEcho

답변

-1

새 링크를 만들 때 쿼리 매개 변수를 유지 관리해야합니다. 페이지의 링크는 다음과 같아야합니다.

<a href="?pn=<?= $_GET['pn'] ?>&sort=english">Sort by English</a> 

HTTP 프로토콜은 상태를 저장하지 않으며 이전을 기억하지 않습니다. PHP 또는 다른 방법 (쿠키 등)을 통해 이전 HTTP 매개 변수가 무엇인지 상기시켜야합니다. 귀하의 경우 위의 예에서와 같이 현재 페이지 번호가 무엇인지 상기시켜야합니다.

+1

해당 사항은 유효하지 않으며 (HTML'&'은 특별한 의미가 있습니다) 사이트를 [XSS 보안 취약점] (http://en.wikipedia.org/wiki/Cross-site_scripting)에 노출시킵니다. – Quentin

+0

이것은 당면한 질문과 관련이 없습니다. 그의 쿼리 문자열이 잘못된 이유를 설명하고 새로운 쿼리 문자열이 어떻게 보이는지 보여주는 예제를 제공하려고 시도했습니다. HTML 유효성과 XSS 보안 취약점은 그 주제의 주제가 아닙니다. – Jemaclus

+0

XSS 보안 취약점은 익스플로잇을 여는 예제 코드를 제공하자마자 관련이 있습니다. 코드의 무효에 대해서도 마찬가지입니다. – Quentin

4

쿼리 문자열만으로 구성된 상대 URI는 기존 쿼리 문자열 전체를 대체합니다. URL을 작성하여 기존 쿼리에을 추가하는 방법은 없습니다. 원하는 전체 쿼리 문자열을 작성해야합니다.

당신은 명시 적으로 추가하여 기존의 문자열을 유지할 수 있습니다 :

href="?foo=<?php echo htmlspecialchars($_GET['foo']); ?>&amp;bar=123" 
+0

고마워요!)) –

0

당신은 당신의 $_GET 배열을 반복하고 쿼리 문자열을 생성하는 함수를 만들 수 있습니다. 그런 다음 배열 $_GET을 변경하고이 쿼리 문자열을 생성하면됩니다.

의사 코드 (난 정말 여기에 PHP를 알고 있지만하지 않는 슬래시는 따라 할 수 있어야 좋은 예입니다) :

function create_query_string($array) { 
    $kvps = array(); 
    for ($key in $array) { 
     array_push($kvps, "$key=$array[$key]"); 
    } 

    return "?" . implode("&", $kvps); 
} 

사용법 :

$_GET["sort"] = "english"; 
$query_string = create_query_string($_GET); 
1

이 사용해보십시오 :

$_SERVER['REQUEST_URI']; 

this link에서 예를 볼 수 있습니다. 그리고 this link에 직접 시험해 볼 수있는 테스트 문서를 업로드했습니다. 위의이 줄을 인쇄합니다.

EDIT : URL의 현재 매개 변수를 가져 오는 데 도움이 될 수 있지만 해결책은 아닙니다. Quentin이 말한 것처럼 수동으로 전체 링크를 작성하고 각 매개 변수를 유지해야합니다.