我讨厌让人困惑,但我不确定在这一点上,如果问题在于PHP登录不工作,或者如果重定向不工作。我将在Login.php和我试图重定向到的目标页面中发布我到目前为止所拥有的内容。
login:
<?php if(isset($_POST["Login"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])) {
$user=$_POST['user'];
$pass=$_POST['pass'];
$con=mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('users') or die("cannot select DB");
$query=mysql_query("SELECT * FROM userdata WHERE user='".$user."' AND pass='".$pass."'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{
while($row=mysql_fetch_assoc($query))
{
$dbusername=$row['user'];
$dbpassword=$row['pass'];
}
if($user == $dbusername && $pass == $dbpassword)
{
session_start();
$_SESSION['sess_user']=$user;
/* Redirect browser */
header("Location: ./Programs/Content/Home.php");
}
} else {
echo "Invalid username or password!";
} } else {
echo "All fields are required!"; }}?> }
然后是一些CSS和基本的HTML内容,但这是表单本身:
<div class="login">
<form action="" method=POST>
<center>
<p><input id="user" name="user" type="text" placeholder="Username"></p>
<p><input id="pass" name="pass" type="password" placeholder="Password"></p>
<input type="submit" value="Login">
</center>
</form> </div>
Home.php的头代码:
<?php
session_start();
if(!isset($_SESSION["sess_user"])){
header("location:../../Login.php");
} else {
?>
然后是页面内容,最后是:
<?php } ?>
您忘记为提交按钮添加name属性,因此if(isset($_POST["Login"]))
将始终为false。
<input type="submit" value="Login">
<input name="Login" type="submit" value="Login">
您的问题是您的input
元素没有与之相关的name
。丹雅已经说过了。但是对于这段代码,您应该担心的还有很多。
这不是代码审查,所以我只会指出你有明显的问题/错误。(虽然发布代码审查肯定不会有什么坏处)
首先,找一个合适的IDE来编写你的PHP代码,这将给你自动缩进,这将大大增加可读性,因为你将能够更容易地看到作用域的开始和结束:<?php
if (isset($_POST["Login"])) {
if (!empty($_POST['user']) && !empty($_POST['pass'])) {
$user = $_POST['user'];
$pass = $_POST['pass'];
$con = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('users') or die("cannot select DB");
$query = mysql_query("SELECT * FROM userdata WHERE user='" . $user . "' AND pass='" . $pass . "'");
$numrows = mysql_num_rows($query);
if ($numrows != 0) {
while ($row = mysql_fetch_assoc($query)) {
$dbusername = $row['user'];
$dbpassword = $row['pass'];
}
if ($user == $dbusername && $pass == $dbpassword) {
session_start();
$_SESSION['sess_user'] = $user;
/* Redirect browser */
header("Location: ./Programs/Content/Home.php");
}
} else {
echo "Invalid username or password!";
}
} else {
echo "All fields are required!";
}
}
?>
现在的问题:
- 不要再使用
mysql_*
,这些函数已经被弃用很长时间了,甚至在PHP 7中被删除了,取而代之的是使用MySQLi或PDO。 - 不要在查询中盲目插入用户输入的数据。
"SELECT * FROM userdata WHERE user='".$user."' AND pass='".$pass."'"
。这使你容易受到SQL注入,使用Prepared语句代替。不要以明文形式保存密码,而是使用类似password_hash的东西并将结果保存在数据库中。然后,当您需要检查用户是否正确输入密码时,只需在
$_POST
值上再次使用该功能,并将其与数据库中的值进行检查。您可能也容易受到会话劫持,但这是稍后的问题。