[英]Check for username availability php
<?php
$con = mysqli_connect('localhost','root','[mypassword]','dbhwsource');
if(isset($_GET['username'])){
$username = $con->real_escape_string($_GET['username']);
$test = $con->query("SELECT username FROM users WHERE username='$username'");
if($test!=false) die("usererror");
}
if(isset($_GET['email'])){
$email = $con->real_escape_string($_GET['email']);
$test = $con->query("select * from users where email='$email'");
if($test!=false) die("emailerror");
}
$con->close();
echo "ok";
?>
所以我只是想檢查一下用戶名/電子郵件是否可用,但無論輸入的用戶名是什么,我得到的只是“usererror”! 我只是很沮喪,到處搜索示例代碼,代碼看起來沒有任何問題。 我究竟做錯了什么?
編輯:
$test = $test->fetch_assoc();
if(!empty($test)) die("usererror");
這有效!
由於您的查詢返回 true,因此這一行if($test!=false) die("usererror");
被執行,應該是這樣的
$test = $con->query("SELECT username FROM users WHERE username='$username'");
$row_cnt = $test->num_rows;
if( $row_cnt > 0 ) {
//you already have user with this name, do something
}
如果查詢成功, $con->query
返回一個結果對象。 這並沒有說明找到了多少行或查詢是否匹配任何內容,它只是意味着查詢執行成功。 因此您的$test!=false
測試總是成功; 只有在數據庫錯誤的情況下才會失敗。
執行查詢SELECT COUNT(*) FROM ...
,然后獲取結果的第一行並查看計數是否> 0
。
我最近為一個 android 應用程序做了類似的事情。 你真的應該看看這個網站。 它極大地幫助了我。 這是具有用於應用程序的 PHP API 的詳細示例。 具體登錄。
但具體來說,這里是 PHP 頁面的一個片段
/*
* Check user is existed or not
*/
public function isUserExisted($email) {
$result = mysql_query("SELECT email from users WHERE email = '$email'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
// user existed
return true;
} else {
// user not existed
return false;
}
}
這對我有用:
$test = $test->fetch_assoc();
if(!empty($test)) die("usererror");
你的代碼真的不安全沒有優化任何人都可以在你的代碼中使用 sql 注入登錄。
並且您的代碼是正確的,因為您正在檢查 thar (test != false) 這意味着它是正確的,這就是您的代碼 og usererror 正在執行的原因
這里有一些提示,始終使用這種風格來保證安全和優化
對 $email 做同樣的事情
第三次運行查詢后不檢查它是真還是假,而是在查詢后再次檢查
if($test->username === $_GET['username']) { do something }
檢查 Google 上的 sql 注入為什么我這樣做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.