[英]Not inserting the correct data into database while adding a record in php
嘗試將記錄插入數據庫,但數據未正確插入數據庫表中。
這是數據庫表:
問題數據庫表:
question_number question_no text status
1 1 html 1
2 2 php 0
選擇數據庫表:
id question_number is_correct text status
1 1 1 abc 1
2 1 0 abc 1
3 1 0 abc 1
4 1 0 abc 1
5 2 0 abcdfd 0
6 2 1 abcdsf 0
7 2 0 abcdsf 0
8 2 0 abcsdfg 0
如果我要添加新記錄,它將以這種格式插入數據庫表中
問題表:
question_number question_no text status
3 2 html 1
選擇數據庫表:
id question_number is_correct text status
9 2 1 abchdfgh 1
10 2 0 abfdhdfc 1
11 2 0 afdhgbc 1
12 2 0 adfhbc 1
這是在選項表中將問題編號插入為2的問題,但此處應該將其插入為3。
這是該代碼:
<?php
if(isset($_POST['submit'])){
//Get post variables
$question_number = $_POST['question_no'];
$question_text = $_POST['question_text'];
$correct_choice = $_POST['correct_choice'];
//Choices array
$choices = array();
$choices[1] = $_POST['choice1'];
$choices[2] = $_POST['choice2'];
$choices[3] = $_POST['choice3'];
$choices[4] = $_POST['choice4'];
$choices[5] = $_POST['choice5'];
//Question query
$query = "INSERT INTO `questions`(question_no, text)
VALUES('$question_number','$question_text')";
//print_r($query);
//die();
//Run query
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
//Validate insert
if($insert_row){
foreach($choices as $choice => $value){
if($value != ''){
if($correct_choice == $choice){
$is_correct = 1;
} else {
$is_correct = 0;
}
//Choice query
$query = "INSERT INTO `choices` (question_number, is_correct, text)
VALUES ('$question_number','$is_correct','$value')";
//Run query
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
//Validate insert
if($insert_row){
continue;
} else {
die('Error : ('.$mysqli->errno . ') '. $mysqli->error);
}
}
}
$msg = 'Question has been added';
}
}
/*
* Get total questions
*/
$query = "SELECT * FROM `questions` WHERE status='1'";
//Get The Results
$questions = $mysqli->query($query) or die($mysqli->error.__LINE__);
$total = $questions->num_rows;
$next = $total+1;
?>
<form method="post" action="add.php">
<p>
<label>Question Number: </label>
<input type="number" value="<?php echo $next; ?>" name="question_no" />
</p>
<p>
<label>Question Text: </label>
<input type="text" name="question_text" required/>
</p>
<p>
<label>Choice #1: </label>
<input type="text" name="choice1" required/>
</p>
<p>
<label>Choice #2: </label>
<input type="text" name="choice2" required/>
</p>
<p>
<label>Choice #3: </label>
<input type="text" name="choice3" required/>
</p>
<p>
<label>Choice #4: </label>
<input type="text" name="choice4" required/>
</p>
<p>
<label>Choice #5: </label>
<input type="text" name="choice5" required/>
</p>
<p>
<label>Correct Choice Number: </label>
<input type="number" name="correct_choice" />
</p>
<p>
<input type="submit" name="submit" value="Submit" />
</p>
</form>
由於您的question_number
是插入的問題的自動遞增的ID,因此這是您需要在choices
插入新行的question_number
列的值。
通過執行操作獲取最后插入的ID
$insert_row->insert_id;
我已經修改了您的代碼以簡化它,並將其轉換為使用准備好的語句,您也應該對插入的questions
。
照原樣在循環中插入多行時,使用預處理語句還有其他好處。 您只需准備一次查詢,然后執行多次。
if ($insert_row) {
$question_number = $insert_row->insert_id;
$query = "INSERT INTO `choices` (question_number, is_correct, text) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($query) or die($mysqli->error.__LINE__);
foreach ($choices as $choice => $value) {
if (!empty($value) {
$is_correct = (int)($correct_choice == $choice);
//Choice query
//Run query
$stmt->bind_param('sss', $question_number, $is_correct, $value);
$stmt->execute();
if ($stmt->errno) {
die('Error : ('.$stmt->errno . ') '. $stmt->error);
}
}
}
$stmt->close();
$msg = 'Question has been added';
}
mysqli::insert_id
PHP.net mysqli::prepare
PHP.net mysqli-stmt::insert_id
上的PHP.net 在您選擇的查詢中,您插入$question_number
但它應該是您在問題表中插入的最后一個插入ID,最后插入一個ID請使用此$last_id = mysqli_insert_id($conn);
//Updated Choice query
$query = "INSERT INTO `choices` (question_number, is_correct, text)
VALUES ('$last_id','$is_correct','$value')";
希望這可以幫助
$last_id = $mysqli->insert_id;
使用此查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.