Вставьте данные в таблицу после проверки имени пользователя и пароля - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть php-файл, который получает 4 параметра: имя пользователя, пароль, штрих-код, количество. Я хочу ВСТАВИТЬ штрих-код имени пользователя и считать в таблицу «users_products» после проверки, совпадают ли имя пользователя и пароль (из другой таблицы «users»)

Таким образом, код будет выглядеть примерно так:

IF EXISTS(SELECT * FROM users WHERE username = $username AND password = $password) THEN INSERT INTO users_products (username, barcode, count) VALUES ('username','barcode','count');

Этот код не работает, это даже не настоящий синтаксис, я думаю, но я думаю, что все понимают, что я хочу. Спасибо за любую помощь.

1 Ответ

0 голосов
/ 04 ноября 2019

Вы можете сделать 'select' из таблицы 'users', чтобы заполнить users_products, чтобы заставить пользователя существовать, чтобы запрос возвращал результаты. Это называется синтаксис "insert ... select" , и я думаю, что он является частью стандарта SQL, а также поддерживается в MySQL.

INSERT INTO users_products (username, barcode, count) 
SELECT username, 'barcode', 'count' 
FROM users 
WHERE username = 'username' AND password = 'password';

Это выбирает username столбец и некоторыестатически определенные поля из users, а затем вставляет данные, включая статические значения, в users_products. Количество вставленных строк скажет вам, совпадают ли имя пользователя и пароль.

'username', 'password', 'barcode' и 'count' предположительно предоставляются пользователем и должны быть интерполированы в подготовленный оператор, чтобы избежать уязвимости SQL-инъекций.

В реальном мире редко используют имя пользователя и пароль в качестве основного идентификатора сеанса пользователя. Обычно имя пользователя и пароль или другие учетные данные предоставляются при входе в систему, создается пользовательский сеанс, cookie-файл сеанса возвращается пользователю, и этот cookie-файл используется для ссылки на данные сеанса на стороне сервера. Более эффективно записывать данные такого типа в столбце с числовым идентификатором, чем в строке, и минимизировать пароль, передаваемый по сети. Конечно, я говорю это в неведении о том, что вы на самом деле делаете.

Другое дело: не храните пароли в виде простого текста. Вместо этого сохраните зашифрованную версию пароля и примените ту же самую крипту к любому предоставленному пользователем паролю для его проверки. Уязвимости SQL в базах данных, хранящих незашифрованные пароли, сегодня являются важной частью проблемы безопасности в сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...