У меня есть два разных вопроса и варианты таблиц базы данных, где я вставляю вопросы в одну таблицу и несколько вариантов в другую таблицу, где идентификатор таблицы вопросов является внешним ключом в таблице вариантов.
Вопросы:
Questions_number Text
1 What is HTML?
2 What is PHP?
Выбор:
id question_number is_correct text
1 1 1 markup
2 1 0 Hyext
3 1 0 Hyper text markup language
4 2 0 hsdfd
5 2 0 frfwer
6 2 1 Hypertext Preprocessor
Если я пытаюсь отредактировать вопрос номер 1, мне нужно получить все детали вопросов, варианты выбора и правильный вариант. Но когда я пытаюсь отредактировать запись для вариантов, я получаю те же данные, которые я получаю на вопрос.
HTML:
<?php session_start();
include 'includes/db.php';
$id = (int)$_GET['id'];
$sql = "SELECT * FROM questions q WHERE q.question_number = $id ";
$oppointArr =array();
$result = mysqli_query($mysqli,$sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result))
{
$oppointArr = $row;
echo "Text: " . $row["text"]. "<br>";
}
} else {
echo "0 results";
}
?>
<form class = "form-horizontal" action = "updatequestions.php" method = "post" role = "form">
<?php if (isset($msg)) {?>
<div class = "<?php echo $msgclass; ?>" id = "mydiv" style = "padding:5px;"><?php echo $msg; ?></div>
<?php } ?>
<input type='hidden' value='<?=$id;?>' name='question_number'>
<h2>Edit A Question</h1>
<div class = "form-group">
<label for = "questionno" class = "col-sm-2 control-label">Question Number</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['question_number'];?>"
name = "question_number" id = "question_number" readonly>
</div>
</div>
<div class = "form-group">
<label for = "question" class = "col-sm-2 control-label">Question</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['text'];?>" name = "question_text" id = "question_text">
</div>
</div>
<input type='hidden' value='<?=$id;?>' name='id'>
<h2>Edit A Choice</h1>
<div class = "form-group">
<label for = "choice #1" class = "col-sm-2 control-label">Choice #1</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['choice1'];?>" name = "choice1" id = "choice1">
</div>
</div>
<div class = "form-group">
<label for = "choice #2" class = "col-sm-2 control-label">Choice #2</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['choice2'];?>" name = "choice2" id = "choice2">
</div>
</div>
<div class = "form-group">
<label for = "choice #3" class = "col-sm-2 control-label">Choice #3</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['choice3'];?>" name = "choice3" id = "choice3">
</div>
</div>
<div class = "form-group">
<label for = "Correct Choice Number:" class = "col-sm-2 control-label">Correct Choice Number:</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['is_correct'];?>" name = "is_correct" id = "is_correct">
</div>
</div>
<div class = "col-sm-offset-2">
<button type = "submit" class = "btn btn-default" name = "submit_user" id = "subject">Submit</button>
<button type = "cancel" class = "btn btn-raised"><a href = "http://localhost/quizzeradmin/admin/searchquestions.php">Cancel</a></button>
</div>
</form>
Обновлениевопросы:
<?php
include 'includes/db.php';
if (isset($_POST['submit_user']))
{
$questiontext = $_POST['question_text'];
$id=$_POST['question_number'];
$correct_choice = $_POST['correct_choice'];
$choices = array();
$choices[1] = $_POST['choice1'];
$choices[2] = $_POST['choice2'];
$choices[3] = $_POST['choice3'];
$choices[4] = $_POST['choice4'];
$choices[5] = $_POST['choice5'];
$query = "UPDATE questions SET text='$questiontext' WHERE question_number = $id";
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
if ($insert_row) {
foreach($choices as $choice => $value){
if ($value != ''){
if ($correct_choice == $choice){
$is_correct = 1;
} else {
$is_correct = 0;
}
$query = "UPDATE choices SET is_correct='$is_correct', text='$value' WHERE question_number=$id";
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
if ($insert_row){
continue;
} else {
die('Error : ('.$mysqli->errno . ') '. $mysqli->error);
}
}
}
$msg = 'Question has been added';
}
}
?>
Если я попытаюсь обновить запись, все поля обновятся с одними и теми же данными.






