我有两页。 Index.php和我的Login.php。
我正在使用下拉菜单表单登录 - 当用户按下“登录”时,数据将被发送到Login.php。当密码/用户名正确时(它们会被发送到仪表板),这一切都没问题。
但是我怎么能在表格中显示错误呢?目前,当用户名/密码错误时,它会将您发送到新的空白页面。我希望错误出现在表单上。
我的表格:
<div class="form-group">
<label class="sr-only" for="username">Username</label>
<input type="text" class="form-control" name="user_name" placeholder="Username" required>
</div>
<div class="form-group">
<label class="sr-only" for="password">Password</label>
<input type="password" class="form-control" name="user_password" placeholder="Password" required>
</div>
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success btn-block">Sign in</button>
</div>
我的login.php:
error_reporting(E_ALL);
session_start();
$con = mysqli_connect("localhost", "root", "", "battlesql");
if (!$con) {
echo "<div>";
echo "Failed to connect to MySQL: ".mysqli_connect_error();
echo "</div>";
} else {
if (isset($_POST['user_name']) && isset($_POST['user_password'])) {
$username = stripslashes($username);
$username = mysqli_real_escape_string($con, $_POST['user_name']);
$pass = stripslashes($pass);
$pass = mysqli_real_escape_string($con, $_POST['user_password']);
$pass_hashed = hash('whirlpool', $pass);
$select_user = "SELECT * from accounts where name='$username' AND password='$pass_hashed' LIMIT 1";
$query = mysqli_query($con, $select_user);
$row = mysqli_num_rows($query);
if (!$row) {
echo "<div>";
echo "No existing user or wrong password.";
echo "</div>";
} else {
echo "<div>";
echo "You have been logged in.";
echo "</div>";
}
} else {
echo "MySQL error!";
}
}
答案 0 :(得分:1)
在您的login.php中,不要回显“没有现有用户或密码错误”,请使用:
if(!$row)
{
die(header("location:index.php?loginFailed=true&reason=password"));
}
在index.php中,您可以生成以下消息:
<button type="submit" class="btn btn-success btn-block">Sign in</button>
<?php $reasons = array("password" => "Wrong Username or Password", "blank" => "You have left one or more fields blank."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>
答案 1 :(得分:0)
您可以使用ajax(asynchronous JavaScript and XML)
实现所需目标。使用login.php
电话从index.php
向ajax
发送登录数据。阅读ajax
调用返回的回复并显示错误/成功消息。
您可以使用jquery $.ajax({});
函数来实现此模型。如果您在实施$.ajax()
功能时遇到问题,那么您可以阅读所有相关内容 here 。
此外,如果您还没有这样做,我建议您在发送密码encrypt
之前login.php
。
答案 2 :(得分:0)
有很多方法可以做到这一点,但我会为你提供一个。
查看您的PHP代码,我不确定您重定向到&#34;仪表板的位置&#34;是的,但是你说你有这样的代码:
<?php
//Fetch stuff from the database
if($fetchedUsername == $username and $fetchedPassword == $password)
{
header("Location:/dashboard");
return;
}
?>
然后,要将它们发送回登录表单,您只需在else语句中添加一些内容:
<?php
if(........)
{
//Redirect to dashboard
}
else
{
header("Location:/login");
return;
}
?>
这会将它们发送回表格。现在你想显示一个错误,所以一种方法是设置一个GET变量,所以在else语句中,将标题改为:
header("Location:/login/?error=1");
这将让您检查登录页面上的错误代码。
所以登录页面代码。您可以使用isset()
和内联PHP回声将错误直接打印到表单中。像这样:
<form>
//Form stuff
<?php if(isset($_GET["error"])):?>
<div class="error">Invalid Username or Password</div>
<?php endif; ?>
</form>
通过这种方式,您可以设置div.error
样式,而无需担心在未设置$_GET["error"]
时显示空包装。
您还可以使用内联PHP使代码回显更短:
<?=(isset($_GET["error"])) ? "Invalid Username or Password" : ""?>