JQuery的Ajax和PHP表单提交
我一直在处理登录表单,它使用Jquery和Ajax提交给PHP文件,该文件处理请求然后发送回应。我认为在某个地方,某种程度上PHP脚本可能不正确,因为即使我故意输入不正确的密码,该表单总是会返回真实的,以便用户登录。JQuery的Ajax和PHP表单提交
下面是HTML代码:
<div id="login">
<span class="error">Uh oh! Something went wrong please try again!</span>
<span class="success">Congrats! You've been logged in, redirecting you to your homepage</span>
<form action="process/core/login.php" method="post">
<p>Email: <input type="text" name="email" <?php if($_POST['email'] != '') { echo 'value="'. $_POST['email'] .'"'; }?> /></p>
<p>Password: <input type="password" name="pword" /></p>
<p><input type="submit" value="Login" id="login-btn" /></p>
</form>
</div>
<script>
function redirect(){
window.location = "home.php"
}
$("#login-btn").click(function(){
$.ajax({
type: "post", // type of post
url: "process/core/login.php", // submitting file
data: $("form").serialize(), // data to submit
success: function() {
$(".success").show("slow"); // sucess function
setTimeout('redirect()', 3000);
},
error: function() {
$('.error').show("slow"); // error function
}
});
return false;
});
</script>
下面是PHP脚本:
<?php
session_start();
require '../../lib/core/connect.php';
if(!empty($_POST['email']) && !empty($_POST['pword'])) {
$userInfo = mysql_query("SELECT * FROM users WHERE email = '". mysql_real_escape_string($_POST['email']) ."'");
$userInfo = mysql_fetch_assoc($userInfo);
if($_POST['email'] == $userInfo['email'] && md5($_POST['pword']) == $userInfo['pword']) {
if($userInfo['active'] == 1) {
$_SESSION['AuthEmail']=$userInfo['email'];
$_SESSION['AuthUid']=$userInfo['uid'];
$_SESSION['AuthName']=$userInfo['fname'] . ' ' . $userInfo['lname'];
$_SESSION['AuthActive']=$userInfo['active'];
$_SESSION['AuthType']=$userInfo['type'];
return true;
print 'success';
} else {
return false;
print 'fail not active';
}
} else {
return false;
print 'Email and or password didn\'t match';
}
} else {
return false;
print 'Didn\'t enter one of the required values';
}
?>
带我有一个错误,我甚至改变了所有的PHP脚本的值返回false,不知何故ajax中的成功消息仍然成功解除。任何帮助将不胜感激,我搜索整个论坛查找相关主题,但没有发现任何事情深入实际的错误。
感谢
ajax
success
从服务器返回HTTP 200(换句话说,返回正确的响应时),将会触发回调。因此,这意味着无论您的PHP代码中执行哪个代码路径,成功回调仍将被调用,并且用户将被重定向。
您可以修改成功回调来检查响应并采取适当的措施(首选),或在服务器上为返回false
方案抛出异常。
你是完全正确的,我最终发现,无论成功函数触发什么,除非它不能实际执行ajax请求。我没有意识到的是我需要使用返回数据来区分结果。我最终将PHP脚本更改为仅回显字符串'true'或'false',然后在客户端比较数据,这取决于PHP脚本的返回结果,并且这给了我所寻找的结果。 感谢您的回答! – 2012-02-14 07:19:31
我认为你需要真正抛出的异常的错误处理程序被称为http://php.net/manual/en/language.exceptions.php假是不是根本就不是真正的错误。
也许用成功/错误代码填写响应数据也许是一个很好的解决方案呢?我不知道异常的可能性,我不能确定哪种解决方案更为正确。有任何想法吗?也许它和bool回归和异常抛出困境一样。 – clime 2012-01-27 22:04:48
我认为无论哪种方式都是有效的,而且我无法真正想到为什么要使用另一种方法。如果错误可以通过我认为的其他代码恢复,那么应该抛出一个异常(所以你可以使用一个try catch),并且你会得到一个带有异常的堆栈跟踪,而不是只写一些东西。也许别人会以这样或那样的方式加入。 – shaunhusain 2012-01-27 22:09:17
我有一些过去的PHP经验,但通常只是在客户端使用BlazeDS/Java和Flex,所以我在这里假设错误处理程序不会被触发,除非它实际上是一个异常,而是从使用该设置而不是使用PHP或JQuery我们通常通过抛出一个错误来处理错误情况,然后在客户端进行处理,因为我们得到错误事件或成功事件,所以它更有意义。 – shaunhusain 2012-01-27 22:11:29
顺便说一下,您的打印下面的返回值不会触发。 。 。 – 2012-01-27 22:01:00