HTML-флажок формы и HTTP URL - PullRequest
       0

HTML-флажок формы и HTTP URL

2 голосов
/ 18 января 2012

Итак, у меня есть эта HTML-форма:

<form id="search_form" class="form_wrapp"
    accept-charset="utf-8" method="get" action="http://testing.com/results">
    <input class="inputbox" type="text" name="search_query">
    <input class="ic_search" type="submit" value="">

    <input type="checkbox" value="checkbox1" name="search_filter[]">
    <label for="Checkbox1">Checkbox1</label>
    <input type="checkbox" value="checkbox2" name="search_filter[]">
    <label for="Checkbox2">Checkbox2</label>
</form>

и перенаправляет на этот URL при отправке с установленными 2 флажками

results?search_query=dreams&search_filter[]=checkbox1&search_filter[]=checkbox2

Это работает так (внутри codeigniter я получаю данные с $this->input->get('search_filter')), но мой вопрос: я делаю что-то не так внутри формы, или это как это должно работать? А я про: &search_filter[]=checkbox1&search_filter[]=checkbox2. Разве это не должно быть что-то вроде: &search_filter[]=checkbox1,checkbox2? А если нет, как я могу заставить это работать так?

Ответы [ 5 ]

2 голосов
/ 18 января 2012

Если вы хотите в формате запятой, вы можете сделать следующее:

$filters = (array) $this->input->get('search_filter');
$filters = implode(',',$filters);

Если вы хотите изменить формат отправки формы, предполагая jquery для js:

$('#search_form').submit(function() {
   var $hidden = $('<input type="hidden" name="search_filter" />').appendTo($(this)),
       $filters = $('input[name^=search_filter]'),
       value = '';

      //loop through the filters check if there checked and add them to the value

      $hidden.val(value);

      $filters.remove();       
});

Конечно, если у пользователя не включен js, он будет отправлять

2 голосов
/ 18 января 2012

Я что-то не так делаю внутри формы, или это так должно работать?

Вот как это должно работать.По крайней мере, если вам нужно прочитать строку запроса с помощью PHP, эти скобки должны быть там для чтения всей строки запроса без перезаписи каждого значения search_filter следующим.

А если нет,как я могу заставить его работать так?

Если вам нужно, вы можете вместо этого использовать запрос POST, обработать отправку и перенаправить на URL по вашему выбору с любой строкой запроса, которую выхочу.

Из вашего комментария:

Я хотел сделать URL-адрес вот таким &search_filter[]=checkbox1,checkbox2, просто чтобы сделать его немного более «красивым»

Не беспокойся об этом, серьезно.Это имеет значение только тогда, когда вы занимаетесь экстремальным SEO и не хотите, чтобы два URL-адреса указывали на одно и то же место.В таких случаях обычно удаляют все неиспользуемые ключи и размещают их в алфавитном порядке, чтобы все URL-адреса со строками запроса были согласованными, но объединение их в нечто нестандартное по-прежнему не является частью этого.не боритесь с поведением - работайте с оно - оно не «сломано» и его «красиво» не будет иметь никакого значения, плюс вам придется угадывать / запоминать, какие страницы обрабатывают строки запроса правильнои какие из них используют ваш "пользовательский" метод.

1 голос
/ 18 января 2012

&search_filter[]=checkbox1,checkbox2

Зачем вам это нужно?

Используйте это как:

<?php

$searchFilter = $this->input->get('search_filter');

foreach($searchFilter as $filter)
    // some actions with filters.

You search_filter[] - простой массив со значениями из входов флажков.

1 голос
/ 18 января 2012

Это совершенно нормально. Данные формы всегда отправляются в виде пар key=value с одним единственным значением Отправка key=value,value не является частью спецификации HTTP, и значения будут обрабатываться как одна монолитная строка, а не как два отдельных значения, разделенных запятыми.

Вы, конечно, можете использовать JS для перестройки вашей формы на лету, чтобы использовать формат value,value, но тогда вам придется изменить свои серверные сценарии, чтобы они также принимали этот новый формат. PHP не будет автоматически разбивать значения перед вами, потому что это не стандартное представление.

1 голос
/ 18 января 2012

Я делаю что-то не так внутри формы, или это так должно работать?

Вот как это должно работать

Разве это не должно быть что-то вроде: & search_filter [] = checkbox1, checkbox2?

Тогда вы не сможете увидеть разницу между двумя предметами и одним предметом, в котором есть запятая.

А если нет, как я могу заставить это работать так?

Навязчивый JavaScript. Не делай этого. Формы работают хорошо, как они работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...