【问题标题】:Problem while summing good answers on online quiz system在在线测验系统上总结好的答案时出现问题
【发布时间】:2018-11-05 23:47:00
【问题描述】:

我正在尝试为驾驶学校构建在线测验系统。 他们要求我将问题和答案添加到数据库中。我确实做到了,但问题是我很难知道答案是否正确。

我用来生成表单的代码是这样的:

 $sql = mysql_query("SELECT * FROM questions ORDER BY question_id ASC");


                        while($row = mysql_fetch_array($sql)){
                            echo ' 

                            <section>
                            <h1>'.$row['question'].'?</h4>
                                </br> <hr> </br>

                                <div class="row">
                                <div class="col-sm-4 foto pb-2">
<img  src="" style="max-width:100%;height: auto;" >
</div>
   <div class="col-12 col-sm-8">
   <div class="pergjigjet mb-2 pl-2 pr-2" style="padding-left: .5rem!important;padding-right: .5rem!important;margin-bottom: .5rem!important;">
   <div class="pergjigje">
   <label><input type="checkbox" name="q_'.$row['question_id'].'_a_1" value="1"> '.$row['answer1'].'.</label>
   </div>
   <div class="pergjigje">
   <label><input type="checkbox" name="q_'.$row['question_id'].'_a_2" value="1"> '.$row['answer2'].'.</label>
   </div>
   <div class="pergjigje"><label>
   <input type="checkbox" name="q_'.$row['question_id'].'_a_3" value="1"> '.$row['answere'].'.</label>
   </div>
   </div>
</div>
</section>

测验共有 30 个问题和最多 3 个正确答案。 如果你没有选择所有正确的答案,那它一定是错误的。这意味着如果您没有为问题选择正确的答案,您将不会获得积分。

帖子数据的数组是这样的。

    array(4) {
  ["q_1_a_1"]=>
  string(1) "1"
  ["q_1_a_2"]=>
  string(1) "1"
  ["q_2_a_1"]=>
  string(1) "1"
  ["q_2_a_2"]=>
  string(1) "1"
}

桌子是这样的,

id, 
question_id, 
exam_id, 
question, 
answer1,  
answer2,
answer3,
CorrectAnswers,
QuestionPoints

我以这种格式存储正确答案

1,2

P.S 客户要求我使用 mysql,而不是 mysqli 或 PDO

【问题讨论】:

  • 基于 mysql_* 的函数已弃用,不应使用。 mysqli 和 PDO 都与 mysql 服务器一起工作。客户端或 Maj 都误解了它们是什么。
  • “P.S 客户要求我使用 mysql,而不是 mysqli 或 PDO” - 我希望这仅在 INTRANET 中使用,如果他们希望您不要使用更多最新且更安全的 mysql api,它提供了准备好的语句。 INTRA 与否,仍应使用它们。我也希望您的客户了解什么是网络/数据安全。
  • P.S 客户要求我使用 mysql,而不是 mysqli 或 PDO:客户是否有编程或一般 IT 知识?从他要求的事实来看,看起来他知道足够危险。你在这里的工作是解释、教导和说服他不要强制执行。有时需要进行演示,例如我告诉客户他自己的密码来自他所做的明文 FTP,认为这是安全的。
  • SO 适用于“专业和狂热的程序员”。如果你得到报酬,你就是一个专业的程序员。专业的建筑商会拒绝客户提出的用弱材料建造楼梯的要求。以同样的方式,专业程序员应该拒绝以邀请网络爬虫的方式构建面向互联网的应用程序的请求。这就是为什么mysql_* API 被淘汰的原因。说真的。
  • 这可能是他们使用旧版本的 PHP 并且没有为运行 mysqli_ 的新版本 PHP 更新他们的代码

标签: php mysql input sum


【解决方案1】:

如果你对答案复选框使用数组样式的名称会更好,并将答案数字放在value中,例如

   <label><input type="checkbox" name="q_'.$row['question_id'].'[]" value="1"> '.$row['answer1'].'.</label>
   </div>
   <div class="pergjigje">
   <label><input type="checkbox" name="q_'.$row['question_id'].'[]" value="2"> '.$row['answer2'].'.</label>
   </div>
   <div class="pergjigje">
   <label><input type="checkbox" name="q_'.$row['question_id'].'[]" value="3"> '.$row['answer3'].'.</label>
   </div>

然后当提交表单时,$_POST['q_1'] 将是所有选定答案的数组。您可以使用implode(",", $_POST['q_1']) 将其转换为字符串,并将此字符串与表中的正确答案列表进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 2020-11-19
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多