• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как Нормально Пользоваться Mysql?

  • Автор темы BlackShadow
  • Дата начала
B

BlackShadow

Народ. Вот уже пользуюсь мускулом, создаю, редактирую и прочее... Но у меня такое чувство, что что-то делаю не так.

Вот допустим, я создал базу данных с таблицей, где есть ID, логин и пароль пользователя. Когда он регистрируется, то я добавляю новую запись. Но вот такой момент. Если ник ВДРУГ повторяется, то мне нужно создать цикл for, в котором я буду проверять, совпало или нет, правильно? или есть какие-то другие способы сравнения введенных данных с базой?

Или вот второй момент - авторизация. Мне ОПЯТЬ нужно сделать for по всем записям в базе, чтобы проверить наличие такого пользоваеля?

Объясните нубику, пожалуйста...
 
B

Bugnet

Зачем for ? Делайте запрос в базу данных только по логину и извлекайте, например, id, если id не пустой - значит: запрос прошёл, т.е. в базе данных есть уже такой пользователь.
$q = mysql_query("SELECT id FROM users WHERE login='$login'");
Если пусто (empty), то разрешайте регистрацию нового пользователя.
Можно реализовать запрос сразу после того как пользователь покинул поле логина и начал вводить пароль- это если дружите с jQuery(JS)-Ajax. Всё будет выглядеть как на (введите логин Status)
 
B

BlackShadow

Я не понял, как пользоваться...

PHP:
$DBS = mysql_connect("localhost","ALEXANDR","endo1992");
if ($DBS){
echo "Соединил с БД<br>";

mysql_select_db("triplekill",$DBS);
$check = mysql_query("SELECT id FROM users WHERE log='$log'");
echo $check;

// Здесь он мне выдает результат Resourse id #5, хотя я не знаю, что это. Мне просто нужно проверить - занят логин или нет.

mysql_close($DBS);

} else {
echo "Не удалось соединиться<br>";
}
 
R

rampa

Шестая строка, и немного далее:

PHP:
$check = mysql_query("SELECT id FROM users WHERE log='$log'");
if( mysql_num_rows($check) == 0 ) {
// Логин не занят. Запрос к БД вернул ноль строк, т.е. нет такого id где log='проверяемый логин'
} else {
// Логин занят. Запрос вернул одну, либо, не дай бог более одной строк с результатом
}

Функция mysql_query() возвращает Resourse id, но не строку, не true/false, не число или массив, вроде так, может кто-то поправит меня. Затем это Resourse id используется в функциях: mysql_num_rows, mysql_fetch_array и пр., это просто php api которое парсит вывод mysql сервера
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!