PHP登录系统

时间:2014-09-12 02:22:06

标签: php html sql login undefined-index

所以我的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"];
}
?>

我目前还不担心密码哈希问题,留下问题主题并获得直接解决方案会很有帮助。

2 个答案:

答案 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并显示错误消息。