Используя table.Rows.count в c# я не думаю, что моя база данных подключена - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь сделать свой собственный экран входа и регистрации, и я попал в ту часть, где я хочу узнать, существует ли пользователь. По какой-то причине я создаю своего пользователя в своей базе данных, и он продолжает говорить «нет», когда мой пользователь уже существует.

Я не вижу, в чем проблема, потому что я следил за этим видео на YouTube, и я понимаю код, поэтому я действительно не знаю, почему он не работает. Я думаю, что моя база данных не подключена, потому что я использую другой порт на xamp, и я попытался набрать localhost:3306, но это не сработало, я получил сообщение об ошибке, поэтому я попытался localhost, но теперь я думаю, что он не подключен

using MySql.Data.MySqlClient;
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;

namespace Krunsj_V1
{
    public partial class Officiallogin : Form
    {
        public Officiallogin()
        {
            InitializeComponent();
        }

        public Officiallogin(bool doNotMakeInvisibile)
        {                  
               InitializeComponent();                       
        }

        private void bunifuCustomLabel1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Register Register = new Register();
            Register.ShowDialog();             
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            DB db = new DB();

            String username = txtUsername.Text;
            String password = txtPassword.Text;

            DataTable table = new DataTable();

            MySqlDataAdapter adapter = new MySqlDataAdapter();

            MySqlCommand command = new MySqlCommand("SELECT * FROM `users` WHERE `username` = @usn and 'password' = @pass", db.GetConnection());

            command.Parameters.Add("@usn", MySqlDbType.VarChar).Value = username;
            command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = password;

            adapter.SelectCommand = command;

            adapter.Fill(table);


            // check if there user exists or not 
            if (table.Rows.Count > 0)
            {
                MessageBox.Show("YES");
            }
            else
            {
                MessageBox.Show("NO");
            }
            //Application.Exit();
            //Mainwindow main = new Mainwindow(true);
            //main.Visibility = System.Windows.Visibility.Visible;
            //main.ShowDialog();
        } 

        private void txtPassword_OnValueChanged(object sender, EventArgs e)
        {
            //txtPassword.isPassword = true;        
        }

        //////////////////////////////
        // close button properties  //
        //////////////////////////////
        private void lblclose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void lblclose_MouseEnter(object sender, EventArgs e)
        {
            lblclose.ForeColor = Color.Black;
        }

        private void lblclose_MouseLeave(object sender, EventArgs e)
        {
            lblclose.ForeColor = Color.Purple;
        }
    }
}

1 Ответ

2 голосов
/ 21 марта 2020

Проблема в этом SQL выражении:

WHERE `username` = @usn and 'password' = @pass

'password' - строковый литерал, поэтому вы спрашиваете, является ли параметризованный пароль пользователя литеральной строкой "password".

Чтобы заключить имя столбца в MySQL, используйте обратные метки:

WHERE `username` = @usn and `password` = @pass

Или полностью отбросьте их, поскольку username и password не являются зарезервированными словами в MySQL:

WHERE username = @usn and password = @pass

Наконец, этот код подразумевает, что вы храните пароли пользователей в виде простого текста непосредственно в базе данных. Это огромная уязвимость безопасности и никогда не должно быть сделано. Исследуйте хеширование паролей (например, на https://auth0.com/blog/hashing-passwords-one-way-road-to-security/) или используйте готовую систему входа в систему вместо того, чтобы пытаться создать свою собственную.

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