Передача нескольких элементов флажка в файл PHP с использованием JSON и запрос к базе данных

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

Форма HTML выглядит следующим образом:

<li><input type="checkbox" class="keywords" value="option1" title="option1" /></li> <li><input type="checkbox" class="keywords" value="option2" title="option2" /></li> <li><input type="checkbox" class="keywords" value="option3" title="option3" /></li> <li><input type="checkbox" class="keywords" value="option4" title="option4" /></li> <li><input type="submit" name="submit" class="search" /></li> 

Код javascript для передачи этого файла в PHP:

  <script type="text/javascript"> $(document).ready(function(){ $(".search").click(function() { $.post("parser.php", { keywords: $(".keywords:checked").val() }, function(data) { $.each(data, function() { $("div#result").append("<li class='arrow'><a href='parser.php?id=" + this.id + "'>" + this.title + "</a></li>"); }); $("div#jsonContent").show(); }, "json"); }); }); </script> 

В parser.php я затем беру входящее ключевое слово и выполняю поиск в базе данных:

 $keywords = mysql_real_escape_string ($_GET["keywords"]); $query = mysql_query("SELECT * FROM keyworddb WHERE keywords LIKE '%". $keywords ."%' "); $arr = array(); while( $row = mysql_fetch_array ( $query ) ) { $arr[] = array( "id" => $row["id"], "title" => $row["title"] ); } echo json_encode($arr); 

Это здорово, он проходит без ошибок, за исключением:

1) В firebug он отправляет по выбранному флажковому значению, но не по нескольким флажкам. Он использует только первое значение флажка, если выбрано несколько флажков.

2) Несмотря на то, что он возвращает все записи в таблицу: (независимо от того, что выбрано.

Любая помощь оценивается.

Обновить:

Я сделал предложенные chanegs:

  <form id="findkeywords"> <ul> <li><input type="checkbox" class="keywords[]" value="option1" title="option 1" /></li> <li><input type="checkbox" class="keywords[]" value="option2" title="option 2" /></li> <li><input type="checkbox" class="keywords[]" value="option3" title="option 3" /></li> <li><input type="checkbox" class="keywords[]" value="option4" title="option 4" /></li> <li><input type="submit" name="submit" class="search" /></li> </ul> </form> 

Javascript был изменен на:

  $(document).ready(function(){ $(".search").click(function() { $.post("parser.php", { keywords: $("form#findkeywords").serialize() }, function(data) { $.each(data, function() { $("div#result").append("<li class='arrow'><a href='parser.php?id=" + this.id + "'>" + this.title + "</a></li>"); }); $("div#jsonContent").show(); }, "json"); }); }); 

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

Проблема с использованием .val() каким вы являетесь, заключается в передаче массива данных, чтобы сделать это, вам нужно будет использовать библиотеку JSON, чтобы «подкрепить» ее для отправки на ваш php. Если вы используете .serialize() , не нужно будет пытаться разбирать его с другой стороны, он будет иметь данные, эмулирующие регулярные данные в виде сериализованной формы.

Лично я бы назвал вашу группу checkbox в виде массива, а просто упорядочил флажки как форму.

Форма:

 <form id="checkboxes"> <li><input type="checkbox" name="keywords[]" value="option1" title="option1" /></li> <li><input type="checkbox" name="keywords[]" value="option2" title="option2" /></li> <li><input type="checkbox" name="keywords[]" value="option3" title="option3" /></li> <li><input type="checkbox" name="keywords[]" value="option4" title="option4" /></li> <li><input type="submit" name="submit" class="search" /></li> </form> 

JS:

 <script type="text/javascript"> $(document).ready(function(){ $(".search").click(function() { $.post("parser.php", $("form#checkboxes").serialize(), function(data) { $.each(data, function() { $("div#result").append("<li class='arrow'><a href='parser.php?id=" + this.id + "'>" + this.title + "</a></li>"); }); $("div#jsonContent").show(); }); }); }); </script> 

Затем вам нужно будет обрабатывать $_POST['keywords'] как Array

Вы можете получить к ним доступ с помощью простого foreach

 foreach($_POST['keywords'] as $keyword) { echo $keyword; }