0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 8
MySQL

Сравнить вводимые данные со значением из таблицы бд

21.10.2020, 20:50. Показов 3097. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Пытаюсь реализовать что-то вроде ролей на php. Сама суть кривовата, возможно, но я поясню, чего хочу добиться. У меня есть сайт с меню ("главная страница", "регистрация", "авторизация", "комментарии" и тд.). И среди этих разделов меню есть страничка Админа. Есть авторизованый пользователь с логином Elizabeth. И я пытаюсь сделать так, чтобы только он мог зайти на эту страничку (логины уникальны, т.е. больше никто не может зарегистрироваться с таким логином). То есть, я хочу сравнить то, что вводит пользователь в форме авторизации с нужным логином в бд. И если они совпадают, впустить на страницу, а если нет - вывести alert и перекинуть на другую страницу.

Вот, что я пыталась сделать:

PHP
1
2
3
4
5
6
7
8
9
10
$link = database_connect();
            
$yourlogin = "SELECT * FROM `users` WHERE `login` = 'Elizabeth'";
$result = mysqli_query($link, $yourlogin) or die(mysqli_error($link));
 
$username = filter_var(trim($_POST['username']), FILTER_SANITIZE_STRING);
$log = "SELECT * FROM `users` WHERE `login` = '$username'";
$result2 = mysqli_query($link, $log) or die(mysqli_error($link));
 
$is_login_match = login_fit($result, $result2);
Функция сравнения в другом файле:

PHP
1
2
3
function login_fit($mylogin, $mylogin2){
    return $mylogin == $mylogin2;
}

Значение 'Elizabeth' прекрасно достаётся из бд и выводится. Но с вводимыми данными что-то не выходит.

PHP
1
2
3
4
5
6
7
if(!$is_login_match){
    echo '<script language="javascript"> alert("Вы не являетесь администратором") </script>';
    echo "<p><a href=file1.php>Вернуться на страницу меню</a></p>";
    exit();
    mysqli_free_result($result);   
    mysqli_free_result($result2);   
}
Прошу не кидаться тапками. Заранее большое спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2020, 20:50
Ответы с готовыми решениями:

Как в MySQL запросе сравнить значение id из таблицы A со значением a_id из таблицы B из последней добавленной записи
Очень тяжело объяснить, вот пример (работаю в phpmyadmin): У меня есть 2 таблицы: articles categories У articles есть...

Получить данные в текущей строке table в представлении вычислить их разность и сравнить с введённым значением
Получить данные в текущей строке table в представлении вычислить их разность и сравнить с введённым значением В представлении Index...

сравнить таблицы, подтянуть данные
нужно учесть, что в столбце А ГОСТы указаны без года издания,т.е нужно сравнить по начальным цифрам ГОСТов

6
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
21.10.2020, 21:03
Elizabeth2020, Обычно в таблице пользователей делается столбец признака - админ или нет. При авторизации значения правильно залогинившегося юзера сохраняются в сессиях. Типа
PHP
1
2
3
4
$_SESSION['auth'] = true;
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_email'] = $row['email'];
$_SESSION['admin'] = $row['admin'];
И далее используют суперглобальную переменную $_SESSION для определения кто есть кто и его данные из базы. Не нужно при каждом чихе делать запросы в базу. И ещё - обычно выводя меню проверяют админ ли пользователь и если нет, то просто не выводят пункты меню не предназначенные обычному пользователю.
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 8
21.10.2020, 21:28  [ТС]
Да, я понимаю, что это надо делать адекватно. И я как раз хотела узнать, с помощью чего можно сделать так, чтобы только админу высвечивались определённые пункты меню?
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
21.10.2020, 21:30
Elizabeth2020, Ну как чем? Кодом. Что-то вроде
PHP
1
2
3
if ($_SESSION['admin'] == true) {?>
   <li>Пункт меню</li>
<?}
1
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 8
21.10.2020, 21:37  [ТС]
Чем, понятно : ) Вопрос был, как реализовать. Никогда не видела такого. Спасибо большое!
Вы могли бы ещё подсказать какие-то материалы на эту тему?
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
21.10.2020, 21:39
Elizabeth2020, Ну для начала почитайте про сессии.
0
Невнимательный
 Аватар для ft4l
