На моей странице есть форма GET с несколькими флажками. Каждый checkbox имеет другое имя и значение 1.

Кнопка «Отправить» генерирует URL-адрес, подобный этому: localhost/page.php?a=1&b=1.

Я проверяю, включен ли checkbox с функцией PHP isset($_GET['a']).

Некоторое тестирование показало, что ввод в адресной строке url localhost/page.php?a&b также работает. Есть ли способ сделать так, чтобы такая ссылка создавалась вместо первой?

Установка значения флажков на "" не работает - сохраняется знак "=".

Может, мне отредактировать файл .htaccess?

0
Somnium 9 Мар 2014 в 01:25

2 ответа

Лучший ответ

Если вам нужен действительно запутанный подход, вы можете использовать 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>
1
Anthony 8 Мар 2014 в 22:13

Нет, вы не можете избавиться от знака равенства в запросе 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. URL = /page/a/b ИЛИ /page/a&b ИЛИ /page/stuff/a/otherstuff&b#123
  2. rewriteRule применяется
  3. перешли на page.php
  4. доступ к REQUEST_URI, чтобы получить строку URL (/ page / a / b)

Затем вы можете захватить URL-адрес и обработать его, как хотите, разделив его:

$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
Jens A. Koch 8 Мар 2014 в 22:08