Получение одинаковых данных для всех записей для редактирования и обновления записи в php

У меня есть два разных вопроса и варианты таблиц базы данных, где я вставляю вопросы в одну таблицу и несколько вариантов в другую таблицу, где идентификатор таблицы вопросов является внешним ключом в таблице вариантов.

Вопросы:

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-инъекции и действительно должны использовать параметризованный подготовленные заявления вместо создания запросов вручную. Они предоставляются ЗОП или MySQLi. Никогда не доверяйте никаким данным, особенно тем, которые исходят от клиента. Даже если ваши запросы выполняются только доверенными пользователями, вы все еще рискуете повредить свои данные.
Dharman 07.03.2019 20:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
22
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

ПРЕДУПРЕЖДЕНИЕ. Не создавайте операторы 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;
    }
    }
 ?>

Другие вопросы по теме