3118 / 1302 / 359
Регистрация: 08.02.2013
Сообщений: 7,618
Записей в блоге: 2
21.10.2020, 23:56
Цитата Сообщение от Elizabeth2020 Посмотреть сообщение
как реализовать
Навеяло соседней темой в другом подфоруме про array_multisort()
У меня например есть несколько файлов conf.php ... с текстом типа
$ITO_SNAV[] = array(0,15,'', 'Info', 'Info');
$ITO_SNAV[] = array(1,15,R::toLnk('_txt_2'), 'Misc', 'Misc');
$ITO_SNAV[] = array(1,15,R::toLnk('_txt_1'), 'About', 'About');
...
$ATO_SNAV[] = array(0,9,'', 'Admin Panel', 'Administration');
$ATO_SNAV[] = array(1,9,R::toLnk('db'), 'MySQL Database', 'MySQL');
$ATO_SNAV[] = array(1,9,R::toLnk('install'), 'Instalator', 'install');
...
$ITO_SNAV[] = array(0,6,R::toLnk('gb'), 'Гостевая книга', 'GuestBook');
$ATO_SNAV[] = array(1,6,R::toLnk('gb_adm'), 'Управление Гостевой книгой', 'GuestBook Manage');
получаю из них эти массивы типа таким
PHP
1
2
3
4
5
6
    echo '<h4>reading conf.php-files</h4>', "\n<pre>\n";
    foreach(glob(FROOT.'*/conf.php') AS $file){
        echo $file, "\n";
        require $file;
    }
    echo "\n</pre>\n";
Далее всем элементам второго массва выставляю разрешения 'perm'=>8
Сливаю два массива и сортирую по 2,1 значениям
PHP
1
2
3
4
array_walk($ATO_SNAV, function(&$v){ $v['perm'] = 8;});
$nav = array_merge($ITO_SNAV, $ATO_SNAV);
$sorts = array_map(function($x){ return $x[1] .'.'. $x[0];}, $nav);
array_multisort($sorts, SORT_ASC, $nav);
получаю такой массив
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
$nav = array (
  0 => 
  array (
    0 => 0,
    1 => 0,
    2 => '/',
    3 => 'Home page',
    4 => 'Home',
  ),
  1 => 
  array (
    0 => 0,
    1 => 3,
    2 => '/lab-x/',
    3 => '',
    4 => 'lab-x',
  ),
  2 => 
  array (
    0 => 0,
    1 => 6,
    2 => '/lab-x/gb',
    3 => 'Гостевая книга',
    4 => 'GuestBook',
  ),
  3 => 
  array (
    0 => 1,
    1 => 6,
    2 => '/lab-x/gb_adm',
    3 => 'Управление Гостевой книгой',
    4 => 'GuestBook Manage',
    'perm' => 8,
  ),
  4 => 
  array (
    0 => 0,
    1 => 9,
    2 => '',
    3 => 'Admin Panel',
    4 => 'Administration',
    'perm' => 8,
  ),
  5 => 
  array (
    0 => 1,
    1 => 9,
    2 => '/lab-x/db',
    3 => 'MySQL Database',
    4 => 'MySQL',
    'perm' => 8,
  ),
  6 => 
  array (
    0 => 1,
    1 => 9,
    2 => '/lab-x/install',
    3 => 'Instalator',
    4 => 'install',
    'perm' => 8,
  ),
  7 => 
  array (
    0 => 1,
    1 => 10,
    2 => '/lab-x/adm',
    3 => 'adm',
    4 => 'adm',
    'perm' => 8,
  ),
  8 => 
  array (
    0 => 2,
    1 => 10,
    2 => '/lab-x/adm_menu',
    3 => 'adm menu',
    4 => 'menu',
    'perm' => 8,
  ),
  9 => 
  array (
    0 => 2,
    1 => 10,
    2 => '/lab-x/adm_themes',
    3 => 'adm themes',
    4 => 'themes',
    'perm' => 8,
  ),
  10 => 
  array (
    0 => 2,
    1 => 10,
    2 => '/lab-x/adm_users',
    3 => 'adm users',
    4 => 'users',
    'perm' => 8,
  ),
  11 => 
  array (
    0 => 0,
    1 => 15,
    2 => '',
    3 => 'Info',
    4 => 'Info',
  ),
  12 => 
  array (
    0 => 1,
    1 => 15,
    2 => '/lab-x/_txt_1',
    3 => 'About',
    4 => 'About',
  ),
  13 => 
  array (
    0 => 1,
    1 => 15,
    2 => '/lab-x/_txt_2',
    3 => 'Misc',
    4 => 'Misc',
  ),
)

