I am trying to INSERT
some data into my table using an SQL statement. A user completes a survey that has 10 questions, then I want to INSERT
those 10 answers into the db using one SQL statement. So essentially the only 2 fields that will change will be the questionID
and the answer
column? Please note I have just given 2 questions as an example within the <form>
tags for info.
questionnaire:
<!-- Attempt 2 of questionnaire -->
<form action="scripts/submit-survey.php" method="post">
<?php
$questionnaire = "Welcome Questionnaire";
$questionID = 1;
$stmt = $conn->prepare ("SELECT `questionnaire`.`questionnaireName`, `questionnaireQuestions`.`questionID`,`question`.`question` FROM `questionnaire` INNER JOIN `questionnaireQuestions` ON `questionnaire`.`questionnaireID` = `questionnaireQuestions`.`questionnaireID` INNER JOIN `question` ON `questionnaireQuestions`.`questionID` = `question`.`questionID` WHERE `questionnaire`.`questionnaireName` = ? AND `question`.`questionID` = ?");
$stmt->bind_param("si", $questionnaire, $questionID);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result -> fetch_assoc())
{
?>
<p><?php echo $row['question']; ?></p>
<?php
}
?>
<label><input type="radio" name="q1" value="1"> 1</label>
<br>
<label><input type="radio" name="q1" value="2"> 2</label>
<br>
<label><input type="radio" name="q1" value="3"> 3</label>
<br>
<?php
$questionnaire = "Welcome Questionnaire";
$questionID = 2;
$stmt = $conn->prepare ("SELECT `questionnaire`.`questionnaireName`, `questionnaireQuestions`.`questionID`,`question`.`question` FROM `questionnaire` INNER JOIN `questionnaireQuestions` ON `questionnaire`.`questionnaireID` = `questionnaireQuestions`.`questionnaireID` INNER JOIN `question` ON `questionnaireQuestions`.`questionID` = `question`.`questionID` WHERE `questionnaire`.`questionnaireName` = ? AND `question`.`questionID` = ?");
$stmt->bind_param("si", $questionnaire, $questionID);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result -> fetch_assoc())
{
?>
<p><?php echo $row['question']; ?></p>
<?php
}
?>
<label><input type="radio" name="q2" value="1"> 1</label><br>
<label><input type="radio" name="q2" value="2"> 2</label><br>
<label><input type="radio" name="q2" value="3"> 3</label><br>
<input type="submit" value="Submit">
</form>
submit-survey.php
<?php
require 'db.php';
session_start();
$seshID = $_SESSION['studentID'];
$a1 = $_POST['q1'];
$a2 = $_POST['q2'];
$a3 = $_POST['q3'];
$a4 = $_POST['q4'];
$a5 = $_POST['q5'];
$a6 = $_POST['q6'];
$a7 = $_POST['q7'];
$a8 = $_POST['q8'];
$a9 = $_POST['q9'];
$a10 = $_POST['q10'];
$answer_bank = array(
$a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $10
);
$stmt = $conn->prepare ("INSERT INTO `studentAnswer` (`studentAnswerID`, `studentID`, `questionID`, `answer`) VALUES (NULL, ? , ? ,?)");
//echo $i;
//echo ${"a". $i};
$stmt->bind_param("iii", $seshID , $questionID , $a);
foreach ($answer_bank as $a_b) {
list($a) = $a_b;
$stmt->execute();
}
$result = $stmt->get_result();
?>
You're missing 1 value the $questionID.
try
$questionID = 1;
foreach ($answer_bank as $a) {
$stmt->execute();
$questionID++;
}
Improve your query by using alias
$stmt = $conn->prepare ("SELECT
`qn`.`questionnaireName`,
`qQ`.`questionID`,
`q`.`question`
FROM `questionnaire` `qn`
INNER JOIN `questionnaireQuestions` `qQ` ON `qn`.`questionnaireID` = `qQ`.`questionnaireID`
INNER JOIN `question` `q` ON `qQ`.`questionID` = `q`.`questionID`
WHERE `qn`.`questionnaireName` = ? AND `q`.`questionID` = ?");