ПРЕДУПРЕЖДЕНИЕ. Не создавайте операторы SQL, объединяя данные с SQL. Используйте подготовленные операторы.
Что касается вашей проблемы, вы используете внешний ключ вопроса для обновления вариантов. Ключ не является первичным ключом выбора и не уникален. Попробуйте использовать уникальный первичный ключ для вашего SQL.
Вместо этого:
$query = "UPDATE choices SET is_correct='$is_correct', text='$value' WHERE question_number=$id";
попробуй это:
$query = "UPDATE choices SET is_correct='$is_correct', text='$value' WHERE id=$choice ";
Но, конечно, вы действительно должны попытаться сделать это снова, используя вместо этого подготовленные операторы!
<form class = "form-horizontal" action = "updatequestions.php" method = "post" role = "form">
<?php if (isset($msg)) {?>
<div class = "<?php echo $msgclass; ?>" id = "mydiv" style = "padding:5px;"><?php echo $msg; ?></div>
<?php } ?>
<input type='hidden' value='<?=$id;?>' name='question_number'>
<h2>Edit A Question</h1>
<div class = "form-group">
<label for = "questionno" class = "col-sm-2 control-label">Question Number</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['question_number'];?>"
name = "question_number" id = "question_number" readonly>
</div>
</div>
<div class = "form-group">
<label for = "question" class = "col-sm-2 control-label">Question</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "<?php echo $oppointArr['text'];?>" name = "question_text" id = "question_text">
</div>
</div>
<input type='hidden' value='<?=$id;?>' name='id'>
<h2>Edit A Choice</h1>
<?php
$choicesql = "SELECT * FROM `choices` WHERE question_number = $id ";
$ChoicetArr =array();
$choiceresult = mysqli_query($mysqli,$choicesql);
$inc=1;
$correctAns = "";
if (mysqli_num_rows($choiceresult) > 0)
{
while($rows = mysqli_fetch_array($choiceresult))
{
$ChoicetArr[] = $rows;
?>
<div class = "form-group">
<label for = "choice #<?php echo $inc;?>" class = "col-sm-2 control-label">Choice #<?php echo $inc;?></label>
<div class = "col-sm-5">
<input type = "hidden" name = "choice_id<?php echo $inc;?>" value = "<?php echo $rows['id'];?>">
<input type = "text" class = "form-control" value = "<?php echo $rows['text'];?>" name = "choice<?php echo $inc;?>" id = "choice<?php echo $inc;?>">
</div>
</div>
<?php
//print_r($rows);
if ($rows['is_correct']= = "1"){
$correctAns = '<input type = "hidden" name = "choice_id'.$inc.'" value = "'.$rows['id'].'"><div class = "form-group">
<label for = "Correct Choice Number:" class = "col-sm-2 control-label">Correct Choice Number:</label>
<div class = "col-sm-5">
<input type = "text" class = "form-control" value = "'.$inc.'" name = "is_correct" id = "is_correct">
</div>
</div>';
}
$inc++;
}
}
echo $correctAns;
?>
<div class = "col-sm-offset-2">
<button type = "submit" class = "btn btn-default" name = "submit_user" id = "subject">Submit</button>
<button type = "cancel" class = "btn btn-raised"><a href = "searchquestions.php">Cancel</a></button>
</div>
</form>
updatequestions.php
<?php
include 'includes/db.php';
if (isset($_POST['submit_user']))
{
$questiontext = $_POST['question_text'];
$id=$_POST['question_number'];
$correct_choice = $_POST['is_correct'];
$choices = array();
$choices[] = array("question"=>$_POST['choice1'], "answer"=>$_POST['choice_id1']);
$choices[] = array("question"=>$_POST['choice2'], "answer"=>$_POST['choice_id2']);
$choices[] = array("question"=>$_POST['choice3'], "answer"=>$_POST['choice_id3']);
$choices[] = array("question"=>$_POST['choice4'], "answer"=>$_POST['choice_id4']);
$choices[] = array("question"=>$_POST['choice5'], "answer"=>$_POST['choice_id5']);
$query = "UPDATE questions SET text='$questiontext' WHERE question_number = $id";
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
if ($insert_row)
{
$inc= 0;
foreach($choices as $choice => $value){
if (count($value)>0){
$answerInc = $choice+1;
if ($correct_choice == $answerInc){
$is_correct = 1;
} else {
$is_correct = 0;
}
$text= $value['question'];
$answer = $value['answer'];
//echo "<br>".$text;
//print_r($value);
echo $answerInc;
echo "<br>";
echo $query = "UPDATE choices SET is_correct='$is_correct', text='$text' WHERE id=$answer";
$insert_row = $mysqli->query($query) or die($mysqli->error.__LINE__);
if ($insert_row){
continue;
} else {
die('Error : ('.$mysqli->errno . ') '. $mysqli->error);
}
}
$inc++;
}
$msg = 'Question has been Updated Successfully';
header("location:searchquestions.php");
exit;
}
}
?>