Как я могу передать несколько значений переключателей в базу данных MYSQL через PHP как все отдельные значения, но сохранить их разделенными на группы? - PullRequest
1 голос
/ 15 февраля 2011

У меня есть длинная анкета (46 вопросов), у каждого из которых (3) возможных ответа, да, иногда и нет (3 переключателя), каждый из которых имеет соответствующее значение, 10, 5 и -10 соответственно.

У меня были вопросы, поделенные между 4 заголовками с несколькими вопросами под каждым заголовком. Я смог опубликовать все данные в базе данных mySQL, назначив каждому свой атрибут имени, соответствующий его полю в базе данных.

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

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

Я опубликую пример моей формы html и php send script .... Заранее благодарю за любой совет ...

HTML код одного вопроса

          <div class="questionBox">
       <p>1.Have I clearly defined my companies target market?</p>
        <input type="radio" name="ca1y" value="10"/>
          <label for="ca1">YES</label>
      <input type="radio" name="ca1s" value="5"/>
          <label for="ca1">SOMEWHAT</label>
      <input type="radio" name="ca1n" value="-10"/>
        <label for="ca1">NO</label>
        </div>

/ * php post update * /

    $radioPost="INSERT INTO questions 
(       ca1y, 
        ca1s, 
        ca1n,...)
VALUES
(   '$_POST[ca1y]',
    '$_POST[ca1s]',
    '$_POST[ca1n]',...)

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

любая помощь будет принята с благодарностью веселит.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Я не уверен, что получаю информацию о том, что вы пытаетесь сделать, но кажется, что вам нужно сохранять ответы отдельных лиц на разные вопросы в БД, но каждый вопрос может иметь только ОДИН из, скажем,три возможных ответа.Что ж, в этом случае вы можете подумать о том, чтобы перестроить вашу БД, чтобы она выглядела примерно так:

enter image description here

Вы сохраняете данные пользователей в таблице пользователей, детали вопросов - в таблице вопросов.и разные ответы в таблице ответов.Пользователь сможет ответить на несколько вопросов, но может ответить только на один конкретный вопрос.Затем вы сохраняете ответ, например, в ОДНОМ поле с именем answer_value.Нет необходимости хранить ответ в нескольких полях, так как вы будете хранить VALUE для выбранной ими радиокнопки, т. Е. Вы будете хранить 10, 5 или -10 в зависимости от того, какая опция радио выбрана.

Также важно, чтобы в вашем HTML вы называли все переключатели для конкретного вопроса одинаковыми.Это гарантирует, что параметры радио действуют как переключатели, а не как флажки.Ваш HTML, скорее всего, будет выглядеть примерно так:

<div class="questionBox">
   <p>1.Have I clearly defined my companies target market?</p>
    <input type="radio" name="q1" value="10"/>
      <label for="ca1">YES</label>
  <input type="radio" name="q1" value="5"/>
      <label for="ca1">SOMEWHAT</label>
  <input type="radio" name="q1" value="-10"/>
    <label for="ca1">NO</label>
</div>
<div class="questionBox">
   <p>2.Have I clearly defined my companies product?</p>
    <input type="radio" name="q2" value="10"/>
      <label for="ca2">YES</label>
  <input type="radio" name="q2" value="5"/>
      <label for="ca2">SOMEWHAT</label>
  <input type="radio" name="q2" value="-10"/>
    <label for="ca2">NO</label>
</div>
.....

Обратите внимание, что у вопроса 1 есть 3 опции радио, все с именем "q1", а у вопроса 2 есть 3 опции радио, все с именем "q2".Следуйте той же конвенции для всех ваших вопросов.Тогда ваш PHP станет довольно простым и, вероятно, будет выглядеть примерно так:

$radioPost="INSERT INTO answers (user_name, question_name, answer_value)
VALUES (('$_POST[user_name]', 'q1', '$_POST[q1]),('$_POST[user_name]', 'q2', '$_POST[q2]), ....)

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

$user = $_POST[user_name];
foreach ( $_POST as $key => $val )
{   
    If ($key <> 'user_name') //you might need to check that you only reading the radio                  options
    {
       $radioPost="INSERT INTO answers (user_name, question_name, answer_value)
                   VALUES ('$user', $key, '$val')"
        ....
    }
}    

Также имейте в виду, что даже если вы используете только параметры радиосвязи, вы все равно должны очистить входные данные, чтобы предотвратить атаки, такие как SQL-инъекции и т. Д. Я предлагаю вам найти дополнительную информацию о защите кода от атак.

КстатиЕсли вы поместите вопросы в собственную таблицу, вы можете динамически создать свою анкету из этой таблицы, которая затем позволит вам добавлять или удалять вопросы по своему желанию, что сделает ваше приложение более гибким.И сохраняя ваши ответы в одном поле вместо трех, вы удалите все значения NULL из таблицы, что упростит ваши запросы при выполнении вычислений.Я знаю, что MySQL обычно устанавливает ноль в качестве целочисленного значения по умолчанию, но все же лучше сохранить его в одном поле.Если вы хотите узнать, какой вариант пользователь выбрал для определенного вопроса, просто проверьте значение, хранящееся в этом поле.

0 голосов
/ 15 февраля 2011

Не очень хорошее решение: напишите js, чтобы отменить выбор соответствующих переключателей.

На более серьезной ноте я не понимаю необходимости иметь все радиостанции с разными именами. Почему такое решение не применимо: имя радио в одном вопросе с тем же именем, скажем, вопрос1, затем после публикации формы просто посмотрите на значение, и из этого вы можете легко обновить БД. Я полагаю, вы хотите узнать, сколько раз было выбрано каждое радио. Поэтому, если вы знаете, что у вопроса 1 был выбор 1, вы также знаете, что у вопроса 1 не было вариантов 2 и 3. Если вы не собираете данные другим способом или для других целей, но тогда я думаю, что вам нужно немного больше информации о вас. цель этого. Хотя я все еще думаю, что вы можете сделать это, как я уже сказал, это не потребует сложной обработки, скажем, элементарных знаний в области программирования должно быть достаточно.

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