Heim  >  Artikel  >  Backend-Entwicklung  >  email或用戶名 登入

email或用戶名 登入

WBOY
WBOYOriginal
2016-09-22 08:56:481474Durchsuche

我想問一下 我有欄位叫做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" 来替换 email 或者 username,然后:

<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...

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn