php mysqli登录表单

时间:2016-01-12 19:45:41

标签: php html mysqli

我一直在尝试创建一个登录表单。我一直在玩下面的代码,仍然无法获得有效的登录表单。

是否有任何错误阻止我的表单工作?无论我在表单中键入什么内容,都会将其设置为“login.php”,然后只显示一个空白屏幕。

这是我的HTML

<?php
include('login.php'); // Include Login Script
if ((isset($_SESSION['username']) != '')) 
{
header('Location: home.php');
}
error_reporting(-1);
?>
<form method="post" action="login.php">
<label>Username:</label><br>
<input type="text" name="username" placeholder="username" /><br><br>
<label>Password:</label><br>
<input type="password" name="password" placeholder="password" />  <br><br>
<input type="submit" value="Login" /> 
</form>

这是我的login.php

<?php
session_start();
include("connection.php"); //Establishing connection with our database

$error = ""; //Variable for storing our errors.
if(isset($_POST["submit"]))
{
if(empty($_POST["username"]) || empty($_POST["password"]))
{
$error = "Both fields are required.";
}else
{
// Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];

// To protect from MySQL injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($db, $username);
$password = mysqli_real_escape_string($db, $password);
$password = md5($password);

//Check username and password from database
$sql="SELECT id FROM staff WHERE username='$username' and password='$password'";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

//If username and password exist in our database then create a session.
//Otherwise echo error.

if(mysqli_num_rows($result) == 1)
{
$_SESSION['username'] = $login_user; // Initializing Session
header("location: home.php"); // Redirecting To Other Page
}else
{
$error = "Incorrect username or password.";
}

}
}

?>

我的数据库设置名为'staff',其中包含“id”,“username”,“password”

2 个答案:

答案 0 :(得分:2)

您需要在按钮中添加名称属性name="submit"

<input type="submit" name="submit" value="Login" />

为什么需要

因为您正在检查名称属性提交是否已设置

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

但您没有首先设置按钮名称属性。

旁注

正如评论中提到的其他人一样,您需要保护代码免受 SQL注入。

这是无效的语法:

if ((isset($_SESSION['username']) != ''))

您需要检查会话是否已设置 AND 不等于空/。

if (isset($_SESSION['username']) && $_SESSION['username'] != '')

您也可以将其简化为:

if (!empty($_SESSION['username']))

您的初始表单应包含login.php。最终它将具有session_start()功能,最终看起来更像这样:

<?php
session_start();
if (isset($_SESSION['username']) && $_SESSION['username'] != '')
{
    header('Location: home.php');
}
error_reporting(-1);
?>
<form method="post" action="login.php">
    <label>Username:</label><br>
    <input type="text" name="username" placeholder="username" /><br><br>
    <label>Password:</label><br>
    <input type="password" name="password" placeholder="password" />  <br><br>
    <input type="submit" name="submit" value="Login" /> 
</form>

在这里包含login.php会让你在排除故障和追踪错误方面做噩梦。

你真的不应该使用MD5 password hashes,你真的应该使用PHP的built-in functions来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用password_hash() compatibility pack

还有一件事,don't limit passwords。正如astute cartoon指出的那样,限制密码是当今时代灾难的一种方法。

答案 1 :(得分:-2)

从登录表单中获取电子邮件和密码。 从数据库中选择表user。 其中电子邮件=电子邮件和密码均通过登录表单获取

<?php
if(isset($_POST['login']))
    {
        $email=mysqli_real_escape_string($db, $_POST['email']);
        $password=mysqli_real_escape_string($db, $_POST['password']);

        $login="SELECT * FROM 'user' WHERE 'email' = '$email' AND 'password' = '$password' ";

        $run_login = mysqli_query($db, $login) or die(mysqli_error($db));

        $count = mysqli_num_rows($run_login);
        if($count == 1)
        {
            echo "login success";
        }else
        {
            echo "somthing wrrong";
        }
    }

?>