如何在php url

时间:2016-01-20 10:30:11

标签: php

我做了一个使用$ _GET方法的搜索框。我搜索类别和大小。

提交类别搜索时,我的网址变为:

index.php?category=1

通过:

<li class=""><a href="index.php?category=<?php echo $category['id']; ?>"><?php echo $category['name']; ?></a></li>

提交尺码时,我的网址是:

index.php?category=1&size=1

通过:

<li id="">
<a href="<?php echo $_SERVER['REQUEST_URI'].'&size='; ?><?php echo $size['id']; ?>"><?php echo $size['name']; ?></a>
</li>

当我搜索其他尺寸时,我有:

index.php?category=1&size=1&size=2

如何更换尺寸而不是在我的网址中再次添加?

4 个答案:

答案 0 :(得分:0)

使用

<?php echo $_SERVER['PHP_SELF'];?>

而不是

<?php echo $_SERVER['REQUEST_URI'];?>

REQUEST_URI正在为您的请求添加查询字符串。

PHP_SELF提供普通文件名的位置,例如index.php

答案 1 :(得分:0)

您必须使用http_build_query函数从关联的参数数组构建您的URL。并尽量避免直接在模板中执行此操作。将此代码至少移至控制器级别。

// Somewhere at the controller
$category = ...;
$size = ...;
$searchParams = array();
if (!empty($category)) {
    $name = $category['name'];
    $searchParams['category'] = $category['id'];
}
if (!empty($size)) {
    $name = $size['name'];
    $searchParams['size'] = $size['id'];
}
$searchQuery = http_build_query($searchParams);

// Somehow pass it to the template
$this->addViewVar('searchUrl', $_SERVER['REQUEST_URI'] . $searchQuery); 
$this->addViewVar('searchName', $name);

在模板中只使用searchUrl变量:

<li class=""><a href="<?php echo $searchUrl; ?>"></a><?php echo $searchName; ?></li>

完成此任务的另一种方式,如果您没有单独的控制器级别,则可以创建特殊功能build_search_url()search_name()

function build_search_url($path, $category = null, $size = null) {
    $searchParams = array();
    if (!empty($category)) {
        $searchParams['category'] = $category['id'];
    }
    if (!empty($size)) {        
        $searchParams['size'] = $size['id'];     
    }        
    $searchQuery = http_build_query($searchParams);
    return $path . $searchQuery;
}

然后像这样使用它:

<li class="">
    <a href="<?php echo build_search_url($_SERVER['REQUEST_URI'], $category, $size); ?>">
        <?php echo search_name($category, $size); ?>
    </a>
</li>

答案 2 :(得分:0)

最简单的方式恕我直言:

在$ _GET中设置索引的新值(如果您不想操作原始数组,则设置副本) - 然后使用http_build_query从中创建新的查询字符串。

答案 3 :(得分:0)

你应该在你身上调用一个函数&#34; href&#34;标签。 在里面,使用http_build_query($array)重建数组。

$data = array('category' => $_GET['category']);
$data['size'] = $_GET['size'] ? $_GET['size'] : NEW_SIZE;

function getQuery($data) {
     return http_build_query($data);
}

您也可以使用$ _SERVER [&#39; REQUEST_URI&#39;],但我不确定此功能是否会替换您的商品值,而不是将其添加到查询的末尾。