【问题标题】:comparing $_get result to db stored value将 $_get 结果与 db 存储值进行比较
【发布时间】:2012-04-28 06:21:32
【问题描述】:

我有一个多项选择测验,通过这样的 URL 发送一个可能的答案

<form method="post" action="test2score.php?q=<?php echo $quiz_id; ?>">

在 test2score.php 页面上它读取并尝试像这样比较值

$ans = mysql_result(mysql_query('select c_answer from quiz where quiz_id = "'.$_GET['q'].'"'),0);
    if ($_POST['answer'] == $ans){
        echo "You got it right!";
    }else if ($_POST['answer'] <> $ans){
        echo "You got it wrong!";
    }

其中 c_answer 是存储在 db 中的正确答案,但即使我选择了正确答案并发布它仍然会回显“你弄错了”

任何帮助将不胜感激。

【问题讨论】:

  • 你的测验只有一个问题
  • sql 注入:example.com/test2score.php?q=1" and "1=1 以及为什么不在会话中保留用户的答案,那么您不必发布/传递任何内容
  • 回声 $_GET['q'];看看你得到了什么?
  • 正如@LawrenceCherone 所说,您的代码容易受到 SQL 注入的攻击!如果您不知道那是什么,或者如何避免,请阅读Bobby Tables。
  • 也许这很重要,单选按钮的答案选择是这样生成的 foreach ($row as $key => $value) { echo "".$value."
    "; }

标签: php mysql forms post get


【解决方案1】:

您的表单method="post" 已发布,您在$_GET['q'] 中的接收值请更正其中一个 或者使用

$_REQUEST['q']`

【讨论】:

    【解决方案2】:

    使用隐藏字段 q 并将该值发布到您的操作页面并使用

    接收该值
    $_POST['q'] and use that in your query.
    

    谢谢。

    【讨论】:

    • 尝试使用隐藏字段,仍然得到回声“你错了”
    • 现在您必须检查`$_POST['answer']`的值。它是来自单选按钮还是复选框?您应该打印此值并手动与 db 值比较它们是否完全相同。
    • 找到了罪魁祸首,回声 $_POST['answer'];没有从电台帖子中得到正确的答案..我正在使用此代码拉起电台 foreach ($row as $key => $value) { echo "" .$value."
      "; }
    【解决方案3】:

    为什么在 $_POST 表单的操作中使用 $_GET 请求?既然您不担心您的用户会看到 q 的值,那么为什么不直接在表单中添加一个隐藏输入,结果为 q:

    <input type="hidden" value=<?php echo $quiz_id ?> name="q" />
    

    然后在您的查询中,检查$_POST['q']

    似乎是实现这一目标的更理智、更合乎逻辑的方式

    【讨论】:

    • 尝试使用隐藏字段,仍然得到回声“你错了”
    【解决方案4】:

    而不是从表单操作传递测验ID,而是从隐藏的表单字段传递它

    如下 将表单操作设置为

    action="test2score.php"
    

    并将隐藏的表单字段作为

    <input type="hidden" name="q" value=<?php echo $quiz_id; ?> />
    

    并获得如下所示的值

    $_POST['q'];
    

    【讨论】:

    • 尝试使用隐藏字段,但它仍然在呼应“你错了”
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多