0
if(isset($_POST["email"]))
{
$email = mysql_real_escape_string($_POST["email"]); /* Line 10 */
$password = mysql_real_escape_string($_POST["password"]);

$result = mysql_query("SELECT password, id FROM users WHERE email = '$email'");

if (!$result)
    {
        die('Invalid query: ' . mysql_error());
    }

$row = mysql_fetch_assoc($result);

if($row['password'] == $password)
    {
        ini_set("session.cookie_lifetime","360000");
        session_start();
        $_SESSION['valid_user'] = $row['id'];
        $_SESSION['email'] = $row['email'];
        mysql_close($link);
        header('Location: index.php');
    }


mysql_close($link);
}

我没有发布任何帖子,但它说$email第 10 行没有定义。为什么?我使用EasyPHP

注意:未定义索引:第 10 行 C:\Program Files\EasyPHP-5.3.5.0\www\v0.3\model\login.php 中的电子邮件

4

3 回答 3

5

检查 POST 是否完成的最可靠方法是通过

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... you're in a post ...
}

检查特定的表单字段是有风险的——您可能会重命名/删除该字段而忘记更新表单。但是检查 $_SERVER 值是 100% 可靠的 - 无论通过什么方法调用脚本,它总是可用的。

于 2011-03-08T02:30:28.127 回答
0

它说因为$_POST数组是空的(当然,您没有发布)并且您正在尝试访问该email数组的索引,该索引if(isset($_POST["email"]))不存在。

您可以通过以下方式解决此问题:

if (isset($_POST['email']))
$email = mysql_real_escape_string($_POST["email"]);

注意:这只是一个通知,它不会影响你的应用程序,所以我建议你不要太担心它,你会有一个更干净的代码。这是个人意见,看看为什么你不应该在这里:如何避免 isset() 和 empty()

更新

添加了 isset 功能以防止通知。感谢 deceze。

于 2011-03-08T01:12:00.297 回答
0

array() == false,所以为什么不:

if($_POST)
{
    // stuff
}

有些人不喜欢这样,但我说如果你使用的是动态语言,你不妨利用它。

于 2011-03-08T01:31:48.990 回答