将isset与mysql_real_escape_string一起使用

时间:2013-05-21 11:48:17

标签: php mysql isset

我是PHP新手,我正在尝试构建一个登录系统。我知道它真的不安全,但它只是一个理解PHP基础知识的大学项目,所以现在这不是问题。

我在表中有我的用户名和密码,如果用户键入正确的用户名和密码组合,我会尝试存储cookie。我想要的页面只有在用户登录时才能访问。

我一直收到未定义的索引通知。我从这篇文章http://notesofgenius.com/how-fix-php-notice-undefined-index/知道我需要在某处添加isset,但我无法确定将其放在我的代码中的位置。使用带有mysql_real_escape_string的isset会让我感到困惑。

我已连接到数据库并在config.php中启动了会话。这是代码:

<?php

require("config.php");
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);   
$result = mysqli_query($con,"SELECT * FROM users
WHERE username='$username' AND password='$password'
"
    );
if($row = mysqli_fetch_array($result))
{
$_SESSION['user'] = 'Person';
header('Location: postarticle.php');
}
else{
echo "<p>Incorrect password</p>";
}
?>

感谢。如果以前曾经问过这个问题,我很抱歉,我确实检查过但找不到任何东西。

2 个答案:

答案 0 :(得分:2)

您可以使用此代码:

require("config.php");
if(isset($_POST['username']) && isset($_POST['password'])){
  // your other code in here
}

isset()检查变量是否设置而不是null。您现在收到的错误可能是因为usernamepassword输入为空时正在提交登录表单。

此外,如果您想使用$_SESSION,则应在$_SESSION['user'] = 'Person';之前添加session_start();

答案 1 :(得分:0)

实际上isset()与转义无关。这两个设施之间没有联系。

此外,如果没有,isset()将不会使您的代码正常工作。它可以为您保存错误消息,以防您以常规方式调用此页面,而无需向其发送表单。 但是,如果您不断收到包含已发送表单的此邮件,请检查表单method并输入name属性。

无论如何,你实际上并不需要isset()

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    require("config.php");
    $username = mysqli_real_escape_string($con, $_POST['username']);
    $password = mysqli_real_escape_string($con, $_POST['password']);   
    $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    $result = mysqli_query($con,$sql);
    if($row = mysqli_fetch_array($result))
    {
        $_SESSION['user'] = 'Person';
        header('Location: postarticle.php');
        exit;

    } else {

        echo "<p>Incorrect password</p>";
        exit;
    }
}