Отправить значения select в массиве

У меня есть такой список в html:

<input type="checkbox" name="drive_style" value=1 checked />123<br /> <input type="checkbox" name="drive_style" value=2 />123<br /> <input type="checkbox" name="drive_style" value=3 checked /> 123<br /> <input type="checkbox" name="drive_style" value=4 />123<br /> <input type="checkbox" name="drive_style" value=5 checked />123<br /> 

Мне нужно отправить значения (1, 3, …) отмеченных ячеек в php-скрипт (я использую ajax с jquery), как массив. Что-то вроде: drive_style [index] .

  $.post('post_reply.php', {'drive_style' : $('drive_style')}, function(data){ alert(data); }); 

В скрипте PHP:

 print_r($_POST['drive_style']); 

[Объект Object]


upd : Мой новый код:

 <input type="checkbox" name="drive_style[]" value=1 checked />123<br /> <input type="checkbox" name="drive_style[]" value=2 />123<br /> <input type="checkbox" name="drive_style[]" value=3 checked />123<br /> <input type="checkbox" name="drive_style[]" value=4 />123<br /> <input type="checkbox" name="drive_style[]" value=5 checked />123<br /> $.post('post_reply.php', {'drive_style':$('input[name=drive_style]').serialize()}, function(data){ alert(data); }); 

Он оповещает пустую строку.

 ​$(function() { var serial = $('input[name=drive_style]').serialize(); //php -> $('input[name=drive_style[]]').serialize(); alert( serial ); });​ 

это даст вам:

 drive_style=1&drive_style=3&drive_style=5 

но для работы с php вам также необходимо ввести имя входа следующим образом:

 <input type="checkbox" name="drive_style[]" value=1 checked />123<br /> 

ПРИМЕЧАНИЕ: drive_style[]

что, очевидно, вы получаете:

 drive_style[]=1&drive_style[]=3&drive_style[]=5 

Как упоминалось выше, вы должны указать свои входы в соответствии с типичным соглашением об именах «массив». PHP автоматически преобразует синтаксис массива в ваши переменные запроса в массив. Таким образом, вы должны drive_style[name] свои флажки в форме drive_style[name] . Чтобы отправить эту информацию в JQuery, мы просто сериализуем форму: $('form_id').serialize() должен сделать трюк. Следующим образом:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Test</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> <script type="text/javascript" charset="utf-8"> function jquerySubmit() { $.post('http://localhost/test.php', $('#checkboxform').serialize(), function(data) { alert(data); }); } </script> </head> <body> <form id="checkboxform" action="http://localhost/test.php" method="post"> <input type="checkbox" name="drive_style[one]" /> One<br /> <input type="checkbox" name="drive_style[two]" /> Two<br /> <input type="checkbox" name="drive_style[three]" /> Three<br /> <input type="submit" value="Submit Form" /> <input type="button" value="Submit AJAX Request" onclick="jquerySubmit()" /> </form> </body> </html> 

И прочитать эту информацию на стороне PHP тоже очень просто:

 // http://localhost/test.php <?php echo time(), "\n"; if (isset($_POST['drive_style']) && is_array($_POST['drive_style'])) { echo implode(", ", array_keys($_POST['drive_style'])); echo "\n\n"; } print_r($_POST); 

Примечательно, что это соглашение об именах также позволяет вам регулярно отправлять форму.

 <input type="checkbox" name="drive_style[key]" value=2 />123<br /> 

В любом случае вы получите только проверенные входы.

Вы можете получать формы с сериализованными данными с помощью

 $('form_selector_here').serialize(); 

который является тем же самым форматом, который используется для POST и GET (и не проверенных там не будет)

В вашем случае вы используете массив ввода, вы должны добавить [] для ввода своего имени следующим образом:

 <input type="checkbox" name="drive_style[]" value=1 checked />123<br /> <input type="checkbox" name="drive_style[]" value=2 />123<br /> ... 

после этого вы можете получить проверочный ввод в своем php-коде.