2013-12-04 5 views
0

У меня есть две таблицы: Userlogindetails (имя пользователя, проходят) UserDetails (электронной почты, имя пользователя *)SQL Оператор Select, 2 таблицы

-Bolded являются PK, в Астерикс FK

I Я пытаюсь сделать страницу PHP с забытым паролем с помощью инструкции sql. Пользователь вводит свой адрес электронной почты, а оператор sql проверяет правильность адреса электронной почты в Userdetails. Тогда имя пользователя в Userdetails будет сопоставлено с Userlogindetails, чтобы найти пароль. Мне нужны два утверждения?

Благодаря

+0

Прежде всего, вам нужно избавиться от «' соответствие с Userlogindetails найти password'». Никогда не храните пароли, если вы не создаете хранилище паролей. – GolezTrol

+0

Если между пользователем и их логином существует некоторая взаимосвязь (что, кажется, существует, так как здесь нет других полей), почему бы просто не иметь одну таблицу? –

+0

@ GolezTrol Хранение паролей - типичная практика. Однако, если вы имели в виду, что никогда не следует хранить незашифрованные/незашифрованные пароли, я бы согласился с вами там. Пароли всегда должны быть подвергнуты какой-либо форме хэширования/шифрования для хранения. –

ответ

2

Нет (не нужно 2 заявления), вы можете сделать это с помощью SQL JOIN, например,

SELECT b.pass FROM 
userdetails a 
LEFT JOIN 
userlogindetails b 
ON a.username = b.username 
WHERE a.email = <put user input here, use a parameterized query> 

SQL JOIN и:

http://www.w3schools.com/sql/sql_join.asp

Как уже отмечалось, вы не должны хранить пароли в базе данных. В зависимости от ваших конкретных потребностей в безопасности вам необходимо решить, является ли это хорошей идеей. Пароль + соль хэширования техника для хранения обсуждается здесь:

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

Смежные вопросы