我一直在尝试创建一个登录表单。我一直在玩下面的代码,仍然无法获得有效的登录表单。
是否有任何错误阻止我的表单工作?无论我在表单中键入什么内容,都会将其设置为“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”
答案 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";
}
}
?>