[英]Ajax dependent text field and dropdown menu (Php and Javascript)
我是一名學生,仍然對Javascript和php陌生,我需要為我的網站創建一個登錄頁面,該頁面可以使用ajax檢查數據庫中的用戶輸入。
示例:當用戶在給定的字段中輸入用戶名和密碼時,系統將自動在用戶是否存在的情況下檢入數據庫,並將所需的數據(例如用戶責任)從響應表返回到下面的下拉菜單,然后他們可以登錄系統。 下面是我的基本編碼:
config.php文件:
e$host = "localhost";
$User = "root"
$Pass = "passw";
$db = "skm_spm";
login.php中:
<?
require ("config.php");
$conn=mysqli_connect($host,$user,$pass,$db);
$duser="select * from tab_user where user_name = '".$_POST["Lname"]."'";
$uresult=myqli_query($conn,$duser);
if(!$uresult)
die("Invalid query: ".mysqli_error());
else
if(mysqli_num_rows($uresult)== 0){
echo "User does not exist";
}
else
{
$row=mysqli_fetch_array($result,MYSQL_BOTH);
if($row["User_Password"] == $_POST["Lpass"])
{
$dresp="select resp_id,resp_name from tab_resp";
$result2 = mysqli_query($conn,$dresp);
}
else
{
}
}
?>
<html>
<b>Login</b><br>
Name : <input type = "text" name="Lname" id="Lname" placeholder="Username"/><br>
Password: <input type = "password" name="Lpass" id="Lpass" placeholder="password"/><br><br>
<div class = "optresp">
<select name="sresp" id="sresp">
<option>--Responsibility--</option>
<?
while (mysqli_fetch_array($result2)){
echo "<option value='$row[1]'>$row[1]</option>";
?>
</select>
</div>
</html>
我已經在互聯網上學習並嘗試以我的理解進行編碼,但是仍然失敗。 我需要可以與上面的代碼一起工作的php ajax編碼。 謝謝。
我將為您提供我最近的項目中的一些代碼,希望您能夠理解它並使其適應您的需求。
首先,您應該將登錄表單保存在與PHP登錄代碼不同的文件中。 然后,在頁面上具有按鈕或運行Javascript函數(在我的情況下為Login())的enter事件。 在此Javascript函數中,將輸入字段中的文本保存到兩個變量,並對它們進行了一些基本檢查以確保已將其填充。接下來,PHP登錄函數文件(在處理某些數據時不包含可見內容)在PHP中)使用$.post
行。 這還將兩個輸入變量(具有相同的名稱)傳遞給PHP文件。 您還可以看到,根據從PHP文件作為“數據”返回/回顯的內容,可能會發生幾種可能的結果(登錄成功,帳戶被禁止或無效登錄)。 我個人稱這些結果錯誤消息或成功消息,例如錯誤消息6表示密碼/用戶名不正確。
//FUNCTIONS
function Login(){
var StrUsername = $("#txtUsername" ).val();
var StrPassword = $("#txtPassword").val();
if (StrUsername == "" && StrPassword == ""){
$('#pError').text('Enter your Username and Password!');
}
else if(StrUsername == ""){
$('#pError').text('Enter your Username!');
}
else if(StrPassword == ""){
$('#pError').text('Enter your Password!');
}
else{
$.post('https://thomas-smyth.co.uk/functions/php/fnclogin.php', {StrUsername: StrUsername, StrPassword: StrPassword}, function(data) {
if (data == 0){
window.location.href = "https://thomas-smyth.co.uk/home";
}
else if (data == 1){
window.location.href = "https://thomas-smyth.co.uk/banned";
}
else if (data == 6){
$('#pError').text('Username & Password combination does not exist!');
}
});
}
}
接下來是PHP函數文件。 首先,使用$_POST
收集Javascript傳遞的變量。 然后將我的SQL類放入文件中,這完成了我的所有SQL DB連接。 然后,我有一條SQL語句,該語句將搜索以查看該帳戶是否存在。 注意?
在里面。 這可以防止SQL注入,因為變量是通過SQL服務器綁定到語句中的,這意味着不允許人們將SQL代碼放在我的輸入字段中來破壞我的數據庫。 然后,我檢查該帳戶是否存在,如果不存在,則將數據保存到6,這將導致返回數據時Javascript中的錯誤消息6運行。 我的數據庫中有一個包含等級的字段。 如果登錄正確,那么我將創建一個SESSION變量來存儲其用戶名和排名。稍后在頁面上使用此變量來檢查它們是否在顯示頁面之前登錄(這加快了導航速度,因為這意味着數據庫不會每次用戶切換頁面時都需要搜索,但是確實會帶來一些問題,例如,如果您在用戶登錄時禁止該用戶,他們將保持登錄狀態,直到會話終止。 您可以在下拉菜單上使用它來確保用戶已登錄和/或獲取其用戶名。 最后,我返回0或1,以便Javascript然后將它們重定向到正確的頁面。
<?php
//Retrieves variables from Javascript.
$StrUsername = $_POST["StrUsername"];
$StrPassword = $_POST["StrPassword"];
require "sqlclass.php";
$TF = new TF_Core ();
$StrQuery = "
SELECT Username, Rank FROM tblUsers
WHERE Username = ? AND Password = ?";
if ($statement = TF_Core::$MySQLi->DB->prepare($StrQuery)) {
$statement->bind_param('ss',$StrUsername,$StrPassword);
$statement->execute ();
$results = $statement->get_result ();
if($results->num_rows == 0){
$data = 6;
}
else {
while ($row = $results->fetch_assoc()) {
//Other groups
if ($row["Rank"] == "Developer" || $row["Rank"] == "Staff" || $row["Rank"] == "Cadet"){
session_start();
$_SESSION["LoginDetails"] = array($StrUsername, $row["Rank"]);
$data = 0;
}
//Banned
else if ($row["Rank"] == "Banned"){
session_start();
$_SESSION["LoginDetails"] = array($StrUsername, "Banned");
$data = 1;
}
}
}
}
echo $data;
?>
希望這對您有幫助。 請說出您是否需要更多幫助!
您需要對用戶名模糊進行ajax調用,以檢查用戶是否存在於數據庫中;如果成功,則可以再進行一次ajax調用,以檢查該特定用戶的密碼是否匹配。 這將為您提供兩種情況,無論用戶是否已登錄(如果用戶已登錄,然后密碼是否匹配),不僅在該用戶登錄后,您還可以顯示該特定用戶的職責。
對於用戶名:
$('#Lname').blur(function(){
$.ajax({
url:'url where query for matching username from database',
data:'username collected from input on blur',
type:'POST',
success:function(data){
//Code to execute do on successful of ajax
}
})
})
密碼:
Ajax調用僅在URL,數據和響應更改上保持不變
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.