我为我的客户构建的 web 表单已经运行了好几个星期,但是最近他告诉我他希望我在表单中引入第四个控件以进一步优化结果。
我遇到的问题是我的 url 不断呈现错误,这弄乱了我稍后在我的页面上运行的查询。
旧网址
http://mysite.com/product?s=INTERMITTENT&p=1300&g=1200
上面的 URL 搜索所有 id 为间歇性的产品,然后过滤它们的总吞吐量 p&g,这工作得很好,直到他想让我介绍允许在公制和英制之间转换的第 4 个控件,新 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>
隐藏的输入采用它们所归属的提交字段的值
我想问题可能出在我的 PHP 代码中,但我看不出在哪里
# 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";
}
}