登录

时间:2016-10-20 11:26:00

标签: php mysql

我讨厌混淆,但我不确定此时问题是否在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 } ?>

2 个答案:

答案 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的攻击,但这是后来的问题。

相关问题