Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mysql查询中使用已发布的输入数组?_Php_Mysql_Arrays_Forms - Fatal编程技术网

Php 如何在mysql查询中使用已发布的输入数组?

Php 如何在mysql查询中使用已发布的输入数组?,php,mysql,arrays,forms,Php,Mysql,Arrays,Forms,我正在申请一个培训课程,这对我来说还是第一次,所以我遇到了一点麻烦。我有一个表单,培训评估,当提交时,会将一组id和选定答案发送到php页面进行处理。我的想法是运行一个mysql查询,选择正确答案的数量,然后再运行一个mysql查询,选择不同问题的数量,然后将这两个问题分开计算分数。这一部分很简单,但我的头脑正在融化,试图找出选择正确答案计数的问题 这是我表格的代码 <form name="assessment" method="post" action="scripts/scoreAss

我正在申请一个培训课程,这对我来说还是第一次,所以我遇到了一点麻烦。我有一个表单,培训评估,当提交时,会将一组id和选定答案发送到php页面进行处理。我的想法是运行一个mysql查询,选择正确答案的数量,然后再运行一个mysql查询,选择不同问题的数量,然后将这两个问题分开计算分数。这一部分很简单,但我的头脑正在融化,试图找出选择正确答案计数的问题

这是我表格的代码

<form name="assessment" method="post" action="scripts/scoreAssessment.php">
  <ul class="assessment">
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='trainingCourseAnswer[]' type='radio' value='A1'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='B1'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='C1'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='D1'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='trainingCourseAnswer[]' type='radio' value='A2'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='B2'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='C2'/>This is a multiple choice answer.</li>
        <li><input name='trainingCourseAnswer[]' type='radio' value='D2'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <!--continue pattern for total number of questions-->
  </ul>
  <input name='submitAssessment' type='submit' value='Finish Test'/>
</form>
我的问题是$answerID和$selectedAnswer都是具有多个值的数组


有人能提供一些指导吗?我将不胜感激

首先,您会注意到,使用提供的HTML,用户只能从8个选项中选择一个答案。这不是您想要的:您希望每个问题允许一次选择。您可以通过为无线电控件指定不同的名称来解决此问题:每个问题一个唯一的名称。您也不需要数组符号,因为每个问题的答案都不会超过一个:

<form name="assessment" method="post" action="scripts/scoreAssessment.php">
  <ul class="assessment">
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='q1' type='radio' value='A'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='B'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='C'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='D'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='q2' type='radio' value='A'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='B'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='C'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='D'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <!--continue pattern for total number of questions-->
  </ul>
  <input name='submitAssessment' type='submit' value='Finish Test'/>
</form>

请注意,通过这种方式可以避免您的漏洞,因为上面的SQL语句不是由通过POST提交的值定义的。

“具有多个值的数组”-因为每个单选按钮都有相同的名称,单选组由单选按钮的名称确定,你只能在每个单选组中选择一个单选按钮,看起来更可能得到一个具有一个值的数组。但解决方案非常简单:危险:你很容易受到你需要的来自的单选按钮的攻击。正如@Quentin提到的..你需要制作两个表单和两个提交按钮..或者你需要使用Ajax来处理1个提交按钮..在这两种情况下都需要两种形式。@Ernardahan-什么?我没那么说。您不需要多个表单。对于每组单选按钮,您需要不同的名称(作为奖励,这消除了对值进行拆分的需要,因为您不需要在名称中对单选组进行编码)
<form name="assessment" method="post" action="scripts/scoreAssessment.php">
  <ul class="assessment">
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='q1' type='radio' value='A'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='B'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='C'/>This is a multiple choice answer.</li>
        <li><input name='q1' type='radio' value='D'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <li class='question'>This is a question? 
      <ul style='list-style:none;'>
        <li><input name='q2' type='radio' value='A'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='B'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='C'/>This is a multiple choice answer.</li>
        <li><input name='q2' type='radio' value='D'/>This is a multiple choice answer.</li>
      </ul>
    </li>
    <!--continue pattern for total number of questions-->
  </ul>
  <input name='submitAssessment' type='submit' value='Finish Test'/>
</form>
// Connection to database...
$con = mysqli_connect("my_host", "my_user", "my_password", "my_db");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Read all correct answers from the database:
$query = "SELECT answerID, correctAnswer FROM answerTable";
$result = mysqli_query($con, $sql);

// Fetch all records into an associative array
$correctAnswers = mysqli_fetch_all($result, MYSQLI_ASSOC);

// Count correct answers provided by user (via POST)
$correctCount = 0;
foreach ($correctAnswers as $correctAnswer) {
    $answerID = $correctAnswer['answerID'];
    if (isset($_POST["q$answerID"])
            && $_POST["q$answerID"] == $correctAnswer['correctAnswer']) {
        $correctCount++;
    }
}
// Score is fraction between 0 and 1. Multiply by 100 for a percentage
$score = $correctCount / count($correctAnswers);