为所有记录获取相同的数据,以便在php

时间:2019-03-07 19:04:41

标签: php mysql mysqli

我有两个不同的数据库表问题和选项,其中我要在一个表中插入问题,而在另一个表中有多个选择,其中问题表id是选项表中的外键。

问题:

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

如果我尝试更新记录,则所有字段都将使用相同的数据进行更新。

2 个答案:

答案 0 :(得分:0)

警告:请勿通过将数据与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 ";

但是,您当然应该真正地尝试使用准备好的语句来重新做一遍!

答案 1 :(得分:0)

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