简体   繁体   中英

Insert HTML form data to mySQL via PHP (form array vary from amount of table rows)

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM