Question

J'ai un site Web créé en PHP où, chaque fois qu'un utilisateur reçoit une erreur, je les redirige vers une autre page (avec header(Location:...)) et mets l'ID de l'erreur dans l'URL afin que je sache quelle erreur afficher.

E.g. Si l'utilisateur essaie d'accéder à une page de produit mais que cet élément n'est plus disponible, je vais rediriger vers la catégorie d'éléments qu'il consultait précédemment et afficher une erreur en fonction de l'ID d'erreur que j'ai spécifié dans l'URL.

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

Il y a deux choses que je n'aime pas dans cette approche:

  1. Il affiche le error_id dans l'URL.
  2. si la page est actualisée, l'erreur sera toujours affichée.

Existe-t-il un moyen de supprimer proprement une variable $ _GET spécifique d'une URL tout en laissant le reste des variables intact après le chargement de la page?

Je pense que c'est peut-être en utilisant modRewrite ou une redirection vers la page elle-même mais en supprimant le error_id de l'URL ou en utilisant une variable $ _SESSION et en évitant de placer le error_id dans l'URL. Vos pensées?

J'apprends beaucoup de cette communauté et je me suis dit que si je posais la question, je pourrais peut-être apprendre quelque chose de nouveau ou obtenir des idées variées, étant donné que je suis assez nouveau dans le domaine des scripts.

Était-ce utile?

La solution

Non, il n'y a aucun moyen de le faire explicitement - du moins pas sans un rafraîchissement de page, mais vous perdriez quand même les données.

Vous feriez mieux d'utiliser une variable de session temporaire.

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

Ensuite, dans view_category.php

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

  // show error #5
}

Autres conseils

Oui, il existe un moyen de supprimer des éléments spécifiques $_GET de PHP ...

      varToRemove = "anyVariable";

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

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

Ensuite, mettez le $ newurl dans le lien .. comme ceci:

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

Je sais que & # 180; est un ancien post, mais d’autres programmeurs sont peut-être à la recherche!

Tout d'abord, enregistrez l'erreur dans votre base de données:)

Ensuite, définissez un cookie ou une variable de session, puis redirigez l'utilisateur vers une page sécurisée. Lorsque cette page est chargée, demandez-lui de vérifier la variable, d'afficher l'erreur, puis supprimez la variable du cookie ou du tableau de session.

Une solution consiste à comparer le HTTP_REFERER au SCRIPT_NAME. Ils seront identiques si l'utilisateur a cliqué sur Actualiser.

Quick Hack: Vous pourriez aussi avoir imploded() 'sur & "; & et &"; dans la $_SERVER['QUERY_STRING'] variable pour manipuler cette chaîne, puis explode() 'la renvoie.

Cette approche ne fonctionnerait-elle pas?

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

J'ai eu le même problème
essayez: 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']."\" >";

}

fonctionne parfaitement pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top