所以我的PHP登录系统有点问题。当尝试登录时,继续说用户名/密码不正确,尽管它存储在数据库中并且有一个未定义的索引。 登录页面
<?php include("header.php"); ?>
<?php
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]);
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]);
$password_login_md5 = md5($password_login);
$sql = mysql_query("SELECT id FROM `users` WHERE username='$user_login'AND password='$password_login_md5' LIMIT 1");
$userCount = mysql_num_rows($sql);
if($userCount == 1){
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
}
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
$_SESSION["user_login"] = $user_login;
header("Location: home.php");
exit();
}
}else{
echo '<div class="echo">Username/Password is incorrect</div>';
exit();
}
}
?>
标题页
<?php
mysql_connect("localhost","root") or die("Couldnt connect");
mysql_select_db("pageslip") or die("Couldnt slect db");
?>
<?php
session_start();
if(isset($_SESSION['user_login'])){
$user = $_SESSION["user_login"];
}
else
{
//header("Location: home.php");
}
?>
退出页面
<?php
session_start();
session_destroy();
header("Location: index.php");
?>
主页
<?php
include("header.php");
if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
echo $_SESSION["user_login"];
}
?>
我目前还不担心密码哈希问题,留下问题主题并获得直接解决方案会很有帮助。
答案 0 :(得分:2)
注意:: 我使用mysqli_而不是mysql_,但不要认为mysqli_会自动保护您的应用程序。你需要了解更多。
你没有给出第一个文件的名称,我假设它的 login.php ,而且你没有向我们展示你的表格,所以我创建了自己的简短表格。为了让您了解它,您可以根据需要进行更改。
我创建的排序表单在这里
<form action="login.php" method="POST">
<!--As i gave the file name login.php, if your file name is different you
can change it.-->
Username:<input type="text" name="user_login"><br/>
Password:<input type="password" name="password_login"><br>
<input type="submit">
</form>
现在从这里开始您的代码
对于 Login.php (您可以根据需要更改文件名)
<?php include("header.php"); ?>
<?php
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]);
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]);
//$password_login_md5 = md5($password_login); i removed this line as you say you
//are not worry about the security, at this time.
$sql = mysqli_query($con,"SELECT id FROM `users` WHERE username='$user_login'AND password='$password_login' LIMIT 1")or die(mysqli_error($con));
$userCount = mysqli_num_rows($sql);
if($userCount == 1){
while($row = mysqli_fetch_array($sql)){
$id = $row["id"];
$_SESSION['user_login']=$_POST['user_login'];
}
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
$_SESSION["user_login"] = $user_login;
header("Location: home.php");
exit();
}
}else{
echo '<div class="echo">Username/Password is incorrect</div>';
exit();
}
}
?>
**原因:**它始终显示此消息,用户名/密码不正确,是这个 因为你编码的方式意味着你的查询没有返回任何东西。不是因为您在表单中输入了错误的用户名或密码。这只意味着你没有正确执行你的查询。
**标题页。**
<?php
$con= mysqli_connect('localhost', 'root', '', 'pageslip') or die(mysqli_error($con));
?>
<?php
session_start();
if(isset($_SESSION['user_login'])){
$user = $_SESSION["user_login"];
}
else
{
//header("Location: home.php");
}
?>
退出页面。
<?php
session_start();
session_destroy();
header("Location: index.php");
?>
首页。
<?php
include("header.php");
if(isset($_SESSION["user_login"]) ){
echo $_SESSION["user_login"];
}
?>
//**Note: ** I change this line
//if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){
//to this if(isset($_SESSION["user_login"]) ){
//Means i removed this part && isset($_POST["user_login"])
//Reason i am explaining below
主页上的Reason :: 您无法访问$ _post,变量,Post请求仅适用于操作页面,例如form action =&#34; loging.php&#34;您无法在任何其他页面上访问它。
在我看来,你在想,因为你开始了一个意味着你可以访问帖子请求的会话。这不是会议的工作方式。在会话中,您可以存储该值,并可以在其他页面上访问它。但不是邮寄请求。表示在您离开页面后它被销毁。并且在您的情况下,您将用户重定向到主页,这意味着$ _post中没有任何内容;这就是为什么我删除它。
要理解它最好在主页上做两件事,首先使用 var_dump($ _ session); 并检查它将生成数组的结果,并使用 var_dump($ _ post); 它将给出类似于此数组的结果(0){}表示主页的$ _post中没有任何内容。
希望你能得到这个想法。
你还有一个未定义索引的问题。
这不是大问题。我假设您在表单部分遇到此问题。它只是意味着你没有定义索引。简单地将这个添加到表单的顶部,就像这样。的 $ _讯息[&#39; USER_LOGIN&#39;] =&#34;&#34 ;; 强>
它将消失,对每个未定义的索引错误重复此操作。
答案 1 :(得分:0)
您没有设置会话。你只看过它。因此,if表达式返回false并显示错误消息。