簡體   English   中英

通過php檢查用戶名是否存在-並保留值

[英]Check if username exists by php - and keep values

我正在嘗試編寫注冊表格,當用戶按下“提交”按鈕時,我要檢查用戶名是否已經存在-如果存在,則顯示一個彈出窗口,顯示“用戶名已經存在-請更改”。 當用戶使用Javascript關閉該彈出窗口時-我希望用戶插入的其余字段保留在原處(我的意思是,只會刪除用戶名-但例如保留名字)

這是我寫的代碼:

$con=mysqli_connect("localhost","root","","shnitzale");
        // Check connection
        if (mysqli_connect_errno())
          {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }

         $check="SELECT count (username) as num FROM registered_clients WHERE username=$_GET[User]";
         if (!mysqli_query($con, $check))
         {
             echo "Username already exist";
         }
         else
         {
             $sql="INSERT INTO registered_clients (Username, Password, First_name, Last_name,
                Day, Month, Year, Gender, Address, City, Phone_Number1, Phone_number2, Email)
                VALUES
                ('$_GET[User]','$_GET[Password]','$_GET[Fname]','$_GET[Lname]','$_GET[Day]',"
                     . "'$_GET[Month]','$_GET[Year]','$_GET[gender]','$_GET[Address]','$_GET[City]',"
                     . "'$_GET[Phone1]','$_GET[Phone2]','$_GET[Email]')";

             if (!mysqli_query($con,$sql))
             {
               die('Error: ' . mysqli_error($con));
             }

             echo "Thank you $_GET[Fname] $_GET[Lname]";
         }
            mysqli_close($con);

所有這些都在我單擊“提交”按鈕后進入的單獨的php文件中,我了解到進入此頁面之前我需要檢查用戶名驗證,但是我真的不知道如何...謝謝!

由於以下原因,您當前的用戶名檢查不起作用:

if (!mysqli_query($con, $check))
{
    echo "Username already exist";
}

這將永遠不會發生。 即使未找到用戶名,您當前的查詢也將始終返回有效結果。 num只會是0。

這是一種實現方法:

$username = mysqli_real_escape_string($con, $_GET['User']); // Do some minimal sanitization at least!
$check = "SELECT username FROM registered_clients WHERE username='$username'";
$result = mysqli_query($con, $check);
if(mysqli_num_rows($result)) {
    echo "Username already exists";
}

這樣,您就可以提取找到的實際用戶名並進行計數。 另外,您仍然可以將您的count (username) as num查詢,但是隨后您必須獲取查詢結果並查看num的值。

請注意,您的INSERT查詢仍然可以進行SQL注入。 您需要先清理所有這些$_GET參數,然后才能在查詢中使用它們。

您或者需要AJAX http://www.w3schools.com/ajax/並檢查用戶名是否可用而無需加載其他頁面,或者您可以將注冊表單的操作設置為注冊頁面並再次插入所有有效的表單數據。

不要忘了先清理用戶數據!

如果要使用Ajax進行此操作,請執行以下操作:創建一個單獨的頁面(現在生病了),請輸入usernamecheck.php

/*
    $database_connection = database connection and stuff
    Also, does your table have a primary key 'id'? I'd highly recommend it.
*/

$username = mysqli_real_escape_string($database_connection, $_GET['username']; // Use $_GET or $_POST depending on the AJAX request.
if (strlen($username) > 3){ // Only check if the username string is bigger than 4 characters. No point in checking an empty username.
    $UserCheck = mysqli_query("SELECT id FROM registered_clients WHERE username = '$username' LIMIT 1");
    if (mysqli_num_rows($UserCheck) > 0){
        die('<p style="color: red;">The username '.$username.' is already taken.</p>');
    } else {
        die('<p style="color: green;">The username '.$username.' is available.</p>');
    }
}

如果將AJAX請求定向到usernamecheck.php?username = superman並在用戶名字段的正下方顯示頁面的輸出,則用戶將從服務器獲得實時更新。

您還可以將腳本的輸出更改為1或0,以便可以在javascript中進行拾取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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