Join the Stack Overflow Community
Stack Overflow is a community of 6.3 million programmers, just like you, helping each other.
Join them; it only takes a minute:
Sign up

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
share|improve this question
up vote 1 down vote accepted

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... :-).

share|improve this answer
    
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? – Nomis Nov 14 '14 at 12:07
    
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? – Nomis Nov 14 '14 at 12:34
    
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?). – JasonK Nov 14 '14 at 13:10
    
Did my effort help you in any way or? – JasonK Nov 15 '14 at 11:47
    
I have not tested your suggestion yet but I will. Thank you for helping me. – Nomis Nov 15 '14 at 16:03

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.