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