Как удалить определенную переменную $_GET из URL-адреса
-
06-07-2019 - |
Вопрос
У меня есть веб-сайт, созданный на PHP, где каждый раз, когда пользователь получает сообщение об ошибке, я перенаправляю его на другую страницу (используя header(Location:...)
) и укажите идентификатор ошибки в URL-адресе, чтобы я знал, какую ошибку отображать.
Например.Если пользователь попытается получить доступ к странице товара, но этот товар больше недоступен, я перенаправлю его обратно в категорию товаров, которые он просматривал ранее, и выведу сообщение об ошибке на основе идентификатора ошибки, указанного мной в URL.
www.example.com/view_category.php?product_category_id=4&error_id=5
Есть две вещи, которые мне не нравятся в таком подходе:
- Он отображает error_id в URL-адресе.
- если страница будет обновлена, ошибка по-прежнему будет отображаться.
Есть ли способ аккуратно удалить определенную переменную $ _GET из URL-адреса, оставив остальные переменные нетронутыми ПОСЛЕ загрузки страницы?
Я думаю, возможно, он использует modRewrite или перенаправление обратно на саму страницу, но удаляет error_id из URL-адреса или использует переменную $ _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
}
Другие советы
Да, есть способ удалить specific $_GET
из PHP...
varToRemove = "anyVariable";
foreach($_GET as $variable => $value){
if($variable != varToRemove){
$newurl .= $variable.'='.$value.'&';
}
}
$newurl = rtrim($newurl,'&');
Затем поместите $newurl в ссылку..вот так:
pageurl?something=something&<? echo $newurl; ?>
Я знаю, что это старый пост, но, возможно, другие программисты ищут его!
Сначала зарегистрируйте ошибку в своей базе данных :)
После этого установите файл cookie или переменную сеанса, а затем перенаправьте пользователя на безопасную страницу.Когда эта страница будет загружена, попросите ее проверить наличие переменной, отобразить ошибку, а затем удалить переменную из файла cookie или массива сеанса.
Один из способов состоит в том, чтобы сравнить HTTP_REFERER
с помощью SCRIPT_NAME
.Они будут такими же, если пользователь нажал кнопку Обновить.
Быстрый Взлом:Вы могли бы также imploded()
'd на "&" в the $_SERVER['QUERY_STRING']
переменная для манипулирования этой строкой, а затем explode()
вернул бы его обратно.
Разве такой подход не сработал бы?
<?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']."\" >";
}
у меня это работает идеально.