我正在用PHP创建一个登录页面,用户在其中输入用户名。如果用户名有效,则将用户重定向到另一个页面,在该页面上打印他们使用的用户名。如果用户名无效,页面会提示他们输入有效的用户名,然后页面会重新加载。
我的问题是将有效的“用户名”变量从登录页面“发布”到用户重定向到的页面。
我知道我可以在登录页面的表单标签中输入:
<form action='pageToPostTo.php' method='POST'>
</form>
但是,我的问题是,一旦用户点击“提交”,这个东西似乎总是重定向到pageToPostTo.php。结果,如果用户名无效,我不知道如何避免这种重定向。
相反,我使用jQuery的“ .ready”和“ .click”来执行JavaScript代码,以验证当用户单击“提交”时用户名是否有效。如果有效,那么将调用Ajax的“ POST”方法。如果无效,则登录页面会提示并重新加载。
function isValid(username) {
return true;
}
$(document).ready(function () {
$('input#submit').click(function (event) {
event.preventDefault();
if(isValid(username.value)) {
postUser();
}
else {
alert("Invalid Username");
location.reload();
}
});
});
postUser()如下所示:
function postUser() {
var username = username.value;
$.ajax({
url: 'pageToPostTo.php',
type: 'POST',
data: {getUsername: username}, // username = "danny"
success: function(response) {
alert(response); // Outputs: "Your username is: danny"
window.location.href = 'pageToPostTo.php'; // Outputs: "Your username is: Notice: Undefined index: getUsername..."
}
});
}
我的Ajax发布对象的“成功”函数中的“警报(响应)”正确评估$ _POST ['getUsername']。这表明我的Ajax帖子运行良好。
这是我的问题所在:当我重定向到pageToPostTo.php时,$ _ POST ['getUsername']停止评估,而是返回“ Notice:Undefined index:getUsername”。
Ajax的“ post”方法似乎有效,但是重定向缺少Ajax“发布”的内容。
在执行Ajax“ post”方法之后,是否有一种方法可以重定向到“ pageToPostTo.php”,这样在重定向之后,我可以使用$ _POST ['getUsername']来检索Ajax发布的内容?>
如果没有,为什么不这样做,我必须有哪些替代方法才能获得相同的功能?
以前,我是使用localStorage.setItem(“ usernameStorage”,username.value)和localStorage.getItem(...)在php文件之间传输变量的。这样做有什么弊端吗?
从我的loginPage.php中截取:
<form name="login">
<p>Username: <input type="text" id="username" ></p>
<input type="submit" id="submit">
</form>
pageToPostTo.php:
<?php
$validUser = $_POST['getUsername'];
echo "Your username is: " . $validUser;
?>
P.S。验证用户名是否有效的函数必须在JavaScript中。
答案 0 :(得分:0)
在这种情况下,您只需要开始使用开发的解决方案即可。像变通一样,我建议您在文件之间传输数据时使用$_SESSION
来存储数据。您的情况:用户登录后,程序验证,如果成功,则将其保存在
$_SESSION['user_id'] = $user_id
之后,您将重定向到文件:pageToPostTo.php:
,首先检查会话中是否存在user_id,如果不存在->重定向到登录页面,如果存在,则将值分配给$ var并执行操作需要这样做。
您必须在同一页面上执行登录php,并且仅在验证成功的情况下进行重定向。这是我的回答的补充。
答案 1 :(得分:0)
您可以在jQuery中使用表单提交而不是单击按钮。
例子:
这是您的html表单:
<form action='pageToPostTo.php' id="action-form" method='POST'></form>
修改后的JQuery脚本:
$("#action-form").submit(function(){
if(!isValid(username.value)) {
alert("Invalid Username");
return false;
}
});
那样,如果用户名有效,它将自动在“ pageToPostTo.php”上重定向。无需点击ajax请求。