Получить значение из всех параметров (выбранных и не выбранных) в форме выбора нескольких в PHP - PullRequest
0 голосов
/ 02 июля 2018

Мне нужна помощь с моей формой выбора нескольких.

При нажатии на кнопку отправки я хочу отправить все значения параметров. Выбранные и не выбранные параметры.

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

<form action="/action_page.php">
    <select name="cars" multiple>
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>
    <input type="submit">
</form>

Результат:

array( [0] => 'volvo', [1] => 'saab', [2] => 'opel', [3] => 'audi' );

Этот пост делает все, что я хочу, но это делается в Javascript: Получить все опции из поля выбора (выбранные и не выбранные) . Так что, если это можно сделать с помощью Javascript и PHP, это было бы здорово, но я пока не нашел решения для этого.

Спасибо за вашу помощь в Advance!

С уважением, Ледунг.

Ответы [ 4 ]

0 голосов
/ 02 июля 2018

Вы имеете в виду этот путь?

Вы можете структурировать данные таким образом.

Но при отправке вы должны использовать ajax post или создать новую форму вместо использования старой формы отправки.

$('#form').submit(function(event){
  var arr=[];
  $('option').each(function(){
    arr.push({
      selected: $(this).is(':selected'),
      value: $(this).val()
    })
  })
  console.log(arr);
  // do ajax form post and redirect
  // or build a new form with data strcture above
  return false;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form" action="/action_page.php">
    <select name="cars" multiple>
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>
    <input type="submit">
</form>
0 голосов
/ 02 июля 2018

Вы можете добавить hidden ввод в вашу форму, которая будет содержать все доступные опции:

<form action="/action_page.php">
    <select name="cars" multiple>
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="opel">Opel</option>
      <option value="audi">Audi</option>
    </select>
    <input type="hidden" name="allCars">
    <input id="submit" type="submit">
</form>

и теперь вы можете сделать что-то вроде этого:

<script type="text/javascript">
  document.getElementById('submit').addEventListener('click', () => {
     // All available options from cars select.
    const options = document.getElementsByName('cars')[0].options;
    // Array with all available cars.
    const allCars = [];
    for (let i = 0; i < options.length; i++) {
      allCars.push(options[i].value);
    }
    // Assign cars to hidden input.
    document.getElementsByName('allCars')[0].value = allCars;
  });
</script>

В случае, если это не окончательный ответ - надеюсь, вы получите основную идею этого подхода.

0 голосов
/ 02 июля 2018

$. Map, вероятно, самый эффективный способ сделать это с помощью jquery.

var options = $('#selectData option');
var values = $.map(options ,function(option) {
    return option.value;
});
console.log(values) //=> all values
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="selectData" id="selectData">
  <option value="val0">value 0</option>
  <option value="val1">value 1</option>
  <option value="val2">value 2</option>
</select>
0 голосов
/ 02 июля 2018

Вы можете создать с помощью javascript дополнительный текстовый ввод для хранения всех значений параметров:

var my_values = [];
var $select = $('select[name=the_select]');
$select.find('option').each(function() {
  my_values.push($(this).val());
});
$new_input = $('<input type="text" name="all_options">'); // use 'type="hidden"' in production
$new_input.val(my_values.join(','));
$select.parent().append($new_input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select name="the_select">
  <option value="val0">value 0</option>
  <option value="val1">value 1</option>
  <option value="val2">value 2</option>
</select>

Форма отправит дополнительный параметр с именем "all_options".

Этот код PHP создаст массив:

$all_options = explode(",", $_GET['all_options']);

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