【问题标题】:Combine multiple forms $_GET values into query string将多个表单 $_GET 值组合成查询字符串
【发布时间】:2018-08-14 23:19:36
【问题描述】:

所以,我有两种形式来过滤产品,一种带有复选框,另一种带有选择选项。

当我选中一个复选框时,表单被提交并且查询字符串更新为它的值,当我选中另一个复选框时同样发生,但是当我选择一个选项时,当前查询字符串重置并仅添加该选项值在当前查询之后或之前添加它。

我想要的是联合查询字符串中的两个 $_GET 索引,与提交顺序无关。我怎样才能做到这一点?如果有人知道,我将不胜感激。

$marca_get = isset($_GET['marca']) && is_array($_GET['marca']) 
   ? $_GET['marca'] : [];

if ( isset($_GET['ordem']) ) {
   if ( $_GET['ordem'] == 'vendas' ) {
      $orderby = 'vendas';
   }         
   if ( $_GET['ordem'] == 'avaliacoes' ) {
      $orderby = 'avaliacoes';
   }
}

<form method="get">
 <input type="checkbox" id="amd" class="checkbox-filtro" name="marca[]" 
 value="amd">
 <label for="amd">AMD</label>
 <input type="checkbox" id="intel" class="checkbox-filtro" name="marca[]" 
 value="intel">
 <label for="intel">Intel</label>
</form>

<form method="get">
 <select id="ordem" name="ordem">
  <option value="vendas">Mais vendidos</option>
  <option value="avaliacoes">Melhor avaliados</option>
 </select>
</form>

$('#ordem, .checkbox-filtro').on('change', function() {
  this.form.submit();
});

【问题讨论】:

  • ...把它们放在同一个表格里?
  • @LeeKowalkowski 我在这两种形式之间有更多的内容,所以我认为将所有内容包装在一个形式中并不是一个好习惯。
  • @JeremiahCabigting我去看看

标签: php html get filtering query-string


【解决方案1】:

引用Mozilla Developer Network:

HTML &lt;form&gt; 元素 代表一个文档部分, 包含用于向 Web 提交信息的交互式控件 服务器。

当表单使用get方法时,字段被放入URL查询字符串中:

get:对应HTTP GET方式;表单数据附加到 action 属性 URI 并带有“?”作为分隔符,并将生成的 URI 发送到服务器。


您的页面有两种形式,如果它们不相关也可以。例如,页眉中有一个搜索表单,底部有一个评论表单,它们会有不同的表单,因为它们做不同的事情。搜索表单的action URL 也可能与评论表单不同。

选项 1

让两个表单共享状态的最简单方法是只使用一个表单而不是两个。

如果你想让两个表单合并,并且它们也共享相同的action URL,则说明它们基本上是相同的表单。

form 元素将属于特定 action 的字段分组。

表单元素的默认样式意味着用户看不到表单的边界,并且表单元素可以包含其他“非表单”内容,就像纸上的表单一样。

选项 2

复制其他表单的字段,但将其隐藏。

&lt;input type="hidden" name="ordem" value="&lt;?php echo $_GET['ordem']; ?&gt;"&gt;

假设您的视觉设计暴露了表单的边界(CSS 边框或背景)。包含大量内容可能在视觉上并不理想。

这需要更多的维护。可能值得重新设计 HTML/CSS,以便不直接设置表单元素的样式。

【讨论】:

  • ...除了,不要在生产代码中回显$_GET['ordem''];。它允许 XSS 攻击。首先需要使用htmlspecialchars 转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多