C # - Почему это дает всем VIP? - PullRequest
0 голосов
/ 20 июня 2019

Я делаю проект, и я думал, что у меня все работает.я пытаюсь сделать это, где, если у пользователя есть vip (или если vip равен 1), он откроет новую форму.проблема в том, что когда у одного человека есть vip, то у всех есть (или если vip равен 1 для одного человека)

Я много чего пробовал.и пока ничего не получалось.

Вот код кнопки:

private void MaterialFlatButton4_Click(object sender, EventArgs e)
{
    List<User> users = User.GetUsers();
    bool NotVip = true;

    foreach (User u in users)
    {
        ListViewItem item = new ListViewItem(new string[] { u.Id.ToString(), u.Username, u.Password, u.VIP.ToString() });
        item.Tag = u;
        if (u.VIP == 1)
        {
            NotVip = false;

            MessageBox.Show("Nothing in here works yet", "<3", MessageBoxButtons.OK);
            this.Hide();
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }
    }
    if (NotVip == true)
    {
        //Failed to login.
        MessageBox.Show("You do not have vip.\n\nPlease purchase and then try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Вот код User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace ch
{
    class User
    {
        //database stuff
        private const String SERVER = "localhost";
        private const String DATABASE = "project";
        private const String UID = "root";
        private const String PASSWORD = "********";
        private static MySqlConnection dbConn;

        // User class stuff
        public int Id { get; private set; }

        public String Username { get; private set; }

        public String Password { get; private set; }

        public int VIP { get; private set; }



        private User(int id, String u, String p, int v)
        {
            Id = id;
            Username = u;
            Password = p;
            VIP = v;
        }

        public static void InitializeDB()
        {
            MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
            builder.Server = SERVER;
            builder.UserID = UID;
            builder.Password = PASSWORD;
            builder.Database = DATABASE;

            string connString = builder.ToString();

            builder = null;

            Console.WriteLine(connString);

            dbConn = new MySqlConnection(connString);

            Application.ApplicationExit += (sender, args) => {
                if (dbConn != null)
                {
                    dbConn.Dispose();
                    dbConn = null;
                }
            };
        }

        public static List<User> GetUsers()
        {
            List<User> users = new List<User>();

            String query = "SELECT * FROM accounts";

            MySqlCommand cmd = new MySqlCommand(query, dbConn);

            dbConn.Open();

            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                int id = (int)reader["id"];
                String username = reader["username"].ToString();
                String password = reader["password"].ToString();
                int v = (int)reader["vip"];


                User u = new User(id, username, password, v);

                users.Add(u);
            }

            reader.Close();

            dbConn.Close();

            return users;
        }
    }
}

Я ожидал, что новая формаоткрывать ТОЛЬКО ЕСЛИ вошедший в систему пользователь имеет vip (и не открывать его для всех, если у одного пользователя есть vip)

1 Ответ

0 голосов
/ 20 июня 2019

Код делает то, о чем вы говорите.

В вашем методе GetUsers() вы получаете список пользователей.Затем вы перебираете элементы, и if (u.VIP == 1) затем открываете окно.Предполагая, что есть несколько записей с VIP == 1, он, конечно, будет открывать окно несколько раз.

Если вы хотите сделать это только тогда, когда текущий пользователь имеет разрешение VIP, вы, вероятно, захотите просмотреть учетные данные текущего пользователя вполученный список пользователей (при условии, что он там найден), и если действительно у пользователя есть VIP-разрешения, откройте новое окно.

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