我正在使用jQuery UI模式對話框在我的html和PHP腳本之間進行交互的用戶登錄系統上工作。最近,我將我的所有用戶功能都移到了一個PHP文件中,從我之前在我的標題標記中找到它們的位置。來自jQuery UI對話框的AJAX調用
如果有人輸入有效的用戶名/密碼,我可以獲得登錄功能,但現在我正在考慮其他可能性,即某人輸入了有效的用戶名,但密碼不正確,或者他們輸入了不存在的用戶名。
我遇到的問題是在對話腳本上調用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> | </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> | </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";
}
}
有在我的代碼等功能處理驗證等。
如果我需要發佈這些內容,請讓我知道。
你是什麼意思「返回用戶表單的副本」?它看起來像這個PHP代碼只是發出重定向或回顯一個字符串。我沒有看到任何其他潛在產出。代碼中是否有其他輸出未顯示?我不清楚這裏發生了什麼。 – David
在你的PHP你做了成功的重定向,爲什麼不只是返回成功,並在JavaScript中做重定向? – MamaWalter
在這個特定的文件中有很多代碼。我在這裏發佈的內容僅涉及登錄功能。其餘的是驗證功能和其他功能的代碼(註銷,創建賬戶等)。 我認爲問題在於我如何處理PHP中的事情。我確實希望它重定向成功......我可能沒有正確地執行AJAX ...或PHP。我不太確定:/ – amthomas2112