我正在创建一个带有用户登录的MySQL的动态PHP页面。我最近将登录更改为jQuery / AJAX以使其更加流畅并且不会丢失用户所在的当前页面。事情就是当我错过了我的登录凭据,它没有任何消息,我希望它这样做。
这是我的表格:
<form id="ajax-login-form" action="session/login.php" method="post" role="form" autocomplete="off">
<div class="form-group">
<label for="username">Login</label>
<input type="text" name="u" id="username" tabindex="1" class="form-control" placeholder="Log in" value="" autocomplete="off">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="p" id="password" tabindex="2" class="form-control" placeholder="Password" autocomplete="off">
</div>
<div class="form-group">
<div class="row">
<div class="col-xs-5 pull-right">
<input type="submit" name="login-submit" id="login-submit" tabindex="4" class="form-control btn btn-success" value="Log In">
</div>
</div>
</div>
</form>
我的jQuery / Ajax:
$(document).ready(function () {
//From insert
$("#login-submit").click(function () {
var $form = $('#ajax-login-form');
$form.submit(false);
$.post($form.attr("action"), $form.serializeArray(), function (info) {
$("#result").html(info)
})
location.reload();
});
});
最后我的PHP代码
<?php
session_start();
$lig = mysql_connect("localhost", "root","") or
die ("Problema na ligação ao servidor MYSQL");
mysql_select_db("demo", $lig);
$u=$_REQUEST['u'];
$p=$_REQUEST['p'];
$sql="select numuti,nome,nomeutilizador,codtipo,reset from utilizadores where nomeutilizador='$u' and password=md5('$p')";
$res=mysql_query($sql);
if (mysql_num_rows($res) == 1)
{
$lin = mysql_fetch_array($res, MYSQL_ASSOC);
$_SESSION['user'] = $lin['nomeutilizador'];
$_SESSION['nivel'] = $lin['codtipo'];
$_SESSION['reset'] = $lin['reset'];
//$_SESSION['foto'] = $lin['imagem'];
$_SESSION['nome'] = $lin['nome'];
$_SESSION['cod']= $lin['numuti'];
}else{
echo "<div class='alert alert-danger'>
<strong><center>Login Inválido, Tente Novamente</center></strong>
</div>";
}
?>
这可能是一个重复的问题,但我无法找到问题的可靠答案,我尝试使用div进行错误,您可以在我的login.php页面中看到。
答案 0 :(得分:0)
尝试将您的发布语句更改为此
$.post($form.attr("action"), $form.serializeArray(), function (info) {
$("#result").html(info)
}).fail(function(){
alert("Login unsuccessful, please try again.");
});
答案 1 :(得分:0)
如果您使用易受SQL注入攻击的旧mysql_connect
函数,则不需要任何其他安全性。您的系统将具有可渗透性。
首先,您需要切换到更好的方法,例如PDO。
我建议使用submit()
函数代替click()
和ajax()
而不是post()
来更好地处理数据。
$(document).ready(function () {
$('#ajax-login-form').submit(function(e) {
var form = this;
e.preventDefault();
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
type: 'POST',
url: 'Your-login-url',
data: {
username: username,
password: password
},
success: function(data) {
// do your PHP login and echo 1 if authentication was successfull
if(data === 1) {
form.submit();
} else {
// show alert or something that user has wrong credentials ...
$("#error_notif").show();
}
}
});
});
});
另一件事是错误通知。我喜欢将错误div添加到表单或表单容器中,但将其设置为隐藏。您可以在jQuery Ajax以0结尾后显示它。
<div id="error_notif">You used wrong credentials.</div>
<style>
#error_notif {
display:none;
}
</style>