1

我的页面加载时显示无效代码消息。即使我还没有提交 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';
}
4

2 回答 2

2

你应该用

if ($_SERVER['REQUEST_METHOD'] === 'POST') {}

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

当然,您还应该使用PDOormysqli代替mysql_*并考虑prepared statements.

于 2013-09-16T15:09:19.153 回答
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,并学习使用参数化查询。

于 2013-09-16T15:10:28.210 回答