带有'get'链接的HTML表单,没有相同的符号

时间:2014-03-08 21:25:03

标签: php html forms get

在我的页面中,我有GET表单,其中包含多个复选框。每个checkbox都有不同的名称和值1.

“提交”按钮会生成如下所示的网址:localhost/page.php?a=1&b=1

我正在检查PHP函数checkbox是否启用isset($_GET['a'])

某些测试显示,输入地址栏网址localhost/page.php?a&b也有效。 有没有办法让这个链接生成而不是第一个?

将复选框的值设置为""不起作用 - 它会保留"="符号。

也许我应该编辑.htaccess文件?

2 个答案:

答案 0 :(得分:1)

不,你无法摆脱GET请求中的等号。

唯一要改变的是“&”,通过修改PHP ini设置“arg_separator.output”让我们说“;”。 这会给你localhost/page.php?a=1;b=1。 那不是你想要的。

通过使用.htaccess RewriteRules,你可能会得到一些东西,比如:

localhost/page/1/1 

您可以应用以下.htaccess规则:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^.*$ ./page.php

这个重写规则只是将每个URL传递给page.php(更好的index.php)。

示例:

  1. 网址= /page/a/b/page/a&b/page/stuff/a/otherstuff&b#123
  2. 应用了rewriteRule
  3. 转发到page.php
  4. 访问REQUEST_URI以获取URL字符串(/ page / a / b)
  5. 然后你可以抓住网址并按照你想要的方式处理它:

    $request_uri = $_SERVER['REQUEST_URI']; // <-- this gives you the url
    
    // next steps are just string processing examples
    
    #remove the directory you don't want
    $request_uri = str_replace('part_not_wanted', '', $request_uri);
    
    #split the path by '/'
    $params     = split("/", $request_uri);
    
    # or split by '&'
    $params     = split("&", $request_uri);
    

答案 1 :(得分:1)

如果您想要一个非常复杂的方法,您可以使用javascript取消提交请求,然后仅使用选中的输入名称重定向到该位置。我认为它可能看起来像:

<form action="page.php" method="get" id="page_form">
    <label for="a">Checkbox A</label><input type="checkbox" name="a" id="a" />
    <input type="submit" value="Submit" id="submit" />
</form>

<script>
  var page_form = document.getElementById("page_form");
  page_form.onsubmit = forward_request;

function forward_request() {

  var inputs = document.getElementById("page_form").elements;
  var clean_query_string = "?";
  for(i = 0; i < inputs.length; i++) {
       if(inputs[i].checked) {
            clean_query_string += inputs[i].name + "&";
       }
  }

  window.location = document.getElementById("page_form").action + clean_query_string;
  return false;
}
</script>