Как обработать HTML-форму с динамическими элементами? - PullRequest
1 голос
/ 30 марта 2011

Извиняюсь, если это несколько дублирующий вопрос, я видел других, но я не совсем нашел то, что искал.

Вы можете увидеть мой код в следующем jsfiddle: http://jsfiddle.net/ZnWMq/

Как вы можете видеть, я назвал мои раскрывающиеся списки tags[], values[] и operands[] - т.е. как массивы, чтобы любая PHP-страница, которую мы устанавливаем как действие формы, могла обрабатывать динамически добавлены выпадающие списки.

Я просто немного озадачен тем, как разделить значения после их отправки на страницу, связанную с отправкой формы, поэтому, если кто-то сможет пролить свет, я был бы очень благодарен.

С уважением,

Martin

UPDATE

Привет, спасибо за ваши ответы.

до сих пор я изменил действие формы на advancedsearch.php, используя метод POST, и вот код:

<?php
    $tags = $_POST['tags'];
    $operands = $_POST['operands'];
    $values = $_POST['values'];

   foreach ($tags as $t)
   {
       echo "$t<br />";
   }

   foreach ($operands as $o) 
   {
       echo "$o<br />";
   }

  foreach ($values as $v) 
  {
      echo "$v<br />";
  }

 ?>

С этими значениями все в порядке, но его просто нужно настроить, чтобы я мог получить его в формате для запросов к базе данных MySQL, например что-то вроде SELECT * FROM table_name WHERE tag1 operand1 value1 radio_button_value(AND or OR) tag2 operand2 value2 radio_button_value etc

Надеюсь, что это имеет смысл.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

В этом случае вы получите 3 почтовых переменных в виде массивов, и они должны иметь одинаковую длину (в пересчете на количество).Вам понадобится такой код:

$filterCount = count($_POST['tags']);
$filters = array();

for ($i = 0; $i < $filterCount; $i++) {
    $filters[] = array('tag' => $_POST['tags'][$i], 'operand' => $_POST['operands'][$i], 'value' => $_POST['values'][$i]);
}

Также вы можете попробовать другой подход.Например, вы можете использовать разные имена для каждого фильтра, например:

<select name="filter1[tag]" class="tags">
<option>tags</option>
</select>

<select name="filter1[operand]" class="operands">
<option>operands</option>
</select>

<select name="filter1[value]" class="values">
<option>values</option>
</select>

Когда вы клонируете фильтр, вы должны изменить имя на filterN.

1 голос
/ 30 марта 2011

Итак, когда вы нажимаете «Расширенный поиск», вы хотите получить значения s?- Алекс Томас 6 минут назад

Если это так, то это должно помочь: http://jsfiddle.net/ZnWMq/1/

Я сделал код для работы над нажатием пролета, какЯ не хотел нарушать твой код.Вот мой код:

$('#click').click(function(){
    tags = $("select[name='tags[]'] option:selected").val();
    operands = $("select[name='operands[]'] option:selected").val();
    values = $("select[name='values[]'] option:selected").val();
    output = tags+" "+operands+" "+values;
    alert(output);
});

Если это не то, что вам нужно, я попробую еще раз:)

0 голосов
/ 30 марта 2011

справился с этим, выполнив следующее:

<?php

$tags = $_POST['tags'];
$operands = $_POST['operands'];
$values = $_POST['values'];
$cat = $_POST['cat'];

print "<pre>";
print_r ($_POST);

$query .="WHERE ";

for ($counter=0 ; $counter < count($tags) ; $counter++)
{

    if ($counter>0)
    {
        $query .= "$cat ";
    }

    $query .= sprintf("%s %s '%s' ", $tags[$counter] , $operands[$counter] ,   
    $values[$counter]) ;
}

echo "$query";

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