我是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>";
}
?>
感谢。如果以前曾经问过这个问题,我很抱歉,我确实检查过但找不到任何东西。
答案 0 :(得分:2)
您可以使用此代码:
require("config.php");
if(isset($_POST['username']) && isset($_POST['password'])){
// your other code in here
}
isset()
检查变量是否设置而不是null。您现在收到的错误可能是因为username
或password
输入为空时正在提交登录表单。
此外,如果您想使用$_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;
}
}