簡體   English   中英

與Ajax相關的文本字段和下拉菜單(Php和Javascript)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM