Javascript 无法通过php mysql从数组中插入特定段

Javascript 无法通过php mysql从数组中插入特定段,javascript,php,mysql,Javascript,Php,Mysql,我有一个我正在制作的网页,可以让用户为在线测验创建一系列问题。除了我有一个无法解决的问题外,这个页面大部分都正常工作 问题是,当我单击“保存”时,问题和答案被正确保存,但它们是一个复选框,用于指示答案是否正确,以及是否被正确保存。发生的情况是,如果我有三个问题,它会保存第一个问题的前三个可能答案,所有问题的行中都保存了“是”值,我不知道为什么 下面是我从表单中获取信息并通过PHP插入mysql的PHP代码 //if save was clicked if(isset($_POST['saveit

我有一个我正在制作的网页,可以让用户为在线测验创建一系列问题。除了我有一个无法解决的问题外,这个页面大部分都正常工作

问题是,当我单击“保存”时,问题和答案被正确保存,但它们是一个复选框,用于指示答案是否正确,以及是否被正确保存。发生的情况是,如果我有三个问题,它会保存第一个问题的前三个可能答案,所有问题的行中都保存了“是”值,我不知道为什么

下面是我从表单中获取信息并通过PHP插入mysql的PHP代码

//if save was clicked
if(isset($_POST['saveit']))
{
    $tmodnameid = $_POST['tmodnameid'];
    $tmodnameid = mysqli_real_escape_string($dbc, $tmodnameid);

    mysqli_query($dbc, "INSERT into training_quizs(tmoduleid, quiz_createdon, quiz_created_by) VALUES('$tmodnameid','$timedate_rightnowis','$myuid')");
    $quizid = mysqli_insert_id($dbc);

    //lets save all the questions and answers. Each question can potentially have 6 answers
    $n = 0;
    $newquestion = $_POST['newquestion'];
    foreach($newquestion as $aquestion)
    { 

        mysqli_query($dbc, "INSERT into training_quizs_questions(quizid, qquestion) VALUES('$quizid','$aquestion')");
        $questionrowid = mysqli_insert_id($dbc);

        //lets save each of this questions answers

        //save first potential answer for this question
        $answera = $_POST['answera'][$n];
        $isanswera = $_POST['isanswera'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answera','$isanswera')");

        //save second potential answer for this question
        $answerb = $_POST['answerb'][$n];
        $isanswerb = $_POST['isanswerb'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answerb','$isanswerb')");

        //save third potential answer for this question
        $answerc = $_POST['answerc'][$n];
        $isanswerc = $_POST['isanswerc'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answerc','$isanswerc')");

        //save fourth potential answer for this question
        $answerd = $_POST['answerd'][$n];
        $isanswerd = $_POST['isanswerd'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answerd','$isanswerd')");

        //save fifth potential answer for this question
        $answere = $_POST['answere'][$n];
        $isanswere = $_POST['isanswere'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answere','$isanswere')");

        //save sixth potential answer for this question
        $answerf = $_POST['answerf'][$n];
        $isanswerf = $_POST['isanswerf'][$n];
        mysqli_query($dbc, "INSERT into training_quizs_answers(qarowid, answer, isanswer) VALUES('$questionrowid','$answerf','$isanswerf')");

        $n++;
    }

    //get rid of any blank rows that were created 
    mysqli_query($dbc, "DELETE from training_quizs_answers WHERE answer=''");
    echo "<div class='alert alert-success'>                
            <h4>Success!</h4>
            You successfully setup a new quiz from the training module.
        </div>";

    }
//如果单击了保存
如果(isset($_POST['saveit']))
{
$tmodnameid=$\u POST['tmodnameid'];
$tmodnameid=mysqli\u real\u escape\u字符串($dbc,$tmodnameid);
mysqli_query($dbc,“插入到培训_quizs(tmoduleid,quick_createdon,quick_created_by)值(“$tmodnameid”,“$timedate_rightnowis”,“$myuid”));
$quizid=mysqli\u insert\u id($dbc);
//让我们保存所有问题和答案。每个问题可能有6个答案
$n=0;
$newquestion=$_POST['newquestion'];
foreach($newquestion作为$aquestion)
{ 
mysqli_query($dbc,“在训练中插入问题(quizid,qquestion)值(“$quizid”,“$aquestion”)”);
$questionrowid=mysqli\u insert\u id($dbc);
//让我们保存每个问题和答案
//保存此问题的第一个可能答案
$answera=$_POST['answera'][$n];
$isanswera=$_POST['isanswera'][$n];
mysqli_query($dbc,“插入到培训_-quizs_答案(qarowid,answer,isanswer)值($questionrowid’,$answera’,$isanswera'));
//保存此问题的第二个可能答案
$answerb=$_POST['answerb'][$n];
$isanswerb=$_POST['isanswerb'][$n];
mysqli_query($dbc,“插入到培训问答(qarowid,answer,isanswer)值($questionrowid’,$answerb’,$isanswerb'));
//保存此问题的第三个可能答案
$answerc=$_POST['answerc'][$n];
$isanswerc=$_POST['isanswerc'][$n];
mysqli_query($dbc,“插入到培训问答(qarwid,answer,isanswer)值($questionrowid'、$answerc'、$isanswerc'));
//保存此问题的第四个可能答案
$answerd=$_POST['answerd'][$n];
$isanswerd=$_POST['isanswerd'][$n];
mysqli_query($dbc,“在培训问答(qarowid,answer,isanswer)中插入值($questionrowid’、$answerd’、$isanswerd’)”);
//为这个问题保留第五个可能的答案
$ANSARE=$_POST['ANSARE'][$n];
$isanswere=$_POST['isanswere'][$n];
mysqli_query($dbc,“插入到培训_quizs_答案(qarowid,answer,isanswer)值(“$questionrowid”,“$answere”,“$isanswere”)”);
//保存此问题的第六个可能答案
$answerf=$_POST['answerf'][$n];
$isanswerf=$_POST['isanswerf'][$n];
mysqli_query($dbc,“在训练中插入问答(qarwid,answer,isanswer)值($questionrowid’、$answerf’、$isanswerf’)”);
$n++;
}
//清除所有创建的空白行
mysqli_query($dbc,“从培训中删除答案,其中答案=”);
回声“
成功!
您已成功地从培训模块中设置了新的测验。
";
}
我的HTML在下面。我有一个javascript,它允许用户单击按钮并根据需要动态添加任意数量的问题/答案文本框

<head>
          <script language="javascript">
fields = 2;
function addInput() {
if (fields != 50) {
document.getElementById('text').innerHTML += "<br /><br />" + fields +") Question<br />    <textarea name='newquestion[]' /></textarea><br />ANSWERS:<br /><div style='float:left;     padding-right:20px'> A) <input type='text' name='answera[]' size='90'/></div><div     style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswera[]'     value='yes'> is answer</div><br style='clear:both'><div style='float:left; padding-right:20px'> B) <input type='text' name='answerb[]' size='90'/></div><div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerb[]' value='yes'> is answer</div><br style='clear:both'/><div style='float:left; padding-right:20px'> C) <input type='text' name='answerc[]' size='90'/></div><div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerc[]' value='yes'> is answer</div> <br style='clear:both'/><div style='float:left; padding-right:20px'> D) <input type='text' name='answerd[]' size='90'/></div><div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerd[]' value='yes'> is answer</div><br style='clear:both'/><div style='float:left; padding-right:20px'> E) <input type='text' name='answere[]' size='90'/></div><div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswere[]' value='yes'> is answer</div><br style='clear:both'/><div style='float:left; padding-right:20px'> F) <input type='text' name='answerf[]' size='90'/></div><div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerf[]' value='yes'> is answer</div><br /><br style='clear:both'>";
fields += 1;
} else {
document.getElementById('text').innerHTML += "<br />Only 50 questions are able to be     created.";
document.form.add.disabled=true;
}
}
</script>
</head>
<body>
<form method='POST' action='' enctype='multipart/form-data' name='form1' id='form1'>
    <div class="row-form clearfix">
        <div class="span4">
            Training Module Name 
            <select name='tmodnameid'>
            <?php
                //lets select all training modules that have not quiz yet
                $tlistsql = mysqli_query($dbc, "SELECT tmoduleid, tmodule_name FROM training_modules WHERE tmodule_quizid='' ORDER by tmodule_name desc");
                while($tlistrow = mysqli_fetch_array($tlistsql))
                {
                    $tmoduleid = $tlistrow['tmoduleid'];
                    $tmodule_name = stripslashes($tlistrow['tmodule_name']);
                    echo "<option value='$tmoduleid'>$tmodule_name</option>";
                }
            ?>
            </select>
        </div> 
    </div> 

    <div class="row-form clearfix">
        <input type="button" onclick="addInput()" name="add" value="Add Question" />
        <br />
        <br />
        1) Question
        <br />
        <textarea name='newquestion[]' /></textarea>
        <br />
        ANSWERS:
        <br />
        <div style='float:left; padding-right:20px'> A) <input type='text' name='answera[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswera[]' value='yes'> is answer</div>
        <br style='clear:both'>

        <div style='float:left; padding-right:20px'> B) <input type='text' name='answerb[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerb[]' value='yes'> is answer</div>
        <br style='clear:both'/>

        <div style='float:left; padding-right:20px'> C) <input type='text' name='answerc[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerc[]' value='yes'> is answer</div>
        <br style='clear:both'/>

        <div style='float:left; padding-right:20px'> D) <input type='text' name='answerd[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerd[]' value='yes'> is answer</div>
        <br style='clear:both'/>

        <div style='float:left; padding-right:20px'> E) <input type='text' name='answere[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswere[]' value='yes'> is answer</div>
        <br style='clear:both'/>

        <div style='float:left; padding-right:20px'> F) <input type='text' name='answerf[]' size='90'/></div>
        <div style='float:left; padding-top:20px!important'> <input type='checkbox' name='isanswerf[]' value='yes'> is answer</div>
        <br /><br style='clear:both'>
        <div id='text'>

        </div>                          
    </div>

    <div class="footer tar">
        <input type='submit' name='saveit' value='Save' is='submit' class='btn'></form>
    </div>            
</body>

字段=2;
函数addInput(){
如果(字段!=50){
document.getElementById('text').innerHTML+=“

”+字段+)问题

答案:
A)是答案
B)是答案
C)是答案
D)是答案
E)是答案
F)是答案
; 字段+=1; }否则{ document.getElementById('text')。innerHTML+=“
只能创建50个问题。”; document.form.add.disabled=true; } } 培训模块名称
未选中的框将不会发布任何内容,就好像它们不存在一样。可以做很多事情来收紧代码,但我不会在这里全力以赴。一个快速解决方法是为复选框
name
值设置显式键:

<input type='checkbox' name='isanswere[0]' value='yes'>
<input type='checkbox' name='isanswere[1]' value='yes'>
<input type='checkbox' name='isanswere[2]' value='yes'>
etc.

这样,
$\u POST['isanswere'][$n];
将与您认为的复选框相对应。我建议对您的答案字段也这样做。

我认为您的意思是“有一个复选框”,而不是“他们的是一个复选框”。感谢语法更正。任何代码建议?;)只有复选框以表单形式提交。因此,
$\u POST['answera'][0]
不是第一行的复选框,而是选中的第一个复选框。啊,是的。那么根据我的代码,我如何识别哪个答案是“是”“在其复选框中。每个问题都有6个可能的答案,对于任何给定的问题集,6个复选框中只有一个具有“是”值。再问一个问题。我尝试了$answera=$\u POST['answera'][$n];$answera=mysqli\u real\u escape\u string($dbc,$answera);$isanswera=$\u POST['isanswera'][$n]$isanswera=mysqli\u real\u escape\u string($dbc,$isanswera);既然mysqli\u real\u escape\u string()因为帖子是数组而无法工作,我应该如何对$\u post[]进行sanatize处理?我想你可能需要检查该键是否存在,否则你会在php中得到一个引用错误:
$isanswere=array\u key\u存在($n,$\u post['isanswere'])