Bir URL'den belirli bir $ _GET değişkeni kaldırmak için nasıl

7 Cevap php

PHP yazılmış bir web sitesi var nerede bir kullanıcı I kullanarak (header(Location:...)), bir başka bir sayfaya yönlendirmek ve görüntülemek için hangi hata biliyorum ki URL hata kimliğini koyacağız bir hata alır her zaman.

Örneğin Kullanıcı bir ürün sayfasına erişmek için çalışır ama bu madde ben daha önce de aradılar öğelerin kategorisine geri yönlendirme ve URL belirttiğiniz hata kimliği dayalı bir hata görüntüler artık mevcut değilse.

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

Ben bu yaklaşım hakkında sevmiyorum iki şey vardır:

  1. Bu URL error_id görüntüler.
  2. sayfa yenilendiğinde ise, hata yine gösterecektir.

Sayfa yüklendiğinde SONRA sağlam değişkenlerin kalanını bırakarak temiz bir URL'den belirli bir $ _GET değişkeni kaldırmak için bir yolu var mı?

Ben belki geri sayfanın kendisinde modRewrite veya bir yönlendirme kullanıyor ama URL'den error_id çıkarmadan veya $ _SESSION değişkeni kullanarak ve URL error_id koyarak kaçıyor düşünüyorum. Düşünceleriniz?

Ben gerçekten bu toplumun çok şey öğreniyorum ve ben yeni bir şeyler öğrenmek için ya da ben komut dosyası için oldukça yeni gibi bazı değişik fikirler almak mümkün olabilir soru yöneltilen olmadığını düşündüm duyuyorum.

7 Cevap

Bir sayfa yenileme olmadan en az değil ama sonra yine verileri kaybederim - Hayır, orada açıkça bunu yapmak için hiçbir yolu yoktur.

Siz geçici bir oturum değişkeni kullanarak daha iyiyiz.

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

Daha sonra, in view_category.php

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

  // show error #5
}

Öncelikle, veritabanı hata oturum :)

Bundan sonra, bir çerez veya oturum değişkeni ayarlayın ve daha sonra güvenli bir sayfaya yönlendirir. Bu sayfa yüklendiğinde, bu değişken kontrol hatayı görüntülemek ve daha sonra kurabiye ya da oturum diziden değişkeni silmek var.

Evet, $_GET PHP especific kaldırmak için bir yol var ...

      varToRemove = "anyVariable";

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

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

Sonra, bu gibi .. bağlantıyı $ newurl koydu:

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

Ben diğer programers onu aramak olabilir, bu eski bir yazı olduğunu biliyorum, ama!

Tek yönlü SCRIPT_NAME ile HTTP_REFERER karşılaştırmaktır. Kullanıcı Yenile vurdu Onlar aynı olacak.

Hızlı Hack: Sen imploded() '"&" d üzerinde de olabilir $_SERVER['QUERY_STRING'] değişken bu dize işlemek ve ardından explode() 'geri d için.

Bu yaklaşım işe değil misiniz?

<?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>

i had same problem
try : 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']."\" >";

}

Benim için mükemmel çalışacaktır.