【问题标题】:Form submission dismisses a parameter in my URL query string表单提交取消了我的 URL 查询字符串中的参数
【发布时间】:2013-08-18 07:31:44
【问题描述】:

我正在为客户构建一个网络应用程序,我现在处于系统初稿几乎完成的阶段,但是我遇到了一个最终问题,这让我无法舒适区。

页面功能通过使用跨三个变量的 GET 请求来通过 SQL 查询过滤数据,这些变量 s、p 和 g 在表单提交时传递到 URL 以执行搜索。除了每当我尝试切换滑块时,一切都工作正常,我的 ?s 参数从 URL 中删除,导致查询中断( s 由于某种原因没有被提交。)。关注页面can be seen here

获取变量和查询 -

$pType = $_GET['s'];

$pVal = $_GET['p'];
$gVal = $_GET['g'];


$sql = "SELECT * FROM pumps 
        WHERE pump_type='$pType'
        AND flow_psi <= '$pVal'
        AND flow_gpm <= '$gVal'
        AND high_psi <= '$pVal'
        AND high_gpm <= '$gVal'";

表格-

  <form id="pumpSlider" action="<?php echo $_SERVER['PHP_SELF']; ?>?s=<?php echo $pType ?>&p=<?php echo $pVal ?>&g=<?php echo $gVal ?>" method="get" align="center">
       <div class="btn-group" data-toggle="buttons-radio">
          <button type="submit" class="<?php if( $pType == 'intermittent' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but1" name="s" value="intermittent">INTERMITTENT</button>
          <button type="submit" class="<?php if( $pType == 'continuous' ){ echo 'active '; } ?>btn btn-primary waitingUiBut" id="but4" name="s" value="continuous">CONTINUOUS</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>

最后,我使用了一些基本的 javascript 来处理表单的提交事件,以应对滑块值的变化。

    $(document).ready(function() {
    $("#psiSlider" ).slider({
              // options
              start: function (event, ui) {
                  // code

                },
                slide: function( event, ui ) {
                  var curValue = ui.value || initialValueA;
                  var target = ui.handle || $('.ui-slider-handle');                                     
                  var tooltip = '<div class="tooltip"><div class="tooltip-inner">' + curValue + '</div><div class="tooltip-arrow"></div></div>';
                  $(target).html(tooltip);


                  var valA = $('#psiSlider').slider("value");
                  document.getElementById('pS').value = valA;   
                  var valB = $('#gpmSlider').slider("value");
                  document.getElementById('gS').value = valB;                   

                },
                change: function(event, ui) {
                  var val = $('#pS').slider("value");
                  var val = $('#gS').slider("value");
                  $('#pumpSlider').submit();
                }
           });
        });

我的想法完全被难住了,如果有人有任何意见,我将不胜感激,谢谢。

【问题讨论】:

  • ?s=';delete%20from%20pumps; 怎么样?
  • 这是一个的想法(删除pumps的内容)。
  • 我真的不明白什么?s=';delete%20from%20pumps;真的会吗?
  • 这将使$sqlSELECT * FROM pumps WHERE pump_type=''; delete from pumps; 开头。这将删除pumps 的内容。
  • 是的,我没有回答您的问题,或者我会在下面的“答案”部分中回答。我指出您的面向 Web 的应用程序对于最基本的 SQL 注入攻击是不安全的,并且您的“舒适区”的表面积需要重新评估。

标签: php javascript forms url form-submit


【解决方案1】:

您的表单具有与action URL 中的参数同名的隐藏输入。由于表单使用method="get",输入值会附加到URL,所以URL有多个同名参数。 PHP 使用最后一个,它是来自表单的值,而不是 URL。

如果您希望能够区分表单字段和 URL 参数,请给它们不同的名称,或使用method="post"。在后一种情况下,您可以使用 $_GET 检索 URL 参数,使用 $_POST 检索表单输入。

【讨论】:

  • 感谢您的回复 Barmar,但我仍然对如何获得结果感到困惑。你说的有道理,我明白为什么 s 没有传递给 URL,但是我不明白为什么在重新提交表单时 s 的值没有传递给 PHP。
  • 看了五遍,终于找到了解决办法,谢谢你的帮助!
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 2011-06-14
  • 2023-03-28
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2011-08-18
相关资源
最近更新 更多