문제

PHP에 저자가있는 웹 사이트가 있는데, 사용자가 오류를받을 때마다 다른 페이지로 리디렉션됩니다 (사용 header(Location:...)) 및 오류 ID를 URL에 넣어 어떤 오류가 표시 될지 알 수 있습니다.

예 : 사용자가 제품 페이지에 액세스하려고하지만 해당 항목을 더 이상 사용할 수없는 경우 이전에보고 있던 항목 범주로 다시 리디렉션하고 URL에 지정된 오류 ID를 기반으로 오류를 표시합니다.

www.example.com/view_category.php?product_category_id=4&error_id=5

이 접근법에 대해 내가 좋아하지 않는 두 가지가 있습니다.

  1. URL에 error_id를 표시합니다.
  2. 페이지가 새로 고침되면 오류가 여전히 표시됩니다.

페이지가로드 된 후 나머지 변수를 그대로 두는 동안 URL에서 특정 $ _get 변수를 깨끗하게 제거하는 방법이 있습니까?

아마도 modrewrite 또는 페이지 자체로 다시 리디렉션을 사용하고 있지만 URL에서 Error_ID를 제거하거나 $ _session 변수를 사용하고 Error_ID를 URL에 넣는 것을 피하는 것입니다. 당신의 생각?

나는이 커뮤니티로부터 많은 것을 배우고 있으며, 질문을 제기했다면 새로운 것을 배우거나 스크립팅을 처음 접했기 때문에 다양한 아이디어를 얻을 수 있다고 생각했습니다.

도움이 되었습니까?

해결책

아니요, 적어도 페이지 새로 고침이없는 것은 아니지만 어쨌든 데이터를 잃게됩니다.

임시 세션 변수를 사용하는 것이 좋습니다.

if ( /* error condition */ )
{
  $_SESSION['last_error_id'] = 5;
  header( 'Location: http://www.example.com/view_category.php?product_category_id=4' );
}

그런 다음 View_category.php에서

if ( isset( $_SESSION['last_error_id'] ) )
{
  $errorId = $_SESSION['last_error_id'];
  unset( $_SESSION['last_error_id'] );

  // show error #5
}

다른 팁

그렇습니다 $_GET PHP에서 ...

      varToRemove = "anyVariable";

      foreach($_GET as $variable => $value){
        if($variable != varToRemove){
           $newurl .= $variable.'='.$value.'&';
        }
      }

      $newurl = rtrim($newurl,'&');

그런 다음 $ newurl을 링크에 넣습니다.

pageurl?something=something&<? echo $newurl; ?>

나는 그것이 오래된 게시물이라는 것을 알고 있지만, 다른 프로그래머는 그것을 검색 할 수 있습니다!

먼저 데이터베이스에 오류를 기록하십시오 :)

그런 다음 쿠키 또는 세션 변수를 설정 한 다음 사용자를 안전한 페이지로 리디렉션하십시오. 해당 페이지가로드되면 변수를 확인하고 오류를 표시 한 다음 쿠키 또는 세션 배열에서 변수를 삭제하십시오.

한 가지 방법은 비교하는 것입니다 HTTP_REFERER 이랑 SCRIPT_NAME. 사용자가 새로 고침을 쳤다면 동일하게 될 것입니다.

빠른 해킹 : 당신도 가질 수 있습니다 imploded()'D on "&"에서 $_SERVER['QUERY_STRING'] 그 문자열을 조작하는 변수 explode()'D 뒤로.

이 접근법이 작동하지 않습니까?

<?php
    $params = array_diff($_GET, array("variable_name" => $value));
    $new_query_string = http_build_query($params);
?>
    <script>window.history.pushState('verify_email', 'Verify Email', '?<?php echo $new_query_string; ?>');</script>

나는 같은 문제가 있었다
노력하다 : http://www.azazia.com/kb/entry/26/

if (!empty($_GET['passvar'])) {
    unset($_GET['passvar']);
    echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=".$_SERVER['PHP_SELF']."\" >";

}

나를 위해 완벽하게 일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top