[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка уникального ключа
Yoda
Здравствуйте, возникла небольшая проблемка. Никак не могу понять одну простую вещь. Прошу помощи

У нас есть база данных с полями id и access

База заполнена этими значениями. К примеру, 1000 пользователей

В переменную у нас передается значение из формы

Как выяснить, есть ли вводимое значение в одной из access

То есть тут все заключается к тому чтобы выяснить, есть ли пользователь в базе лиц, которые имеют сюда доступ. Если есть, работаем с ним, если нет - гоним

_____________
Идеальной защиты не существует...
Yoda
Были попытки реализовать подобным образом, но ничего не вышло, как и следовало ожидать

$access = "sosiska";
$result = mysql_query("SELECT access FROM users ORDER BY id");
$myrow = mysql_fetch_array($result);
if (($myrow['access']) != $access) {
echo "Нифига";
}
else {
echo "Получилось";
}


_____________
Идеальной защиты не существует...
Valick
Yoda, проверку надо проводить средствами СУРБД, т.е. составлять запрос с условием WHERE


_____________
Стимулятор ~yoomoney - 41001303250491
Yoda
Я изменил скрипт, но снова не выходит. Нет значения "123456", но все равно выводит "Получилось"

$access1 = "123456";
$result = mysql_query("SELECT access FROM users WHERE access='$access1'");
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Нифига.");
}
else {
echo "Получилось";
}


_____________
Идеальной защиты не существует...
Yoda
Разобрался в чем состояла ошибка. Выложу код, может кому-нибудь пригодится
function check() {
$access = $_POST['access'];

$regular = '/[a-zA-Z0-9_]{6,6}/';
$result = preg_match($regular, $access);
if ($result==0) {
echo "<br> Вы ввели неверный код";
exit();
}

else {
$result = mysql_query("SELECT access FROM users WHERE access='$access'");
$myrow = mysql_fetch_array($result);
if (empty($myrow['access'])) {
exit ("Неверный код");
}
else {
echo "Код введен верно, теперь вы можете продолжить регистрацию";
$_SESSION['access'] = $access;
}
}
}

echo check();


_____________
Идеальной защиты не существует...
Valick
Цитата
Выложу код, может кому-нибудь пригодится

вообще-то код на троечку с огромным минусом, так что врядли он кому-то пригодиться

_____________
Стимулятор ~yoomoney - 41001303250491
Yoda
Цитата (Valick @ 5.07.2014 - 15:17)
Цитата
Выложу код, может кому-нибудь пригодится

вообще-то код на троечку с огромным минусом, так что врядли он кому-то пригодиться

Хорошо, а как бы вы сделали его лучше?

_____________
Идеальной защиты не существует...
McLotos
Первое что бросилось в глаза $result = mysql_query("SELECT access FROM users WHERE access='$access'");
плохая практика подставлять переменные напрямую в запрос. Хотя к пониманию сего факта приходишь с опытом =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Valick
У вас здесь функция ничего не принимает и ничего не возврящает, спрашивается зачем этот код надо было заворачивать в функцию?
Принимать переменную я бы посоветовал вне функции, а затем её туда передать.
Сама же функция, должна лишь обратиться к БД и на основании результата вернуть либо true либо false. (никаких echo и exit в этой функции проверки быть не должно)
Ну и про защиту от инъекций не стоит забывать.

_____________
Стимулятор ~yoomoney - 41001303250491
rooor
Цитата
if (empty($myrow['access'])) {

думаю mysql_num_rows будет достаточно =)
Valick
rooor, да про это тоже забыл написать, спасибо.
ну и совет SergeySA не надо обходить стороной, хотябы потому что в целях отладки запрос сохранённый в отдельную переменную легко вывести на экран и посмотреть что именно мы спрашиваем у БД. Особенно это спасает при сборке сложных запросов по многочисленным условиям.


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.