好吧,
我有表格登录到我的index.php和login.php我检查是否有错误。
我想将消息返回到Index.php,并通过$error_txt
显示消息
以下是我的代码:
Index.php:
<form action="login.php" method="post">
<input type="text" name="username" placeholder="Username" id="user-input" /><br />
<input type="password" name="password" placeholder="Password" id="user-input" /><br />
<input type="submit" name="login" value="Login" id="user-submit" class="btn btn-primary" style="color:white;"/><br />
<a href="register.php">Register</a>
<?php echo $error_txt; ?> <!-- --------- Here I Want show the error message -->
</form>
Login.php:
<?php
if(isset($_POST['login']))
{
$username = mysql_escape_string($_POST['username']);
$password = mysql_escape_string($_POST['password']);
$errors = 0;
try
{
if(strlen($username) == 0)
{
throw new Exception ("The username is empty");
}
if(strlen($password) == 0)
{
throw new Exception ("The password is empty");
}
include ("web/config.php");
$usernameTrueQuery = mysql_query("SELECT * FROM `users` WHERE `Username` = '$username' AND `Password` = '$password' LIMIT 1;");
$usernameTrue = mysql_num_rows($usernameTrueQuery);
if($usernameTrue == 0)
{
throw new Exception ("The username or password is incorrect");
}
} catch (Exception $loginError) {
echo "<div class='alert alert-warning'>
<strong>Error:</strong> ".$loginError->getMessage()."</div> 'n";
$errors = 1;
$error_txt = $loginError->getMessage();
}
if($errors == 0)
{
echo "<div class='alert alert-success'>
<strong>Success</strong> Welcome {$username}!</div> 'n";
}
}
return $error_txt;
header("Location: /index.php");
?>
谢谢..:(
您可以将错误消息存储在cookie中。然而,这也有点丑陋。
稍微好一点:将其存储在会话中。PHP已经可以维护一个会话(而会话id又存储在cookie中(。通过使用会话,消息永远不需要离开服务器。然而,这仍然可能会产生副作用,尤其是如果访问者有多个选项卡打开了您网站的不同页面。他们可能会在某个时候看到他们没有尝试登录的页面上的错误
对于一个没有"记住"某个地方的文本的解决方案,你根本不应该使用重定向。只需包括显示表单所需的另一个页面或其中的一部分。如果您可以包括登录表单(或者如果您需要整个索引页面(,则可以呈现包含错误消息的页面,而无需重定向回index.php。
您也可以通过不发布到login.php
,而是发布到索引页面本身来恢复这一原则。该页面可以检查发布的数据,只有在登录成功的情况下才能重定向到成功页面。
如果您想在同一页面上显示错误消息,那么您必须使用Ajax或在同一页上提交表单(在您的情况下,它将是index.php(
另一种方法是通过get参数传递错误消息,比如index.php?error=错误消息字符串,然后检查是否设置了错误参数,并根据该参数显示您的消息