我对PHP编程相当陌生,仍然在熟悉方法和语法。目前,我对session
还不了解。
我希望用户在表单上输入不正确的登录详细信息时获得"用户不存在或不正确的登录详细信息"的消息。否则,将用户重定向到下一页
我尝试使用PHP的header()
方法,但当我把它放在alert()
消息行之后,我的alert()
消息甚至没有显示。
nextpage.php
<?php
if(isset($_POST['btnLogin'])){
$con = mysqli_connect("localhost","root","","myDb")or die("cannot connect");
if(!$con){
die("Connection failed: " . mysqli_connect_errno() );
}
$studentNo = $_POST['studentNo'];
$username = $_POST['userName'];
$password = $_POST['password'];
$selectQuery = "SELECT * FROM registered WHERE student_no = '$studentNo' AND username = '$username' AND password = '$password' ";
$result = mysqli_query($con,$selectQuery);
if(mysqli_num_rows($result) == 0){
echo '<script language="javascript">';
echo 'alert("User doesn''t exist or incorrect login details")';
echo '</script>';
header("Location: login.php"); //take user back to login.php if user doesn't exist
}else{
//do this if user exists
//get Parameters for studentNo, userName, password
}
}
?>
login。
<form action="nextpage.php" method="POST">
<label>Student No</label>
<input type="text" name="studentNo" placeholder="Student No" required />
<br />
<label>Username</label>
<input type="text" name="userName" placeholder="Username" required />
<br />
<label>Password</label>
<input type="password" name="password" placeholder="Password" required />
<br />
<button type="submit" name="btnLogin">Login</button>
</form>
header()
将用户带回到login.php,但它不显示消息
有没有其他更好的方法来做我想做的事?在重定向到第二页之前,先验证登录详细信息。否则,不要重定向。
我研究并发现我可以通过<form>
或其他javascript语法发布数据。我更愿意学习如何使用普通php
和html
谢谢。
您可以通过在标题本身添加值并在login.php中添加if语句来在登录页面本身显示消息。
例如,将标题更改为header("Location: login.php?error=1");
在你的login.php文件中,添加这个
if(isset($_GET['error']) && $_GET['error'] == "1") {
echo '<div class="alert alert-danger">Login failed</div>
}
编辑:看到CD001的评论,我建议阅读php &Mysql关于如何更好地保护自己免受SQL注入等。
首先,当你已经有echo
'ed输出时,你不能发送header()
。
其次,警报永远不会显示,即使重定向可以工作,因为<script>
不在login.php
上。它不会神奇地存储在某个地方以便稍后显示。
使用session你可以这样做
在你的login.php html代码之前放这个
<?php
session_start();
?>
这将启动会话。当用户提交表单时,在nextpage.php中,首先您需要再次将session_start();
放在脚本的顶部,在进行用户身份验证之后,您可以像这样设置会话
if(mysqli_num_rows($result) == 0){
header("Location: login.php?error=User doesnot exists"); //take user back to login.php if user doesn't exist
}else{
//do this if user exists
//get Parameters for studentNo, userName, password
$_SESSION['user_id'] = '<userId>';
//..
header("Location: <secure_page>");
}
在你重定向用户的secure_page
中,在php脚本中同样在脚本的顶部放置session_start();
然后你可以检查session
if (!isset($_SESSION['user_id']) || $_SESSION['user_id'] != "") {
header("Location: login.php?error=access denied");
}
这将确保未经身份验证的用户无法访问此页面。
关于不显示警告的问题
在你使用javascript代码的脚本中,你需要添加类型。
echo '<script type="text/javascript" language="javascript">';
代码的另一个问题是javascript
只会在你的页面加载后执行,但在响应所有这些之后,你使用header("location:login.php");
将重定向用户而不显示javascript警告
就像其他人说的那样,有更好的方法来做到这一点,但是如果你仍然想要使用你的解决方案,那么这将为你工作:
echo '<script language="javascript">';
echo 'alert("User doesnt exist or incorrect login details");';
echo 'location.href="http://www.yoursite.com/login.php";';
echo '</script>';