发送数据而不重新加载页面PHP Ajax
我正在尝试创建一个登录页面,在该页面中,每次尝试登录都会立即在该页面上完成;而不是刷新页面。谷歌如何登录页面,Facebook如何在不刷新的情况下提交消息 我已经用PHP编程了页面的后端功能,现在我想再多给它一点,让它看起来和功能都与众不同 这是我当前使用的Ajax脚本,它不希望以我希望的方式工作。我尝试了多个其他脚本,结果相同:发送数据而不重新加载页面PHP Ajax,php,jquery,ajax,form-submit,Php,Jquery,Ajax,Form Submit,我正在尝试创建一个登录页面,在该页面中,每次尝试登录都会立即在该页面上完成;而不是刷新页面。谷歌如何登录页面,Facebook如何在不刷新的情况下提交消息 我已经用PHP编程了页面的后端功能,现在我想再多给它一点,让它看起来和功能都与众不同 这是我当前使用的Ajax脚本,它不希望以我希望的方式工作。我尝试了多个其他脚本,结果相同: <script> $(function () { $('#_js_pdTr1').on('submit', function (e
<script>
$(function () {
$('#_js_pdTr1').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'post',
url: 'login_push.php',
data: $('#_js_pdTr1').serialize(),
});
});
});
</script>
基本上,我想要的是:
提交表单时,它会将表单中的所有数据推送到login_push.php页面,该页面上的php将继续运行
它将查询数据库并将信息发送回原始页面,如果变量$errors不为空,它将在表单代码块第6行的页面上自动回显,而不刷新页面。但是,如果变量为空,它将登录它们
感谢所有的帮助
干杯
编辑:我已经测试了其他代码,但是它没有按照我希望的方式工作。不要使用标题'location:./user';在您的ajax中。您有一些重复的代码,比如$result=mysqli_query$conn,从username='$user'的用户中选择*;你为什么不叫它一次呢
您很容易受到mysql注入的攻击,因为您不会转义变量
您从$\u POST设置了$username,然后您检查了这个设置$\u POST,为什么
无论如何,您需要回显成功/失败的JSON对象,或者带有错误和消息键的JSON对象
不要使用标题“位置:./user”;在您的ajax中。您有一些重复的代码,比如$result=mysqli_query$conn,从username='$user'的用户中选择*;你为什么不叫它一次呢
您很容易受到mysql注入的攻击,因为您不会转义变量
您从$\u POST设置了$username,然后您检查了这个设置$\u POST,为什么
无论如何,您需要回显成功/失败的JSON对象,或者带有错误和消息键的JSON对象
为什么在“U js_pdTr2”上,???您可以在此处使用submit。@FrayneKonok当单击该特定ID按钮时,它将继续使用Ajax。是否真的可能重复@FrayneKonok?我想对提交内容更具体一点button@David“马尔姆·安塞尔莫特”已经看了一遍,但没有按预期的那样工作/为什么在“U js_pdTr2”上,???您可以在此处使用submit。@FrayneKonok当单击该特定ID按钮时,它将继续使用Ajax。是否真的可能重复@FrayneKonok?我想对提交内容更具体一点button@David“马尔姆·安塞尔莫特”已经看了一遍,但没有按预期的那样工作/谢谢我马上测试一下,然后再打给你!:另外,我还将研究一下SQL注入的东西,$row['cnt']的作用是什么?我不使用这个。另外,我如何输出$errors[]?如何验证密码?$row['cnt']来自查询:COUNT*AS cnt。它会问,是否有使用此密码的用户?如果有,COUNT将返回1。如果要使用errors[]数组,则无需使用my$result,您可以。在本例中,echo json_encode$errors;,你可以遍历这个数组。啊,好吧,我现在有点明白了!谢谢:还有什么方法可以检查用户是否处于活动状态?对PHP还是很陌生的,可以使用一些技巧!:谢谢我马上测试一下,然后再打给你!:另外,我还将研究一下SQL注入的东西,$row['cnt']的作用是什么?我不使用这个。另外,我如何输出$errors[]?如何验证密码?$row['cnt']来自查询:COUNT*AS cnt。它会问,是否有使用此密码的用户?如果有,COUNT将返回1。如果要使用errors[]数组,则无需使用my$result,您可以。在本例中,echo json_encode$errors;,你可以遍历这个数组。啊,好吧,我现在有点明白了!谢谢:还有什么方法可以检查用户是否处于活动状态?对PHP还是很陌生的,可以使用一些技巧!:
<form id="_js_pdTr1" action="" method="post">
<h3>LOGIN</h3>
<div class="err-disp-out">
<?php
if(!empty($errors)){
echo output_errors($errors);
}
?>
</div>
<input type="text" name="username" placeholder="Username"><br><br>
<input type="password" name="password" placeholder="Password"><br><br>
<input id="remember" type="checkbox" name="remember_me"><label for="remember">Remember Me</label><br><br>
<button id="_js_pdTr2" type="submit">Login</button>
</form>
include 'core/init.php';
logged_in_protect();
$user = $_POST['username'];
$pass = $_POST['password'];
$user = preg_replace("/[^a-z0-9_\s-]/", "", $user);
$user = preg_replace("/[\s-]+/", " ", $user);
$user = preg_replace("/[\s_]/", "-", $user);
if(!empty($_POST)){
if(isset($user) && isset($pass)) {
$result = mysqli_query($conn, "SELECT * FROM users WHERE username = '$user'");
if(mysqli_num_rows($result) == 0) {
$errors[] = 'The username or password are incorrect.';
} else {
$passR = mysqli_query($conn, "SELECT * FROM users WHERE username = '$user'");
while($row = mysqli_fetch_array($passR)){
$dbHash = $row['password'];
if(password_verify($pass, $dbHash)){
$activeQ = mysqli_query($conn, "SELECT active FROM users WHERE username = '$user'");
while($row = mysqli_fetch_array($activeQ)){
$active = $row['active'];
if($active == 0){
$errors[] = 'This user has not activated their account.';
} else {
$remember_me = ($_POST['remember_me'] == "on") ? 1 : 0;
if(isset($_POST['remember_me']) && $remember_me == 1){
$_SESSION['user_log'] = time() + 7889238;
} else {
$_SESSION['user_logi'] = time() + 3600;
}
$_SESSION['user_id'] = $user;
header('location: ./user');
}
}
} else {
$errors[] = 'The username or password are incorrect.';
}
}
}
} else {
header('location: ./');
}
}
$result = [
'error' => 0,
'message' => ''
];
//You can do other validations here
if (!empty($_POST)) {
//Do the dbhash here
$sql = "SELECT COUNT(*) AS cnt FROM `users` WHERE `username` = '" . mysqli_real_query($conn, $_POST["username"]) . "' AND `password` = '" . password_verify($_POST['pass'], $dbHash) . "'";
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_row($res);
if ($row['cnt'] < 1) {
$result = [
'error' => 1,
'message' => 'Bad username or password'
];
}
//You can add success message if you want
}
echo json_encode($result);
$.ajax({
type: 'post',
url: 'login_push.php',
data: $('#_js_pdTr1').serialize(),
success: function(response) {
if (response.error != 0) {
//Show error here
} else {
window.location.href = './user'; //Better to use absolute path here
}
}
},'json');