Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53

Отобразить кнопки в случае наличия строки в БД

18.05.2018, 15:06. Показов 3853. Ответов 71
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите, в чём может быть ошибка, вообщем, мне нужно из базы вытащить поле с именем логина "admin" и пароль "1234", если данные совпадают, то нужно отобразить кнопки добавления и удаления, а если нет, то оставить их скрытыми...
Вот код, но почему то он не отображает их

C#
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
 private void goodsFrame_Load(object sender, EventArgs e)
        {
            try { 
            MySqlCommand auth = new MySqlCommand("SELECT * FROM сотрудники WHERE логин_сотрудника = 'admin' 
AND пароль = '1234'");
            MySqlDataReader rd = auth.ExecuteReader();
            if (rd.Read())
            {
                mainForm mainForm = new mainForm();
                mainForm.Show();
                mainForm.FormClosed += (object s, FormClosedEventArgs ev) => { this.Show(); };
                this.Hide();
                    add.Visible = true;
                    remove.Visible = true;
            }
            else
            {
 
                MessageBox.Show("Неправильный логин или пароль!", "Ошибка авторизации");
            }
            
        }
            catch
            {
                
            } 
            add.BackgroundImage = Properties.Resources.addButton;
            remove.BackgroundImage = Properties.Resources.removeButton;
        }
Надеюсь на Вашу помощь, заранее всем спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2018, 15:06
Ответы с готовыми решениями:

Открытие заданного файла в случае наличия в определённом текстовом файле определённой строки
Здравствуйте, перепробовал много разных вариантов. Вобщем есть txt файл, в котором нужно отследить наличие определенной строки, и если она...

Вставка новой записи или обновление существующей в случае ее наличия
Есть HTML: <div class="input-group"> <span class="input-group-addon">Type</span> <input type="text" name="type"...

Проверка наличия элемента на странице циклом и остановка в случае true
Доброго дня уважаемое сообщество. Возник очень неприятный вопрос. У нас есть скрипт который подгружает некий блок через некое время...

71
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
22.05.2018, 06:33
Студворк — интернет-сервис помощи студентам
Alex4ncho,

Проверка логина в 131 строке.
Если в отделе нет записей, значит пользователь не зарегистрирован

C#
1
Data.Username = connection.userLogin; // где эта команда размещена?
0
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
22.05.2018, 09:38  [ТС]
meridbt, эта строка размещена вместо 121 и 122

Добавлено через 50 секунд
122 и 123 точнее
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
22.05.2018, 09:50
Alex4ncho,

форма goodsFrame не знает про форму connection.

эта команда должна располагаться в самой форме connection в блоке обработки события клика по кнопке "войти"
0
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
22.05.2018, 10:36  [ТС]
meridbt, тогда как мне потом вытащить информацию о пользователе в форму goodFrames?

Добавлено через 3 минуты
meridbt, и как правильно мне записать это в переменную или не надо этого делать, а обращаться на прямую

Добавлено через 2 минуты
meridbt, в форме goodFrames вместо string pad и usr

Добавлено через 25 минут
meridbt, прописал в форме connection
C#
1
2
3
4
5
6
public connection()
        {
            InitializeComponent();
            Data.Username = userLogin.Text;
            Data.Password = userPassword.Text;
        }
а это в форме goodsFrame
C#
1
2
string usr = Data.Username;
            string pwd = Data.Password;
Но, теперь пишет, что пользователь не зарегистрирован

Добавлено через 9 минут
meridbt, а почему ещё у меня авторизация успешная, если я ввожу логин сотрудника, у которого доступ "оператор"?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
22.05.2018, 17:29
Alex4ncho,

Добавьте сюда месседж бокс и посмотрите ЧТО вы записали в Data

C#
1
2
3
4
5
6
7
public connection()
        {
            InitializeComponent();
            Data.Username = userLogin.Text;
            Data.Password = userPassword.Text;
            MessageBox.Show(Data.Username + " " + Data.Password);            
        }
полагаю, авторизация успешная так как юзер прописан в БД, разве это не ожидалось?
0
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
22.05.2018, 17:34  [ТС]
meridbt, Авторизация успешная, но и права админа ему даются почему то, хотя его доступ обозначен, как "оператор"

Добавлено через 1 минуту
meridbt, дописал, там пусто

Добавлено через 1 минуту
этот бокс появляется перед тем, как я пройду авторизацию

Добавлено через 2 минуты
meridbt, Показывает пустоту, как мне исправить это, чтобы туда записывалась та информация, которую пользователь ввёл в поля, подскажите, пожалуйста
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
22.05.2018, 20:40
Alex4ncho,

Чтобы там не было пустоты, операцию присваивания нужно производить ПОСЛЕ того, как юзер вводит регистрационные данные. Какое событие у вас происходит после ввода имени пользователя и пароля?

В моём примере оператору не давались привилегии администратора. Проверяйте чего наизменяли.
Точку останова на строку проверки соответствия роли админской.
Отладка, отладка и ещё раз отладка.
0
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
22.05.2018, 21:02  [ТС]
meridbt, после ввода у меня происходит нажатие на кнопку авторизоваться

Добавлено через 45 секунд
meridbt, Ваш код я не менял, он как был так и остался

Добавлено через 16 секунд
meridbt,
C#
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
private void goodsFrame_Load(object sender, EventArgs e)
        {
            string usr = "admin";
            string pwd = "1234";  
            string admin_role = "админ";
            using (MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=1234"))
            {
                try
                {
                    connection.Open();
                    MySqlCommand command = new MySqlCommand();
                    command.CommandText = String.Format("SELECT пароль pwd, доступ role FROM sporthit.сотрудники WHERE логин_сотрудника = '{0}'", usr);
                    command.Connection = connection;
                    MySqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        if (reader.GetString(reader.GetOrdinal("pwd")) == pwd)
                        {
                            MessageBox.Show("Успешная авторизация!");
                            if (reader.GetString(reader.GetOrdinal("role")) == admin_role) // здесь admin_role это название Вашей админской роли (не имя пользователя)
                            {
                                this.AdminPrivileges = true;
                                MessageBox.Show("Вы зашли, как администратор!");
                            }
                            else
                            {
                                this.AdminPrivileges = false;
                            }
                        }
                        else
                        {
                            this.AdminPrivileges = false;
                            MessageBox.Show("Неверный пароль!");
 
                        }
                        return;
                    }
                    MessageBox.Show("Пользователь не зарегистрирован!");
 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
 
                }
            }
 
        }
Добавлено через 2 минуты
meridbt,
SQL
1
2
3
4
5
6
7
8
CREATE TABLE `сотрудники` (
  `фио` VARCHAR(50) NOT NULL,
  `логин_сотрудника` VARCHAR(50) NOT NULL,
  `пароль` VARCHAR(50) NOT NULL,
  `расписание` DATE NOT NULL,
  `доступ` VARCHAR(45) NOT NULL DEFAULT 'оператор',
  PRIMARY KEY (`логин_сотрудника`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Добавлено через 6 минут
meridbt, В бд может быть проблема? Проверить сможете, пожалуйста, я не могу понять, в чём ошибка...

Добавлено через 1 минуту
meridbt, Точка показывает, что у меня роль админа включается, не знаю почему(

Добавлено через 2 минуты
meridbt, Так, с классом Data разобрался, он записывает информацию, но теперь вопрос, как мне внедрить этот класс в Ваш код, чтобы информация о введённых данных бралась именно оттуда, потому что у меня он пишет ошибку, что пользователь не зарегистрирован...

Добавлено через 2 минуты
meridbt, Код верный, если вводить данные самому, но мне нужно как-то сделать, чтобы данные брались из моих текст боксов, помогите, прошу Вас

Добавлено через 3 минуты
meridbt, Вот код моей формы авторизации
C#
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.IO;
 
namespace SportHit
{
    public partial class connection : Form
    {
        MySqlCommand cmd = new MySqlCommand();
        
        
        public connection()
        {
            InitializeComponent();
            
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                MySqlCommand auth = new MySqlCommand("SELECT * FROM сотрудники WHERE логин_сотрудника = '" + userLogin.Text.Replace(" ", "") + "' AND пароль = '" + userPassword.Text + "'", serverSettings.serverConnection);
            MySqlDataReader rd = auth.ExecuteReader();
                if (rd.Read())
                {
                    mainForm mainForm = new mainForm();
                    mainForm.Show();
                    mainForm.FormClosed += (object s, FormClosedEventArgs ev) => { this.Show(); };
                    userLogin.Text = "";
                    userPassword.Text = "";
                    this.Hide();
                }
                else
                {
                    MessageBox.Show("Неправильный логин или пароль!", "Ошибка авторизации");
                }
                serverSettings.serverConnection.Close();
            }
            catch
            {
                serverSettings serverSettings = new serverSettings();
                serverSettings.Show();
            }
            Data.Username = userLogin.Text;
            Data.Password = userPassword.Text;
            //MessageBox.Show(Data.Username + " " + Data.Password);
        }
            
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            serverSettings serverSettings = new serverSettings();
            serverSettings.Show();
        }
 
        private void label4_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            serverSettings serverSettings = new serverSettings();
            serverSettings.Show();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
    }
}
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
22.05.2018, 21:47
Alex4ncho,

В моём коде объявлялись переменные usr и pwd. Удаляйте их. Вместо них используйте свойства из статического класса Data.

Пора заканчивать. 5 страниц на решение банальнейшей задачи это чересчур
0
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
23.05.2018, 06:53  [ТС]
meridbt, их нужно под переменные записывать?

Добавлено через 51 секунду
meridbt,
C#
1
command.CommandText = String.Format("SELECT пароль pwd, доступ role FROM sporthit.сотрудники WHERE логин_сотрудника = '{0}'", Data.Username);
C#
1
if (reader.GetString(reader.GetOrdinal("pwd")) == Data.Password)
Добавлено через 57 секунд
meridbt, я просто вообще не понимаю в C# ничего, а диплом сказали написать, извините, что мучаю Вас..

Добавлено через 14 минут
meridbt, я уже попробовал изменить usr и pwd, но у меня пишет, что пользователь не зарегистрирован

Добавлено через 1 час 30 минут
meridbt, после передачи данных, второй раз он удаляет значения, в чём может быть ошибка?

Добавлено через 4 минуты
meridbt, Я уже не знаю, в чём таится проблема, серьёзно, перепробовал много чего
И точку остановы ставил, смотрел в чём проблема, не передаёт он эти значения в другую форму...

Добавлено через 7 часов 9 минут
meridbt, у меня не получилось отправить данные в мою форму, уже пробовал создавать объект, помогите, пожалуйста...Самому не терпится закончить с этим и не мучить Вас, извините, просто я С# вообще не знаю
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
23.05.2018, 09:40
Лучший ответ Сообщение было отмечено Alex4ncho как решение

Решение

Alex4ncho,

1. Создайте БД и таблицу для теста запросом из сообщения 41.
2. Откройте проект из приложения и отредактируйте строку подключения к БД в строке 13 MainForm.cs
3. Запустите проект и протестируйте поведение при всех комбинациях логина / пароля (вход админа, вход юзера, ввод неверного пароля, ввод несуществующего в БД пользователя)
4. Вдумчиво изучите исходный код, его здесь совсем немного и в нём нет ничего сверхестественного
5. Осмысленно реализуйте аналогичный функционал в своём приложении
6. Делайте бэкапы перед внесением серьёзных изменений, чтобы была возможность откатиться назад если что-то не получилось

Как не надо делать
Не нужно копировать и вставлять в свой проект куски кода, в котором Вы не разобрались.
Вложения
Тип файла: 7z Alex4ncho.7z (711.3 Кб, 3 просмотров)
1
1 / 1 / 0
Регистрация: 10.10.2017
Сообщений: 53
23.05.2018, 13:29  [ТС]
meridbt, ВСЁ ЗАРАБОТАЛО!!! Спасибо Вам огромное за помощь, Вы мне очень сильно помогли, теперь буду внимательнее читать все коды и пытаться разбираться в них, а не просто тыкать на клавиши, ОГРОМНЕЙШЕЕ ВАМ СПАСИБО!!!
Всего Вам наилучшего)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2018, 13:29

Циклическая проверка наличия запущенного процесса и его закрытие в случае обнаружения
Напишите пожалуйста батник который при запуске начинает бесконечно примерно каждые 5 мин. проверять запущен ли процесс проги hl.exe и если...

Отслеживание наличия определённого процесса и выполнение заданной команды в случае его отсутствия
Добрый день, столкнулся с тяжелой проблемой, на которую нет ответа в интернете, я хочу сделать так: При запуске батч файла (cmd)...

Проверка наличия трёх текстовых файлов на диске и объединение их в один файл в случае существования каждого
Проверка наличия трех текстовых файлов на диске и объединения их в один файл. Как сие воплотить? :sorry:

В случае передачи строки, метод выдаёт true, а в случае передачи значения типа int - false
Всем привет! Почему в случае передачи строки, ниже приведённый метод выдаёт true, а в случае передачи значения типа int - false? ...

Отобразить дополнительное поле в админке Django в случае выполнения условия
Помогите с такой проблемой, допустим у меня есть в админке выпадающий список со странами, хотелось бы чтобы после выбора страны ниже...


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

Или воспользуйтесь поиском по форуму:
72
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru