Php URL继承了错误的get变量,尽管指定正确

Php URL继承了错误的get变量,尽管指定正确,php,get,Php,Get,我为我的客户构建的web表单已经运行了好几个星期了,但是最近他告诉我他希望我在表单中引入第四个控件以进一步优化结果。 我遇到的问题是,我的url一直呈现不正确,这会打乱我稍后在页面上运行的查询 旧网址 http://mysite.com/product?s=INTERMITTENT&p=1300&g=1200 上面的URL搜索id为间歇性的所有产品,然后根据它们的总吞吐量p&g进行过滤,这很好,直到他想让我引入第四个控件,允许公制和英制之间的转换,新的URL看起来有点像这样 h

我为我的客户构建的web表单已经运行了好几个星期了,但是最近他告诉我他希望我在表单中引入第四个控件以进一步优化结果。
我遇到的问题是,我的url一直呈现不正确,这会打乱我稍后在页面上运行的查询

旧网址

http://mysite.com/product?s=INTERMITTENT&p=1300&g=1200
上面的URL搜索id为间歇性的所有产品,然后根据它们的总吞吐量p&g进行过滤,这很好,直到他想让我引入第四个控件,允许公制和英制之间的转换,新的URL看起来有点像这样

http://mysite.com/product?s=INTERMITTENT&m=IMPERIAL&p=1000&g=350
然而,每次提交表单时,我都会收到一些与

http://mysite.com/product?s=IMPERIAL&m=IMPERIAL&p=1000&g=350
我一辈子都搞不懂为什么输出会这样


HTML标记

<form id="pumpSlider" action="" method="GET" align="center">
    <input id="bS" type="hidden" name="s" value="<?php echo $pType ?>" />
       <div class="btn-group" data-toggle="buttons-radio">
         <button type="submit" class="<?php if( $pType == 'INTERMITTENT' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but1">INTERMITTENT</button>
         <button type="submit" class="<?php if( $pType == 'CONTINUOUS' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but4">CONTINUOUS</button>  
      </div>

      <input type="hidden" name="m" value="<?php echo $_GET['m'] ?>" />
         <div class="btn-group" data-toggle="buttons-radio" style="display:block; padding-top: 20px;">
           <button type="submit" class="<?php if( $_GET['m'] == 'METRIC' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but5">METRIC</button>
           <button type="submit" class="<?php if( $_GET['m'] == 'IMPERIAL' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but6">IMPERIAL</button> 
         </div>                

     <div align="center" class="productSlider">
        <p class="inlineLabel">PSI</p><div class="filterSlider" id="psiSlider"></div>
        <p class="inlineLabel">GPM</p><div class="filterSlider" id="gpmSlider"></div>

        <input id="pS" type="hidden" name="p" value="<?php echo $pVal ?> " />
        <input id="gS" type="hidden" name="g" value="<?php echo $gVal ?>" />
     </div>
 </form>

您可能应该使用,而不是自己尝试连接该值。只需用这些值构建一个数组,然后“交换”出需要更新的值(然后调用
http\u build\u query
将它们放在一起)。e、 g


然后,只要表单是从
$params
填充的,就不应该看到任何重复的值。

您可能应该使用,而不是自己尝试连接值。只需用这些值构建一个数组,然后“交换”出需要更新的值(然后调用
http\u build\u query
将它们放在一起)。e、 g


然后,只要您的表单是从
$params
填充的,您就不会看到任何重复的值。

尽管使用了quuery生成方法,重复的值仍然会附加到URL。@AlexSims:您的提交代码在哪里?我看到隐藏的输入,然后是分配给提交按钮的选项。它实际上在哪里将该选项抛出到隐藏字段并继续?我想我已经发现了问题,它看起来与单选按钮上的数据绑定有关。谢谢你的帮助是的,我是个十足的白痴,我忘了在我的javascript中设置绑定来分配值:/wsting,对不起rtime@AlexSims:不用担心尽管使用了quuery build方法,但URL中仍有重复的值。@AlexSims:您的提交代码在哪里?我看到隐藏的输入,然后是分配给提交按钮的选项。它实际上在哪里将该选项抛出到隐藏字段并继续?我想我已经发现了问题,它看起来与单选按钮上的数据绑定有关。谢谢你的帮助是的,我是个十足的白痴,我忘了在我的javascript中设置绑定来分配值:/wsting,对不起rtime@AlexSims:不用担心
# Check if each variable is set, if not delegate default values.
if(!isset($_GET['m']) || !isset($_GET['p']) || !isset($_GET['g']) || !isset($_GET['s'])){
    $_GET['m'] = "IMPERIAL";
    $_GET['g'] = "0";
    $_GET['p'] = "0";
    $_GET['s'] = "INTERMITTENT";
    $cVal = "classic";
}

# Validate the input is correct (check for tampered URL)
if(isset($_GET['s'])){
  if(preg_match('/^[INTERMITTENT | CONTINUOUS ]+$/', stripslashes(trim($_GET['s']))))
  {
    $pType = $_GET['s'];
    $cVal = "classic";
  } else {
    $pType = "INTERMITTENT";
    $cVal = "classic";
  }
}   

if(isset($_GET['p'])){
    if(preg_match('%^[0-9]{1,6}$%', stripslashes(trim($_GET['p']))))
    {
        $pVal = $_GET['p'];
    } else {
        $pVal = "0";
    }
}

if(isset($_GET['g'])){
    if(preg_match('%^[0-9]{1,6}$%', stripslashes(trim($_GET['g']))))
    {
        $gVal = $_GET['g'];
    } else {
        $gVal = "0";
    }
}

if(isset($_GET['m'])){
  if(preg_match('/^[IMPERIAL | METRIC ]+$/', stripslashes(trim($_GET['m']))))
  {
    $m = $_GET['m'];
  } else {
    $_GET['m'] = "IMPERIAL";
  }
}
// establish initial data:
$params = array(
  's' => $_GET['s'],      // INTERMITTENT
  'm' => $_GET['m'],      // IMPERIAL
  'p' => (int)$_GET['p'], // 1300
  'g' => (int)$_GET['g']  // 1200
);

/* $params validation logic, and maybe fallback values on failures */

// propose a change:
$params['m'] = 'METRIC';

// rebuild:
$query = http_build_query($params); // s=INTERMITTENT&m=METRIC&p=1300&g=1200