我讨厌混淆,但我不确定此时问题是否在PHP登录不起作用,或者重定向不起作用。 我将在Login.php和我试图重定向到的目标页面中发布到目前为止的内容。
的login.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!"; }}?> }
然后只有一些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 } ?>
答案 0 :(得分:2)
您忘记在提交按钮中添加名称属性,因此if(isset($_POST["Login"]))
始终为false。
更改
<input type="submit" value="Login">
到
<input name="Login" type="submit" value="Login">
答案 1 :(得分:1)
您的问题是,您的input
元素没有与之关联的name
。正如Danyal已经说过的那样。但是你应该为这段代码担心更多。
这不是Code Review所以我只会指出你遇到的明显问题/错误。 (尽管发布代码审查肯定不会受到影响)
首先,获得一个体面的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或{{ 3}}。"SELECT * FROM userdata WHERE user='".$user."' AND pass='".$pass."'"
。这使您容易受到PDO的攻击,而是使用SQL injection。 不要以纯文本格式保存您的密码,而是使用Prepared statements之类的内容并将其结果保存在数据库中。然后,当您需要检查用户是否正确输入了密码时,只需在$_POST
值上再次使用该功能,并根据数据库中的值进行检查。
您可能也容易受到password_hash的攻击,但这是后来的问题。