Форма PHP в mySql DB.Вопрос о форматировании массива - PullRequest
1 голос
/ 16 декабря 2010

Я работаю над формой, которая позволяет пользователю дублировать группы входных данных формы (см. Здесь: http://jsfiddle.net/Sd9Ag/5/).

Я хотел бы вставить данные в базу данных с двумя таблицами: «вопрос» (содержащий столбцы: «QID», «текст») и «ответ» (содержащий столбцы: «AID», «QID»"текст").

Когда я отправляю форму, информация публикуется следующим образом (в этом примере форма содержит 2 вопроса, на каждый из которых есть 3 ответа):


вопрос:

Array ( [0] => question 1 [1] => question 2 )

ответ:

Array ( [0] => q1 answer 1 [1] => q1 answer 2 [2] => q1 answer 3 [3] => q2 answer 1 [4] => q2 answer 2 [5] => q2 answer 3 )

Мой вопрос таков: как лучше связать эти вопросы с их ответами при циклическом просмотре переменных записи, чтобы вставить их в базу данных?

Должен ли я написать сценарий, чтобы name каждой группы ввода формы отличался?

Есть ли способ сгруппировать каждый из этих входных "наборов" в массив?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

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

Примерно так:

<input type="text" name="question[1]">
<input type="text" name="answer[1][1]">

Теперь вы держите счетчик в javascript, каку вас есть много ответов на этот вопрос, поэтому, когда вы добавляете новый ответ, вы просто увеличиваете счетчик.Например, если вы начнете с ответа по умолчанию 1:

var count = 1
//creating new answer field logic
count++;
answer_name = 'answer[' + question + '][' + count + ']';

Конечно, это немного сложнее, но, надеюсь, вы поймете, куда я иду с этим.

Затем, когда вы отправляете запрос, вы берете массив вопросов, а затем просто запрашиваете массив ответов, чтобы получить все ответы на этот вопрос.Ответы на вопрос 1 будут представлены в виде ответов $ 1 [1] в виде массива.

2 голосов
/ 16 декабря 2010

Я хотел бы иметь такой окончательный массив, в котором все находится в одном массиве, чтобы его можно было легко перебрать во время обработки: -

array([0] => array([0] => question 1,
                   [1] =>array([0] => q1 answer 1, [1] => q1 answer 2)),
      [1] => array([0] => question 2, 
                   [1] => array([0])),
      ...

Проверьте, создает ли входные имена в этом формате приведенный выше массив почтовых данных: -

 //Question 1
<input type="input" name="question[0][0]">

//Answers to 1
<input type="input" name="question[0][1][]">
<input type="input" name="question[0][1][]">

//Question 2
<input type="input" name="question[1][0]">

//Answer to 2
<input type="input" name="question[1][1][]">

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

Чтобы сделать его более читабельным, вы можете назначить так:

 //Question 1
<input type="input" name="qa[0][question]">

//Answers to 1
<input type="input" name="qa[0][answer][]">
<input type="input" name="qa[0][answer][]">

//Question 2
<input type="input" name="qa[1][question]">

//Answer to 2
<input type="input" name="qa[1][answer][]">

Надеюсь, это поможет

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