无法检查登录错误(空白)

时间:2015-06-26 06:57:32

标签: php html mysql

我遇到登录验证问题。问题是当我尝试使用admin登录时,页面在checklogin.php上停止,并且不会告诉它是否成功。这是我的代码。

的index.html

    <body>
  <section class="container">
    <div class="login">
      <h1>Aplikasi Pengelola Data Pelatihan dan Seminar</h1>
      <form method="post" action="checklogin.php">
        <p><input type="text" name="username" value="" placeholder="Username or Email"></p>
        <p><input type="password" name="password" value="" placeholder="Password"></p>
        <p class="remember_me">
          <label>
            <input type="checkbox" name="remember_me" id="remember_me">
            Remember me on this computer
          </label>
        </p>
        <p class="submit"><input type="submit" name="commit" value="Login"></p>
      </form>
    </div>

    <div class="login-help">
      <p>Forgot your password? <a href="index.html">Click here to reset it</a>.</p>
    </div>
  </section>
</body>

checklogin.php

    <?php
if (isset($_POST['login']))
{
   if(isset($_POST['username']))
   {
       $username=$_POST['username'];
   }
   if(isset($_POST['password']))
   {
       $password=$_POST['password'];
   }

   // Connect to database.
   $host="localhost"; // Host name.
   $db_user="root"; // MySQL username.
   $db_password=""; // MySQL password.
   $db="seminardanpelatihan"; // Database.
   $con = mysqli_connect($host,$db_user,$db_password,$db);
   if(mysqli_connect_errno())
   {
       echo "Failed to connect : " . mysqli_connect_error();
   }
   else
   {
        mysqli_select_db($con, $db);
        $result = mysqli_query($con, "SELECT * FROM login WHERE username='$username' and password='$password'");
        $count=mysqli_num_rows($result);
        if($count==1)
        {
            $_SESSION['username']= "username";
            $_SESSION['password']= "password";
            header("login_success.php"); // Re-direct to login_success.php
        }
         else
        { 
            echo "Something wrong";
        }
        mysqli_close($con);
   }
}
?>

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

变化

if (isset($_POST['login']))

if (isset($_POST['commit']))

我测试了。 的修改
也改变(不要跳过以前的改变)

      $_SESSION['username']= "username";
      $_SESSION['password']= "password";                
      header("login_success.php");

      $_SESSION['username']= $username;
      $_SESSION['password']= $password;
      header("Location: login_success.php"); //Proper Redirect Method

1)重定向需要Location:前缀
2)您使用"username"代替$username

答案 1 :(得分:0)

首先更改代码的第一行:

   <?php
if (isset($_POST['login']))

   <?php
if (isset($_POST['username']))

如果用户至少发布用户名,这将为您提供执行页面所有代码的选项。我更愿意采取更严格的措施:

   <?php
if (isset($_POST['username'])&&isset($_POST['password'])

因此,如果用户未提交这两个值,您将无法运行代码。 (只有用户名或密码才能通过验证!)

然后:您的问题是您没有从查询中检索值。

mysqli_select_db($con, $db);
$result = mysqli_query($con, "SELECT * FROM login WHERE username='$username' and password='$password'");
$count=mysqli_num_rows($result);
if($count==1)
{

可以检查你是否只有一个结果但是你必须在这些行之后添加:

$row=mysqli_fetch_array($result);
$username = $row['username'];
$password = $row['password'];
session_start();

然后以这种方式编辑以下两个:

$_SESSION['username']= $username;
$_SESSION['password']= $password;

另请注意,我不会将密码存储在$_SESSION数组或代码中的任何其他值中,并建议您对密码使用某种加密方法。