【问题标题】:Error message showing when page load页面加载时显示的错误消息
【发布时间】:2013-09-20 19:12:49
【问题描述】:

我的页面加载时显示无效代码消息。即使我还没有提交 html 表单。当我通过 html 表单提交无效代码时,它应该会出来。任何想法如何解决这个问题?

$db_selected = mysql_select_db("test", $con);
if (!$db_selected) {
        die ('Database error!' . mysql_error());

}
else{

$row = mysql_query("SELECT * FROM discount_code WHERE disc_code IN('" .implode( "','", $dc_array )."')") or die(mysql_error()); 


if (mysql_num_rows($row) == 0){
echo 'Invalid code';
}
else{
    echo 'success';
}

【问题讨论】:

  • 你有一个 SQL 注入漏洞。

标签: php html mysql sql


【解决方案1】:

您可以使用isset() 来确保表单已实际提交。

假设你的表格是:

<form action="post" "somefile.php"> 
  <input type="text" name="username" />
  <input type="text" name="password" />
  <input type="submit" name="yourSubmitFormButton" />
</form>

然后你可以使用以下内容:

if (isset($_POST['yourSubmitFormButton'])) {
  // code goes here
}

因此,当您加载页面时,isset 条件将评估为FALSE,而if 块中的代码将不会被执行。当按下提交按钮时,条件将评估为TRUE,并且将执行后续语句。

此外,按照目前的编写方式,您的代码容易受到 SQL 注入的攻击。在将用户输入插入查询之前,您应该转义它们。

$dc_array = mysql_real_escape_string($dc_array);
//code

更好的是,停止使用已弃用的 mysql_* 函数并切换到 PDO 或 MySQLi,并学习使用参数化查询。

【讨论】:

    【解决方案2】:

    你应该用

    包装你的代码
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {}
    

    确保只有在发送 post 请求(发送表单)后才会执行。

    当然,您也应该使用PDOmysqli 而不是mysql_* 并考虑prepared statements

    【讨论】:

    • 如果总是POSTstrtolower 的意义何在。此外,您的答案不正确 - 您不应该检查它是否是 POST。您应该检查是否从正确的表单中获取数据
    • @MarcinOrlowski 你是对的,它可以跳过没有任何问题。已编辑。
    • @MarcinOrlowski 我想只有一种形式,因为没有人说那是两种或更多。在大多数情况下,我们每页只使用一个表单。
    • 不过,你的答案是错误的。如果我只是通过 POST 请求页面,您的代码将像提交表单一样执行。您应该始终检查相关数据,例如其他答案。
    • @MarcinOrlowski 此代码必须检查是否有 POST 请求。它不验证或以其他方式检查发送的数据。它必须在该语句之后的下一行中完成。你想让我在这里提供完整的应用程序代码吗?我认为 OP 不需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多