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>
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>
Aber wenn der Benutzer den richtigen Benutzernamen und das richtige Passwort eingibt, kann er sich trotzdem anmelden
<code>`username` = '".$email."' AND `password` = '".$password."' </code>
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?
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>
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>
Aber wenn der Benutzer den richtigen Benutzernamen und das richtige Passwort eingibt, kann er sich trotzdem anmelden
<code>`username` = '".$email."' AND `password` = '".$password."' </code>
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>
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>
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>
Dann sieht die SQL-Anweisung wahrscheinlich so aus:
<code>$email = $_POST['email']; WHERE `".$field."` = '".$email."'</code>
Wieder einmal ist die Art, wie du schreibst, sehr gefährlich.
Informationsreferenz: http://php.net/manual/en/func...