Получение одинаковых данных для всех записей для редактирования и обновления записи в php - PullRequest
0 голосов
/ 07 марта 2019

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

Вопросы:

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> 

Updatequestions:

<?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';
    }
}
?>

Если я пытаюсь обновить запись, все поля обновляются с одинаковыми данными.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019
<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;
    }
    }
 ?>
0 голосов
/ 07 марта 2019

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

Но, конечно, вы действительно должны попытаться сделатьвместо этого все сначала с использованием подготовленных операторов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...