gpt4 book ai didi

php - 从 jQuery UI 对话框进行 AJAX 调用

转载 作者:行者123 更新时间:2023-12-01 07:58:48 25 4
gpt4 key购买 nike

我正在开发一个用户登录系统,使用 jQuery UI 模式对话框在我的 html 和 PHP 脚本之间进行交互。最近,我将所有用户功能移至一个 PHP 文件,这些功能是我之前在 header 标记中使用的。

如果有人输入有效的用户名/密码,我就能使登录功能正常工作,但现在我正在尝试考虑其他可能性,即有人输入有效的用户名但密码不正确,或者他们输入用户名不存在。

我遇到的问题是对话框脚本上的 AJAX 调用。我想将登录表单提交到同一页面 user.php,然后让用户登录,或者返回一条错误消息,该消息将填充同一对话框上的 div。

现在,我的代码将返回一条错误消息,但它也会返回用户表单的副本。不太确定我在这里做错了什么......
任何意见将不胜感激。

编辑:决定继续发布整个 user.php,因为根据一个答案进行更改会使该文件添加的 html 完全消失。我现在猜测我可能做错了几件事:

    <html>
<span id="user">
<ul>
<?php
//if user is logged in, show name and Log Out option, else show Log In and Sign Up options
if(isset($_COOKIE["user"])) {
setSessionUserData($_COOKIE["user"]);
echo "<li>Logged in as {$_SESSION["username"]}</li>";
echo "<li>&nbsp;|&nbsp;</li>";
echo "<li><a href='#' id='logout_link'>Log Out</a></li>";
} else {
echo "<li><a href='#' id='login_link'>Log In</a></li>";
echo "<li>&nbsp;|&nbsp;</li>";
echo "<li><a href='#'>Sign up</a></li>";
}
?>
</ul>
</span>

<div id="login_dialog" title="Existing User">
<form id="login_form">
<fieldset>
<label for="userid">Username</label>
<input type="text" name="username" id="username" />
<label for="pw">Password</label>
<input type="password" name="pw" id="pw" />
</fieldset>
</form>
<span class = "error"></span>
</div>
<div id="logout_dialog" title="Log Out">
<p><span class="ui-icon ui-icon-alert alert-icon"></span>Are you sure you want to log out?</p>
</div>

<script>
$(function() {
var username = $("#username"),
password = $("#pw"),
loginFields = $([]).add(username).add(password);

$("#login_link").click(function() {
$("#login_dialog").dialog("open");
});

$("#logout_link").click(function() {
$("#logout_dialog").dialog("open");
});

$("#login_dialog").dialog({
autoOpen: false,
height: 200,
width: 250,
resizeable: false,
modal: true,
buttons: {
Submit: function() {
$.post("auth.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
window.location='Practice.php';
}
else {
$(".error").html(result);
}
}
)
},
Cancel: function(){
$(this).dialog("close");
}
},
close: function() {
loginFields.val("");
}
});

$("#logout_dialog").dialog({
autoOpen: false,
modal: true,
height: 150,
resizeable: false,
buttons: {
Okay: function() {
window.location = "logout.php";
},
Cancel: function() {
$(this).dialog("close");
}
}
});

});
</script>
</html>

<?php

function setSessionUserData($cookie) {
$con = connect();

$query = "SELECT * FROM practice_user WHERE userid = '$cookie'";
$result = mysqli_query($con, $query);
$userData = mysqli_fetch_array($result);

$_SESSION["username"] = $userData["username"];
$_SESSION["fname"] = $userData["first_name"];
$_SESSION["lname"] = $userData["last_name"];
}

?>

...和 ​​PHP:

if($_SERVER["REQUEST_METHOD"] == "POST") {
$user = test_input($_POST["username"]);
$pass = test_input($_POST["password"]);

//check if correct login
if (chkLogin($user, $pass)) {
$id = getUser($user, $pass);
setUserCookie($id);
header("Location: Practice.php");
}
//check if username exists but incorrect password entered
else if (chkUser($user)) {
echo "Username and password do not match";
}
//Or else return that username doesn't exist
else {
echo "Username does not exist";
}

}

我的代码中还有其他函数来处理验证等。
如果我需要发布这些内容,请告诉我。

最佳答案

你能试试这个吗

您无法在ajax中调用php文件本身来重定向页面,因此重定向部分移至javascript端。

Jquery,

    $("#login_dialog").dialog({
autoOpen: false,
height: 200,
width: 250,
resizeable: false,
modal: true,
buttons: {
Submit: function() {
$.post("auth.php",
{
username: $("#username").val(),
password: $("#pw").val()
},
function(result) {
if(result=='success'){
window.location='Practice.php';
}else{
$(".error").html(result);
}
}
)
},
Cancel: function(){
$(this).dialog("close");
}
},
close: function() {
loginFields.val("");
}
});

创建名为auth.php的新页面,包含您的依赖php函数。

   <?php

if($_SERVER["REQUEST_METHOD"] == "POST") {
$user = test_input($_POST["username"]);
$pass = test_input($_POST["password"]);

//check if correct login
if (chkLogin($user, $pass)) {
$id = getUser($user, $pass);
setUserCookie($id);
echo "success";
}
//check if username exists but incorrect password entered
else if (chkUser($user)) {
echo "Username and password do not match";
}
//Or else return that username doesn't exist
else {
echo "Username does not exist";
}
}
?>

关于php - 从 jQuery UI 对话框进行 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21439824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com