Heim > Backend-Entwicklung > PHP-Tutorial > E-Mail- oder Benutzername-Login

E-Mail- oder Benutzername-Login

WBOY
Freigeben: 2016-09-22 08:56:48
Original
1517 Leute haben es durchsucht

Ich würde gerne fragen. Ich habe Felder namens E-Mail und Passwort

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Das Obige ist meine Anmeldesyntax
Angenommen, der Benutzer gibt das E-Mail- oder Passwortpaar ein, ist die Anmeldung erfolgreich:

<code>`email` = '".$email."' AND `password` = '".$password."' 
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Aber wenn der Benutzer den richtigen Benutzernamen und das richtige Passwort eingibt, kann er sich trotzdem anmelden

<code>`username` = '".$email."' AND `password` = '".$password."'
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Es ist nur so, dass die obige Syntax nur zum Anmelden per E-Mail und Passwort verwendet werden kann
Wenn Sie sich mit Benutzername und Passwort anmelden, schlägt die Anmeldung fehl
Bestätigen Sie das JOIN-Benutzerprofil und verwenden Sie die ID problemlos
Was ist das Problem?

Antwortinhalt:

Ich würde gerne fragen. Ich habe Felder namens E-Mail und Passwort

<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>
Nach dem Login kopieren
Nach dem Login kopieren

Das Obige ist meine Anmeldesyntax
Angenommen, der Benutzer gibt das E-Mail- oder Passwortpaar ein, ist die Anmeldung erfolgreich:

<code>`email` = '".$email."' AND `password` = '".$password."' 
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Aber wenn der Benutzer den richtigen Benutzernamen und das richtige Passwort eingibt, kann er sich trotzdem anmelden

<code>`username` = '".$email."' AND `password` = '".$password."'
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Es ist nur so, dass die obige Syntax nur zum Anmelden per E-Mail und Passwort verwendet werden kann
Wenn Sie sich mit Benutzername und Passwort anmelden, schlägt die Anmeldung fehl
Bestätigen Sie das JOIN-Benutzerprofil und verwenden Sie die ID problemlos
Was ist das Problem?

Achten Sie darauf, Klammern hinzuzufügen, wenn Sie OR verwenden.

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

Es wird jedoch nicht empfohlen, ein solches SQL zu verwenden.

Sie können zunächst reguläre Ausdrücke im Code verwenden, um festzustellen, ob der Benutzer eine E-Mail-Adresse oder einen Benutzernamen eingibt. Wenn es sich um eine E-Mail handelt, verwenden Sie das E-Mail-Feld zur Abfrage, andernfalls verwenden Sie das Benutzernamensfeld.

Referenz: http://tool.oschina.net/regex#

Zuallererst Ihr Code kann problemlos mit SQL injiziert werden , also verwenden Sie bitte zumindest mysqli, ich persönlich empfehle PDO wärmstens.

Dann gehe ich persönlich davon aus, dass das Formular auf der Startseite eine Eingabe ähnlich dieser hat:

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

Wir verwenden hier name="login", um email oder username zu ersetzen, dann:

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

Dann sieht die SQL-Anweisung wahrscheinlich so aus:

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

Wieder einmal ist die Art, wie du schreibst, sehr gefährlich.

Informationsreferenz: http://php.net/manual/en/func...

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage