验证数据输入c#

Posted

技术标签:

【中文标题】验证数据输入c#【英文标题】:Validation for the data input c# 【发布时间】:2020-09-06 13:01:08 【问题描述】:

我正在尝试使用 XML 文件为用户和管理员创建一个登录窗口,所以我的问题是如果密码不正确,如何验证用户名和 pwd 字段,我的代码仅针对管理员验证,但对于用户,表格显示,它也给出了错误。 如果能用errorProvider弥补就更好了。

提前谢谢你。

 private void btnlogin_Click(object sender, EventArgs e)
    
        XmlDocument doc = new XmlDocument();
        string file = @"../../../data/UsersDatabase.Xml";
        doc.Load(file);


            foreach (XmlNode node in doc.SelectNodes("//User"))
            
                username = node.SelectSingleNode("id").InnerText;
                pwd = node.SelectSingleNode("pass").InnerText;
            

            if (username.Equals(txtusername.Text) && pwd.Equals(txtpwd.Text))
            

                purchase fpur = new purchase();
                fpur.Show();
            


            foreach (XmlNode node in doc.SelectNodes("//Admin"))
            
                username = node.SelectSingleNode("id").InnerText;
                pwd = node.SelectSingleNode("pass").InnerText;
            

            if (username.Equals(txtusername.Text) && pwd.Equals(txtpwd.Text))
            
                Adminpanel fadmin = new Adminpanel();

                fadmin.Show();
            

            else
            
                MessageBox.Show("Sorry, username and password are incorrect",
                "Login Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            

    

【问题讨论】:

它给出了什么错误?并且请分享 XML! 我不是指错误,我是指 else 语句错误。这个在 else MessageBox.Show("对不起,用户名和密码不正确", "登录失败!", MessageBoxButtons.OK, MessageBoxIcon.Error); 对不起我的英语 【参考方案1】:

根据您的 xml 和您的描述,您希望我们显示不同的形式时

输入正确的用户名和密码。

我编写了以下代码,它运行良好。

  public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    

    private void button1_Click(object sender, EventArgs e)
    
        User user = new User();
        Admin admin = new Admin();
        string path = "D:\\test.xml";
        XDocument doc = XDocument.Load(path);
        var user1 = doc.Descendants("User");
        foreach (XElement item in user1)
        
            if (txtUserName.Text==item.Element("id").Value&& txtPWD.Text == item.Element("pass").Value)
            
                user.Show();
            
        
        var admin1= doc.Descendants("Admin");
        foreach (XElement item in admin1)
        
            if (txtUserName.Text == item.Element("id").Value && txtPWD.Text == item.Element("pass").Value)
            
                admin.Show();
            
        

    

另外,你需要使用using System.Xml.Linq;;

接下来是测试的xml。

<?xml version="1.0" encoding="utf-8"?>
<Loginlist> 
<Admin>
<FirstName>Administrator</FirstName> 
<LastName>A</LastName> 
<EmailAddress>admin@ge.com</EmailAddress> 
<PhoneNumber>1</PhoneNumber> 
<id>admin</id> 
<pass>admin</pass> 
</Admin> 
<User> 
<FirstName>Ab</FirstName> 
<LastName>Mo</LastName> 
<EmailAddress>ab@ge.com</EmailAddress> 
<PhoneNumber>1</PhoneNumber> 
<id>user</id> 
<pass>user</pass> 
</User>
</Loginlist> 

测试结果:

【讨论】:

非常感谢,但如果有多个用户和多个管理员,则无法以这种方式工作 @user3750496,我很抱歉。现在我已经修改了我的代码,它根据我的测试运行良好。您可以检查它是否适合您。【参考方案2】:

几个点 -

    您的代码不会区分管理员验证和用户验证 - 例如 - 一旦用户代码通过如下所述的验证 -

    if (username.Equals(txtusername.Text) && pwd.Equals(txtpwd.Text))
                        
                    purchase fpur = new purchase();
                    fpur.Show();
                
    

    管理员代码仍在后台运行,因为 XML 不会验证管理员 那时它给出了你提到的错误-

    当您传递与管理相关的 XML 时,它只会验证代码末尾的管理代码,因此与管理相关的代码可以正常工作。

    如果您想同时验证两者,那么您可以区分它们是否输入是 管理员或用户以这种方式您的条件语句将相应地运行。阿苏一世 删除了几个重复的代码,下面的代码是这样做的一种方法,并将此代码放在您的 btnlogin_Click 事件代码中-

                XmlDocument doc = new XmlDocument();
                string file = @"../../../data/UsersDatabase.Xml";
                doc.Load(file);
    
                bool isUser = false;
                bool isAdmin = false;
    
                //User
                foreach (XmlNode node in doc.SelectNodes("//User"))
                
                    isUser = true;
                    username = node.SelectSingleNode("id").InnerText;
                    pwd = node.SelectSingleNode("pass").InnerText;
                
                //Admin
                foreach (XmlNode node in doc.SelectNodes("//Admin"))
                
                    isAdmin = true;
                    username = node.SelectSingleNode("id").InnerText;
                    pwd = node.SelectSingleNode("pass").InnerText;
                
                if (username.Equals(txtusername.Text) && pwd.Equals(txtpwd.Text))
                
                    if (isAdmin)
                    
                        Adminpanel fadmin = new Adminpanel();
    
                        fadmin.Show();
                    
                    else if(isUser)
                    
                        purchase fpur = new purchase();
                        fpur.Show();
                    
                
                else
                
                    MessageBox.Show("Sorry, username and password are incorrect",
                    "Login Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
    

【讨论】:

感谢您的帮助。我是 C# 的初学者,我不知道如何使用“static void Main(string[] args)”我想在单击按钮登录时处理此代码。我正在使用 Windows 窗体应用程序。其次,txtusername.Text 和 txtpwd.Text 显示此错误,并显示“非静态字段、方法或属性 'login.txtusername' 需要对象引用” 我已经更新了我的答案,您必须将该代码放在您已经拥有的 btnlogin_Click ebent 处理程序中! 我非常感谢您的回答,它仅适用于管理员,但对于用户它给了我 else 错误声明这是 XML 数据 AdministratorAadmin@ge.com1adminadminAbMoab@ge.com1电话号码> useruser 任何时候管理员或用户都会登录?为什么将它们都放在一个 XML 中?

以上是关于验证数据输入c#的主要内容,如果未能解决你的问题,请参考以下文章

.net c# 验证输入时间格式的有效性

WPF C#如何将文本框输入验证为日期格式

C# 各种输入格式验证#各种输入格式验证

C#怎么才能输入3个数字加个逗号

使用数据注释在 c# 中进行数据验证

C#界面里的winform AutoValidate和CausesValidation属性