Php 返回空白页的简单登录

Php 返回空白页的简单登录,php,Php,我正在学习PHP,我制作了一个简单的登录脚本,但问题是它只会将我重定向到一个空白页面。如果用户凭据正确,它意味着重定向到index.php,但情况显然不是这样?还有验证,因此如果用户输入空白,则返回错误。这似乎没有被执行 login.php <form id="login-form" method="post" action="logininc.php"> <fieldset> <legend>Login </legend> <p

我正在学习PHP,我制作了一个简单的登录脚本,但问题是它只会将我重定向到一个空白页面。如果用户凭据正确,它意味着重定向到index.php,但情况显然不是这样?还有验证,因此如果用户输入空白,则返回错误。这似乎没有被执行

login.php

<form id="login-form" method="post" action="logininc.php"> <fieldset> 
  <legend>Login </legend> 
  <p>Please enter your username and password to access the administrator's panel</p>

   <label for="user"> <input type="text" name="user" placeholder="Type your username here" id="user" /></label> 
   <label for="password"> <input type="password" name="password" placeholder="Type your password here" id="password" /></label>
   <label for="submit"> <input type="submit" class="btn btn-primary"name="submit" id="submit" value="Login" /> </label> </fieldset> </form> 

登录
请输入您的用户名和密码以访问管理员面板

logininc.php//我的处理页面

<?php

require_once("assets/configs/db_config.php");
$user=$_POST['user']; 
$password=$_POST['password'];

if(isset($_POST['login']))
{
//To ensure that none of the fields are blank when submitting the form if
if($user || $password != NULL)
    {
        $user = stripslashes($user);
        $password = stripslashes($password);
        $user = mysqli_real_escape_string($user);
        $password = mysqli_real_escape_string($password);

        $sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'";
        $result=mysqli_query($sql);

        $row=mysql_fetch_array($result);

        if($row['user'] == $user && $row['password'] == $password)
        {
            session_start();
            $_SESSION['user'] = $user;
            $_SESSION['password'] = $password;
            $_SESSION['loggedin'] = "true";
            header("location:index.php");
        }
        else
        {
            print ('<div id="error">Computer says no.</div>');

        }
            print ('<div id="error">Enter something!</div>');

}
}



    ?>

index.php//success页面

 <?php //module to check logins
 session_start();

 if(!isset($_SESSION["loggedIn"])){
     header("Location: login.php");
     exit;
 }
 Echo 'Congratulations <b>'.$_SESSION['user'].'</b> you successfully logged in!!<br />
         Your Password is: <b>'.$_SESSION['password'].'</b><br />
         <a href="login.php">Logout</a>';
 ?>

问题在于
if(设置($\u POST['login'])

您从未在表单中设置“登录”条目

你可以做:

if(isset($_POSt["user"]) && isset($_POST["password"])) {
$user=$_POST['user']; 
$password=$_POST['password'];
//To ensure that none of the fields are blank when submitting the form if
if($user && $password) {

当您将
if(isset($\u POST['login'])
更改为
if(isset($\u POST['submit'])
时会发生什么情况?

$row=mysql\u fetch\u array
应该是
$row=mysqli\u fetch\u array

正如其他人已经提到的,使用

if(isset($_POST['user']) && isset($_POST['password'])) {


// your code here


}
顺便说一句:使用一个只说“loggedin=true”或“login=yes”等的会话是不安全的

编辑(安全讨论):

密码应始终加密保存(注册):

此外,您可以为每个用户创建一个随机salt(注册),以将您的安全级别设置得更高(注意:hash(hash(hash(…))会降低您的安全级别,因为您在散列过程中丢失了信息)


注意:这只是一个具有高安全级别的(工作)示例登录/检查脚本。尽管如此,这个脚本还是可以改进的(bruteforce、mysqli/prepared语句、在表单中直接哈希密码、安全会话等)

首先,提交按钮的名称是“提交”。您正在检查“登录”是否为post

if(isset($_POST['login']))
{
应该是:

if(isset($_POST['submit']))
{
if($user != NULL || $password != NULL)
{
你写了:

if($user || $password != NULL)
{
应该是:

if(isset($_POST['submit']))
{
if($user != NULL || $password != NULL)
{
您使用了mysqli和mysql命令,这不是一个好的实践

$result=mysqli_query($sql);

    $row=mysql_fetch_array($result);
而不是

if($row['user'] == $user && $row['password'] == $password)
    {
//this code again check for condition which is already checked in the sql statement
最好的做法是写:

if($row->num_rows==1)
    {
在index.php中,您已经编写了

if(!isset($_SESSION["loggedIn"])){
应该是的

if(!isset($_SESSION["loggedin"])){

因为您在存储到会话时存储了小写索引。

已经给出了正确的答案,但希望对您的检查进行评论。您的条件是如果$user | |$password!=无效的这相当于说$user是否返回true或者$password是否不是NULL。因此,它不会检查是否同时填写了$user和$password。您需要两个由&&连接的独立条件。(&&=两者都必须返回true,| |是其中一个必须返回true)因此它应该是($user!=NULL&&$password!=NULL)U不应该将密码存储为明文。从不..非常好的代码。你可以在会话上进行eloborate吗?不安全?有人可能通过会话操纵或会话劫持登录到你的网站,因为你的会话中检查的信息只显示“true”,它根本不会绑定到任何用户。我同意会话劫持,但是应该如何操作存储在服务器上的会话对象(默认情况下)?实际上,会话不能仅仅由用户自己设置。$_会话的数据保存在服务器本身,由存储为cookie的密钥查找,但是如果您直接通过未筛选的用户输入分配会话,则可以将$_会话['loggedin']=true。因此,我建议总是让事情有点太安全,例如使用安全信息来检查登录的Stistee,你会考虑什么安全信息?或者你会设置什么会话来跟踪已登录的用户?