首頁  >  文章  >  後端開發  >  email或用戶名 登入

email或用戶名 登入

WBOY
WBOY原創
2016-09-22 08:56:481502瀏覽

我想問一下 我有欄位叫做email和passwrod

<code>$email = $_POST['email'];
$password = $_POST['password'];
$login     = mysql_query("SELECT * FROM `users`
JOIN `users_profile` USING (id)
WHERE `email` = '".$email."' AND `password` = '".$password."' 
OR `username` = '".$email."' AND `password` = '".$password."'
</code>

以上是我的登錄語法
假設使用者輸入email或密碼對 則登錄成功:

<code>`email` = '".$email."' AND `password` = '".$password."' 
</code>

但是若使用者輸入使用者名稱(username)和密碼也符合也能登入

<code>`username` = '".$email."' AND `password` = '".$password."'
</code>

只是以上的語法只能夠輸入email和password登錄
若輸入username和password登錄則會失敗
確定JOIN users_profile並使用id無問題
問題在哪裡?

回覆內容:

我想問一下 我有欄位叫做email和passwrod

<code>$email = $_POST['email'];
$password = $_POST['password'];
$login     = mysql_query("SELECT * FROM `users`
JOIN `users_profile` USING (id)
WHERE `email` = '".$email."' AND `password` = '".$password."' 
OR `username` = '".$email."' AND `password` = '".$password."'
</code>

以上是我的登錄語法
假設使用者輸入email或密碼對 則登錄成功:

<code>`email` = '".$email."' AND `password` = '".$password."' 
</code>

但是若使用者輸入使用者名稱(username)和密碼也符合也能登入

<code>`username` = '".$email."' AND `password` = '".$password."'
</code>

只是以上的語法只能夠輸入email和password登錄
若輸入username和password登錄則會失敗
確定JOIN users_profile並使用id無問題
問題在哪裡?

OR就要注意加括號。

<code class="sql">SELECT * FROM `users`
JOIN `users_profile` USING (id)
WHERE (`email` = '".$email."' AND `password` = '".$password."') 
OR (`username` = '".$email."' AND `password` = '".$password."')</code>

然而並不建議使用這樣的sql。

你可以先在程式碼裡用正規判斷一下使用者輸入的是email還是username,如果是email則用email欄位查詢,否則就用username欄位。

參考資料:http://tool.oschina.net/regex#

首先,你的程式碼很容易就可以 SQL 注入了,所以請至少使用 mysqli ,個人強烈推薦 PDO。

然後,我個人的思路是,假設前端頁面的 form 表單的有類似這樣一個 input :

<code><input name="login" type="text" class="form-control" placeholder="用户名或者邮箱"></code>

我們這裡使用 name="login" 來替換 emailusername,然後:

<code>$field = filter_var($_POST['login'],FILTER_VALIDATE_EMAIL) ? 'email':'username';
// 这里的 $field 就是你的 欄位 (这边翻译为 字段 )</code>

然後 SQL 語句大概是這樣 :

<code>$email = $_POST['email'];
WHERE `".$field."` = '".$email."'</code>

再一次強調,你這樣的寫法很危險。

資料參考:http://php.net/manual/en/func...

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn