根据当前URL添加/替换URL GET参数

时间:2013-04-16 13:49:54

标签: php url get url-parameters parse-url

我已经尝试了一段时间来解决可能是一个小问题,但我似乎无法理解它。我已经尝试了一些不同的方法,其中一些在SO上找到,但还没有一种方法可以使用。

问题包括:
我有一个展示厅页面,我在那里展示一些布料。在每一件布料上都有四个“视图”

  1. 返回
  2. 现在,用户可以通过查看男性女性模型对其进行过滤,但也可以通过查看前面返回两种性别。

    我已经创建了我的脚本,因此它会检测到URL查询并显示正确的数据,但我的问题是正确“构建”URL。

    首次进入页面时,四个链接如下:

    1. example.com?gender=male
    2. example.com?gender=female
    3. example.com?site=front
    4. example.com?site=back
    5. 这项工作是因为它是模型中的“默认”视图(默认视图设置为gender = male&& site = front)。

      但是,如果我选择查看?gender = female ,则用户应该可以通过添加& site = back 再次对其进行过滤,以便完整的网址:example.com?gender=female&site=back

      如果我按下链接以查看性别=男性,则仍应保留网址参数& site = back

      我到目前为止所做的是将参数附加到现有网址,但这会产生以下网址字符串: example.com?gender=male&site=front&gender=female 和等......

      我已经尝试过使用 parse_url 函数, http_build_query($ parms)方法并创建我自己的“自己”函数来检查现有参数但是它不起作用。

      我最近的尝试是:

      _setURL(‘http://example.com?gender=male’, ‘site’, ‘back’);
      function _setURL($url, $key, $value) {
          $separator = (parse_url($url, PHP_URL_QUERY) == NULL) ? '?' : '&';
      
          $query = $key."=".$value;
          $url .= $separator . $query;
          var_dump($url); exit;
      }
      

      此函数有效,除非$ _GET参数已存在,因此应替换而不添加。

      我不确定是否有一些“最佳实践”来解决这个问题,正如我所说,我已经看了很多关于SO的答案,但没有一个在我的问题上找到了。

      我希望我已经解释过了,否则请告诉我,我会详细说明 任何帮助或建议将不胜感激

4 个答案:

答案 0 :(得分:4)

您可以使用以下方法动态生成链接:

$frontLink = (isset($_GET['gender'])) ? 'mydomain.com?gender='.$_GET['gender'].'&site=front':'mydomain.com?site=front';
$backLink = (isset($_GET['gender'])) ? 'mydomain.com?gender='.$_GET['gender'].'&site=back':'mydomain.com?site=back';

这是一个1行if语句,它将分别设置变量$frontLink$backlink的值。 1行if语句的语法是$var = (if_statement) ? true_result:false_result;这将把$ var的值设置为true_result或false_result,具体取决于if语句的返回值。

然后你可以为性别做同样的事情:

$maleLink = (isset($_GET['site'])) ? 'mydomain.com?gender=male&site='.$_GET['site']:'mydomain.com?gender=male';
$femaleLink = (isset($_GET['site'])) ? 'mydomain.com?gender=female&site='.$_GET['site']:'mydomain.com?gender=female';

答案 1 :(得分:2)

通过寻找更好的解决方案找到了这个,然后我发现了这个丑陋的(我们在网上看到很多),所以这是我的解决方案:

function add_get_parameter($arg, $value)
{
    $_GET[$arg] = $value;

    return "?" . http_build_query($_GET);
}

答案 2 :(得分:-1)

<?php
function requestUriAddGetParams(array $params)
{
    $parseRes=parse_url($_REQUEST['REQUEST_URI']);
    $params=array_merge($_GET, $params);
    return $parseRes['path'].'?'.http_build_query($params);
}
?>

答案 3 :(得分:-2)

if(isset($_GET['diagid']) && $_GET['diagid']!='') { 
     $repParam = "&diagid=".$_GET['diagid']; 
     $params = str_replace($repParam, "", $_SERVER['REQUEST_URI']); 
     $url = "http://".$_SERVER['HTTP_HOST'].$params."&diagid=".$ID; 
} 
else $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&diagid=".$ID;