簡體   English   中英

檢查數據庫中是否已經存在用戶名

[英]Check if username already exists in database

我想做一個if語句,檢查MYSQL數據庫中是否已經存在用戶名。 我嘗試了一些不同的東西,但是我無法使其工作。 每次在瀏覽器中進行測試時,我都會收到一條通知

注意:未定義的索引:etc中的用戶名。

如果它與$ result變量或$ check變量有關,或兩者都不相關,我感到困惑。

這是HTML表單和PHP腳本。 https://gist.github.com/anonymous/9704354

謝謝,祝您周末愉快!

您的代碼中有些錯誤。

首先,永遠不要將變量直接放在SQL查詢中,這就是SQL注入的方式。 開始為MYSQL使用PDO或其他庫。

您收到未定義通知的原因是由於此行。

 $result = mysql_query("SELECT * FROM users WHERE username = '$_POST[create_user]'");

應該沒有修復巨大的SQL Injection漏洞

 $result = mysql_query("SELECT * FROM users WHERE username = '{$_POST['create_user']}'");

另外,您應該在選擇查詢的末尾添加“ LIMIT 1”,以加快處理速度。 無需尋找多個用戶。

您可以通過僅檢查row_count而不是檢查文本值來驗證用戶。 由於MySQL對某些字段不區分大小寫,因此用戶名“ AAAaaa”將等於“ aaaAAA”。 如果改為查看行數,則將確保該文本的數據庫中沒有用戶名。 或者,如果您要使用PHP進行檢查,請確保通過strtolower()傳遞用戶名

當您開始使用PDO時,以下示例將為您提供幫助。

$dbh = new PDO() // Set the proper variables http://us2.php.net/pdo
if(empty($_POST['create_user'])) {
   echo 'Username is Empty. Always check if POST and Get data is set';
   die();
}

$query = "SELECT * FROM `users` WHERE `username` = ? LIMIT 1;"
$data = array($_POST['create_user']);
$sth = $dbh->prepare($query);

if(!$sth->execute($data)) {
   echo 'Handle SQL Error';
   die();
}

if($sth->rowCount() == 0) {
   echo 'Unused Username';
}else{
   echo 'Used Username';
}

這就是我發現的

$_POST['username']應該類似於$_POST['create_user']

暫無
暫無

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

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