我在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.php
<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
我希望你能帮助我。
谢谢。
答案 0 :(得分:0)
您可以在登录页面上显示一条消息,方法是在标题本身上添加一个值,并在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>
}
答案 1 :(得分:0)
首先,当您已经header()
输出时,您无法发送echo
。
其次,即使重定向有效,警报也不会显示,因为<script>
不在login.php
上。它不是神奇地存储在某个地方以便稍后出现。
答案 2 :(得分:0)
使用会话,您可以这样做
在html代码之前的 login.php 中添加此
<?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();
,之后您可以检查会话
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");
后重定向用户而不显示< strong> javascript警告
答案 3 :(得分:0)
好像其他人说有更好的方法可以做到这一点,但如果你仍然想要使用你的解决方案,那么这对你有用:
echo '<script language="javascript">';
echo 'alert("User doesnt exist or incorrect login details");';
echo 'location.href="http://www.yoursite.com/login.php";';
echo '</script>';
删除php标头重定向。