В Вашем случае наверно просто можно создать похожий массив своими способами ))
Вся соль в том что у пользователя при запросе любой странички устанавливается значение PERM переменной
Типа маски битов 1- просто юзер 2-юзер-юзер 4-супер 8-админ
или там сразу 15 - всё в одном ))
И вывод меню можно реализовать чем-то типа
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function show_menu(&$arr, $BM = 1) {
    echo "\n",'<ul class="menu">';
    $level = NULL;
    foreach($arr AS $tmp){
        # пропуск пунктов если есть =>['perm'] и нет в BitMask 
        if (isset($tmp['perm']) && !($BM & $tmp['perm'])) continue;
 
        if ($tmp[0] > $level) echo "<ul>\n";# уровень повышается только на 1
        # или понижается на сколько-то
        elseif ($tmp[0] < $level)  echo '</li>',
                    str_repeat("</ul></li>\n", $level-$tmp[0]);
        # или остаётся прежним
        elseif ($level !== NULL) echo "</li>\n";
        # отступы
        echo str_repeat("\t", $tmp[0]),
            '<li>';
        if ($tmp[2]) echo '<a href="', $tmp[2],($tmp[3]? '" title="'.$tmp[3]:''),
            '">', $tmp[4] ,'</a>';
        else echo '<b', ($tmp[3]? ' title="'.$tmp[3] .'">':'>'), $tmp[4], '</b>';
        $level = $tmp[0];
    }
    # закрытие после последней итераци
    echo '</li>', ($level? str_repeat("\n</ul></li>\n", $level):'');    
    echo '</ul><!-- /.menu -->',"\n";
}
 
show_menu($nav);
echo '<hr/>';
show_menu($nav, 15);
echo '<hr/>';
Вторым параметром show_menu() передавая это PERM.

Но не тестил ещё на всяких разных данных, которые в любом случае должны быть упорядочены.

Не по теме:

Наверное проблема с тем что всё меню каждый раз создаётся динамически
И хотелось бы
как-бы часть меню сделать как-бы кешированой а часть отдавать только при выполнении условий.
Но об этом я ещё не думал )) пока на стадии сомнений насчёт этой функции

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2020, 23:56
Помогаю со студенческими работами здесь

Вытащить данные из таблицы и сравнить 12 столбцов
Здравствуйте. У меня, к сожалению, очень посредственные знания excel. Очень прошу помочь. Есть задача: Таблица с перечнем клиентов и...

Как сравнить данные из одной таблицы
Добрый день! У меня вопрос. Есть таблица Tab1 куда я вношу свои расходы. Например так Idd(Поле счетчик) DateR ...

Сравнить два числа, вводимые пользователем с клавиатуры
Составить программу определения: равны ли два числа вводимые пользователем с клавиатуры с помощью средств языка Ассемблер. Помогите...

Вводимые данные
Здравствуйте. Появился небольшой вопрос. Программа состоит из двух форм. На первой расположены 7 различных textbox'ов. В них должны...

Не читает вводимые данные
Нужно было сделать что-то подобное контейнеру... вот, что у меня есть: program.cs using System; using System.Collections.Generic; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru