2

自从我开始 PHP 以来,我一直在想这个问题。一些站点使用过滤选项。有时,其中一些过滤器是完全随机的。例如,某人可能正在查看:products.php?c=1&p=1&s=100在该示例中,假设c是类别,p是页面并且s是起始价格。

如果查看用户要更改起始价格或使用超链接翻到下一页,如何只更改一个$_GET[]变量而其他变量保持不变。我在 PHP 中有一个小脚本来获取当前的 URI,但是,我只是不知道如何只更改该变量,同时保持其他变量不变并刷新页面?我看过substr(), strpos(),ereg_replace()我就是想不通!

如果这是一个愚蠢的问题,我真的很抱歉,我觉得我错过了一些可以解决这个问题的非常简单的事情,但我真的被困住了。

提前非常感谢!麦克风。

4

2 回答 2

1

您只需要将超链接位置设置为您想要更改的变量。说如果它是当前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/>

它与其他变量相同。

于 2013-06-30T15:21:20.987 回答
1

这取决于您是在表单中还是在 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>
于 2013-06-30T15:22:16.160 回答