在我的页面中,我有GET
表单,其中包含多个复选框。每个checkbox
都有不同的名称和值1.
“提交”按钮会生成如下所示的网址:localhost/page.php?a=1&b=1
。
我正在检查PHP函数checkbox
是否启用isset($_GET['a'])
。
某些测试显示,输入地址栏网址localhost/page.php?a&b
也有效。
有没有办法让这个链接生成而不是第一个?
将复选框的值设置为""
不起作用 - 它会保留"="
符号。
也许我应该编辑.htaccess
文件?
答案 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)。
示例:
/page/a/b
或/page/a&b
或/page/stuff/a/otherstuff&b#123
然后你可以抓住网址并按照你想要的方式处理它:
$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>