0

I have a HTML form where users can checkmark up to 50 different questions. They have to checkmark minimum 1 and at the most all 50 questions.

After they submit the form I need to insert the data (form_array) to my mySQL table questions. The table contains of 50 questions rows (see below question table ex.).

I know the INSERT INTO 'questions' (question1, question2, question3, question4,....question50) VALUES (value1, value2, value3...), but my challenge is that since the amount of checked questions (values) can vary in the form, I do not know how to insert the form_array to my questions table.

The questions are inserted as true or false in the form_array depending on if they are marked or unmarked in the html form.

The questions table has a primary auto incremented ID and 2 foreign keys besides the 50 questions.

I welcome all suggestions/examples on how to insert an array with the above scenario?

The question table will look like this:

  `question1` tinyint(1) NOT NULL,
  `question2` tinyint(1) NOT NULL,
  `question3` tinyint(1) NOT NULL,
  `question4` tinyint(1) NOT NULL,
  `question5` tinyint(1) NOT NULL,
  `question6...etc etc...up to 50 questions

1 Answer 1

1

I think you want to store the answers to the 50 questions, right?

First of all, your table structure should look something like this:

questions
---------
id: primary key, int(11), auto increments
question/title: varchar(255)

answers
-------
id: primary key, int(11), auto increments
question_id: int(11)
answer: tinyint(1)

This is the tricky part. To display the questions (I used mysqli as I don't know what you're using):

$result = $mysqli->query("SELECT * from questions");

while ($question = $result->fetch_assoc()) {
    print 'Question: ' . $question['title'];
    print '<input type="hidden" name="answers[]['question_id']" value="' . $question['id'] . '">';
    print '<input type="radio" name="answers[]['answer']" value="1"> Yes'; 
    print '<input type="radio" name="answers[]['answer']" value="0"> No';
}

Now when a user submits his answers:

if(isset($_POST['submit'])) {
    $answers = $_POST['answers'];

    if(count($answers) > 1) {

        //Loop through all the answers
        foreach($answers as $answer) {
            $mysqli->query("INSERTO INTO answer ('question_id', 'answer') VALUES ('{$answer['question_id']}', '{$answer['answer']')"); //Insert the answers one by one
        }

    } else {
       print 'You need to submit at least one answer!'
    }

}

I haven't tested the code. This is still pretty basic, but it's exactly what you need, I think... :-).

Sign up to request clarification or add additional context in comments.

12 Comments

thank you @jasonk, I am new to databases and are a little confused on how to setup the questions table or more specific, the question/title. As mentioned I have 50 questions, do I understand you correct if §you suggest that I write those 50 questions in the question/title row (one pr. row)? Could you be more specific with and ex. and include the ex. with question 1, question 2 etc?
Or do you @jasonk want me to INSERT my 50 questions in the questions table so the questions each get and unique id to use for queries - is that correct understood?
Yes, you insert your 50 questions in the table questions. Each question is one row, so each question has a unique ID and a title (for instance: How do monkeys run?).
Did my effort help you in any way or?
I have not tested your suggestion yet but I will. Thank you for helping me.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.