PHP/AJAX 登录表单
PHP/AJAX login form
我有一个用引导模式包装的登录表单,它看起来像这样。
<!-- Modal -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Logga in</h4>
</div>
<div class="modal-body">
<form action="login.php" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label for="inputEmail1" class="col-lg-3 control-label">Email</label>
<div class="col-lg-9">
<input type="email" name="email" class="form-control" id="inputEmail1" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword1" class="col-lg-3 control-label">Lösenord</label>
<div class="col-lg-9">
<input type="password" name="password" class="form-control" id="inputPassword1" placeholder="Lösenord">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Register</button>
<input type="submit" value="Login" class="btn btn-primary">
</form>
</div>
目前在登录时,我被重定向到登录.php当我提交表单时,我想在打开模式离开网站之前进行检查。任何错误都应显示在模态内。
这是登录.php。
<?php include 'includes/core/head.php' ?>
<div class="fold">
<?php include 'includes/core/header.php' ?>
<div class="container">
<?php
if(empty($_POST) === false) {
$email = $_POST['email'];
$password= $_POST['password'];
if(empty($email) || empty($password)) {
$errors[] = 'All fields required.';
} else if(user_exists($email) === false) {
$errors[] = 'Email not registered.';
} else if(user_active($email) === true) {
$errors[] = 'Eposten not activated.';
} else {
$login = login($email, $password);
if ($login === false) {
$errors[] = 'Wrong email or password.';
} else {
$_SESSION['user_id'] = $login;
header('Location: site.php');
exit();
}
}
print_r($errors);
}
?>
</div> <!-- /.fold.container -->
</div>
<?php include 'includes/core/footer.php' ?>
我知道解决方案是 AJAX,但我从未使用过它。如何使用 js 调用将登录表单连接到登录.php?
本质上,您需要使用 JavaScript 来拦截表单帖子并使用 AJAX 执行逻辑。 因此,您可以从拦截提交按钮的点击事件开始:
$('input[type=submit]').click(function (e) {
// This is where the AJAX logic would go
e.preventDefault();
});
到目前为止,所有这些工作都是拦截按钮的单击事件并阻止它提交表单。 当然,如果页面上其他表单中还有其他提交按钮,那么您需要使用id
或其他方式在jQuery选择器中唯一标识此按钮。
截获表单帖子后,可以使用 AJAX 调用手动发布它。 像这样:
$('input[type=submit]').click(function (e) {
$.post('login.php', $('form').serialize())
.done(function(data) {
// There is where you handle the response
});
e.preventDefault();
});
此更新的代码正在做几件事。 它正在序列化表单中的数据(同样,如果存在或可能有更多表单元素,请使用更具体的选择器),并在 POST 请求中将该数据发送到 login.php
. 然后,它使用 .done()
函数作为来自该 AJAX 请求的响应的回调。
从login.php
服务器端代码的角度来看,基本上没有区别。 它将完全像普通帖子一样响应此 AJAX 请求。 因此,这是您必须进行一些更改的地方,因为目前看起来login.php
在成功登录后执行重定向。 而且您不会通过 AJAX 响应重定向。
因此,此时您需要确定您希望系统在 AJAX 登录时的行为方式。 我建议您发布到不同的服务器端资源,该资源返回 JSON 数据而不是重定向或页面,然后data
该回调函数将只包含该结果数据。 这将使在 JavaScript 代码中更容易响应它。 (它可能会显示错误消息、更新某些页面内容、执行客户端重定向等)
请参阅 jQuery ajax 以获取有关该主题的完整库和文档。
确切的实现取决于您要执行的操作。您可能还需要使用序列化(或其同级之一)来排列要提交的数据。
首先,你需要了解ajax是做什么的。这是w3schools的一个例子。
在此示例中,html 页面制作了一个简单的帖子,其中包含 2 个要demo_test_post.asp的参数。返回时,demo_test_post.asp将一个字符串返回给 jquery ajax 并显示该字符串。
关于ajax HTTP POST的简要说明,你可以在这里阅读。
$("button").click(function(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
alert("Data: " + data + "'nStatus: " + status);
});
});
如果您需要有关什么是jquery ajax的更多详细信息,可以参考此处的jquery doc页面。
把它添加到你的脑海中
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function () {
$("#submit").click(function () {
$.ajax({
type: "POST",
data: $('#form1').serialize(),
url: "login.php",
success: function (msg) {
alert(msg);
}
});
});
});
</script>
并且您编辑的 html 是
.html
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Logga in</h4>
</div>
<div class="modal-body">
<form action="login.php" method="post" class="form-horizontal" role="form" id='form1'>
<div class="form-group">
<label for="inputEmail1" class="col-lg-3 control-label">Email</label>
<div class="col-lg-9">
<input type="email" name="email" class="form-control" id="inputEmail1" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword1" class="col-lg-3 control-label">Lösenord</label>
<div class="col-lg-9">
<input type="password" name="password" class="form-control" id="inputPassword1" placeholder="Lösenord">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Register</button>
<input type="button" value="Login" class="btn btn-primary" id='submit'>
</form>
</div>
登录.php
<?php
$data=$_POST['serialize'];
$email = $data['email'];
$password= $data['password'];
?>
- Jquery Modal表单登录与AJAX-ASP经典上的IE 9
- 有登录表单时无法提交表单
- 如何在提交按钮上定义登录表单的路径
- asp.net mvc中的javascript验证不适用于登录表单
- 将会话登录页存储在cookie中以进行表单解析(通过隐藏字段)
- javascript登录表单提交
- 如何制作登录表单以登录我的网络邮件
- 将随机数添加到登录表单的URL的目的是什么
- 流星 - 添加带有熨斗的路由后无法提交用户.路由器到登录和注册表单
- 单击按钮时切换html登录/注册表单
- 使用Ajax检查登录表单
- HTML文件到自动登录表单
- Android提交使用jquery的https登录表单
- 用用户上次登录时选择的内容填充html表单
- 使用AJAX提交登录表单并获得响应
- 使用自制的html表单注册/登录网站
- 当用户通过 iframe 表单登录时,如何将登录按钮更改为注销
- 在密码字段具有焦点后启用表单登录按钮
- 表单登录不与锚#工作
- BASH CURL脚本/自动Web表单登录