Обновите страницу и измените переменную 1$GET


Я задавался этим вопросом некоторое время с тех пор, как начал работать с PHP. Некоторые сайты используют параметры фильтрации. Иногда некоторые из этих фильтров являются совершенно случайными. Например, кто-то может просматривать: products.php?c=1&p=1&s=100 В этом примере давайте предположим, что c - это категория, p - страница и s - начальная цена.

Если бы просматривающий пользователь изменил начальную цену или перешел на следующую страницу с помощью гиперссылки, как бы он изменил только одну переменную $_GET[], оставив остальные нетронутыми. У меня есть небольшой скрипт на PHP для получения текущего URI, однако я просто не могу понять, как бы я изменил только эту переменную, оставив остальные нетронутыми, и обновил страницу? Я посмотрел на substr(), strpos(), и ereg_replace() и я просто не могу этого понять!

Мне очень жаль, если это глупый вопрос, я чувствую, что пропустил что-то действительно простое, что может это исправить, но я действительно застрял, ребята.

Заранее большое спасибо! Майк.

Author: Mike Shaw, 2013-06-30

2 answers

Это зависит от того, находитесь ли вы в форме или по URL-адресу.

Если вы находитесь в форме, это легко, потому что пользователь изменяет поле ввода, которое он хочет изменить, а остальные остаются там:

<form>
    <input type="p" value="1" />
    <input type="c" value="1" />
    <input type="s" value="100" />
    <input type="submit" />
</form>

Проблема с методом, основанным на URL, заключается в том, что вам придется задать URL-адрес для каждого из них следующим образом:

<a href="?p=1&c=1&s=1">$1 Starting Price</a>
<a href="?p=1&c=1&s=10">$10 Starting Price</a>
<a href="?p=1&c=1&s=100">$100 Starting Price</a>

Вам придется сделать это, чтобы сделать его динамичным:

<a href="?p=<?php echo urlencode($_GET['p']) ?>&c=<?php echo urlencode($_GET['c']) ?>&s=1">$1 Starting Price</a>

Это большой объем ввода для всех ваших ссылок. Вы могли бы создать функцию PHP для обработки изменения одного значения вот так:

function genUrl($newKey, $newVal) {
    $url = '?';
    foreach ($_GET as $key => $val) {
        if ($url != '?') {
            $url .= '&';
        }

        $url .= urlencode($key) . '=' ($key == $newKey ? $newVal : urlencode($val));
    }

    return $url;
}

И ваш html будет выглядеть так:

<a href="<?php echo genUrl('s', 1) ?>">$1 Starting Price</a>
<a href="<?php echo genUrl('s', 10) ?>">$1 Starting Price</a>
<a href="<?php echo genUrl('s', 100) ?>">$1 Starting Price</a>
 1
Author: chrislondon, 2013-06-30 15:22:16

Вам просто нужно настроить расположение гиперссылок на переменную, которую вы хотите изменить. Скажем, если в настоящее время это products.php?c=1&p=1&s=100, и вы хотите перейти к products.php?c=2&p=1&s=100, то вам нужно иметь свой тег привязки, например

<?php

$_GET['c'] = $_GET['c']++;

?>

<a href='<?php echo "products.php?c={$_GET['c']}&p=1&s=100" ?>'>link<a/>

Он идентичен другим переменным.

 1
Author: php_nub_qq, 2013-06-30 15:21:20