Объединение значений текстового поля с тем же именем перед отправкой в ​​БД - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующее поле ввода:

<input type="text" name="attendee" placeholder="Attendee name">

Событие может иметь несколько участников, поэтому для решения этой проблемы у меня есть button, которое при нажатии генерирует еще <input type="text" name="attendee" placeholder="Attendee name">

Итак, при нажатии кнопки у меня будет два поля ввода с одинаковым именем:

<input type="text" name="attendee" placeholder="Attendee name">
<input type="text" name="attendee" placeholder="Attendee name">

Теперь я пытаюсь получить данные из этих входов и отправить их в свою таблицу, которая хранит данные типа varchar. Конечно, пользователь может нажать кнопку «Добавить» несколько раз (так что на странице семь входов). Поэтому я не могу создавать столбцы в своей таблице для каждого имени участника.

Итак, чтобы противостоять этому, я пытаюсь получить все значения из input['name=attendee'] и объединить их в одну строку и эти будут разделены запятой.

Например, если у меня есть два текстовых поля:

  • Первое текстовое поле имеет значение Freddy
  • Второе текстовое поле имеет значение Roach

... Они будут объединены в Freddy, Roach, и это строка, которая будет отправлена ​​в таблицу.

Я не могу сделать что-то вроде:

$complete_string = $attendee_one."," .$attendee_two; 

Поскольку, как я уже упоминал, пользователь может сгенерировать несколько входных данных с помощью нажатия кнопки.

Демонстрация формы:

$('.add').on('click', add);

function add() {
	  var new_chq_no = parseInt($('#total_chq').val()) + 1;
	  var new_input = "<input type='text' placeholder='Attendee name' name='attendee[]' id='new_" + new_chq_no + "'>";
	  $('#new_chq').append(new_input);
	  $('#total_chq').val(new_chq_no);
	}
#new_chq{
  display: flex;
  flex-direction: column;
}

input{
  margin: 10px 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form>
  <fieldset>

    <div id="new_chq">
      <input type="text" name="attendee[]" placeholder="Attendee name">
      <input type="hidden" value="1" id="total_chq">
    </div>
    
    <button class="add action-button" type="button">+</button>

  </fieldset>
</form>

Как я получаю данные формы в PHP

$attendees = $_POST['attendee[]'];

Что я хочу сделать (псевдо):

INSERT INTO table_name ('members') VALUES ('$ members');

1 Ответ

0 голосов
/ 27 мая 2020

Как я получаю данные формы в PHP

$ members = $ _POST ['members []'];

Нет, вам нужно получите ключ attendee. Декодирование массива происходит автоматически c. Итак, вы отправляете их в квадратных скобках, но затем извлекаете их без:

$attendees = $_POST['attendee'];

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

$attendees = array_map(
    function($attendee) {
        return your_db_function_for_escaping_but_without_quotes($attendee);
    },
    $attendees
);

Теперь $attendees - это массив, содержащий (обратите внимание на обратную косую черту) John,Daniel,Teal\'c,Max,..., и его можно безопасно поместить в строку SQL в кавычках после того, как он будет вставлен в single item:

$attendeeList = implode(',', $attendees);

Обратите внимание, что это антипаттерн , и вам, вероятно, посоветуют использовать три таблицы, одну с участниками, одну с собраниями и одну с посещаемостью:

 id    meeting
 32    Ori technology

 id    attendee
 72    Daniel
 79    Harry

 id    meeting_id     attendee_id
 747   32             72
 748   32             79

На снимке Гарри и Дэниел присутствуют на собрании №32.

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