通过ajax提交登录表单时,我只是遇到一些问题,我主要是PHP开发人员,在PHP中我并不经常使用Jquery + Ajax。
目前,如果我在提交表单后检查firebug POST数据,它的确会获取已添加到表单的用户名和密码,但是无论是否添加了错误的用户名和密码,或者是否添加了错误的页面,页面都只会重新加载它们是正确的,并且没有创建会话。
形式如下:
<form id="loginform" method="post"> Username: <input type="text" name="username" id="username" value=""> Password: <input type="password" name="password" id="password" value=""> <input type="submit" name="loginsub" id="loginsub" value="Login"> </form>
这是Ajax / Jquery:
<script type="text/javascript"> $(document).ready(function() { $('#loginform').submit(function() { $.ajax({ type: "POST", url: '/class/login.php', data: { username: $("#username").val(), password: $("#password").val() }, success: function(data) { if (data === 'Login') { window.location.replace('/user-page.php'); } else { alert('Invalid Credentials'); } } }); }); }); </script>
这是PHP:
class Users { public $username = null; public $password = null; public function __construct( $data = array() ) { if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['username'] ) ); if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) ); } public function storeFormValues( $params ) { $this->__construct( $params ); } public function Login() { $success = false; try{ $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1"; $user = username; $stmt = $con->prepare( $sql ); $stmt->bindValue( "username", $this->username, PDO::PARAM_STR ); $stmt->bindValue( "password", md5($this->password), PDO::PARAM_STR ); $stmt->execute(); $valid = $stmt->fetchColumn(); if( $valid ) { $success = true; session_start(); session_regenerate_id(); $_SESSION['user'] = $user['user']; session_write_close(); echo ('Login'); exit(); } $con = null; return $success; }catch (PDOException $e) { echo $e->getMessage(); return $success; } }
我猜这是行不通的,因为我没有调用类和函数,但是我不确定如何成功地调用它。我尝试在2之间创建一个控制器页面,该页面将启动php类和函数,但无济于事。
只是进行编辑,如果删除ajax并通过登录表单操作调用php页面,则登录确实可以正常工作。
有任何想法吗?
整个问题是在jQuery中使用此代替
$(document).ready(function() { $('#loginform').submit(function(e) { e.preventDefault(); $.ajax({ type: "POST", url: '/class/login.php', data: $(this).serialize(), success: function(data) { if (data === 'Login') { window.location = '/user-page.php'; } else { alert('Invalid Credentials'); } } }); }); });