3 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
我想這只是為了學(xué)習(xí)目的或應(yīng)該保持簡(jiǎn)單的作業(yè),否則根本不安全。
您不需要使用循環(huán)。目前,您的循環(huán)循環(huán)會(huì)一一檢查所有節(jié)點(diǎn),對(duì)于與給定用戶/密碼不匹配的每個(gè)節(jié)點(diǎn),都會(huì)顯示消息框,這就是為什么您會(huì)看到消息框,直到循環(huán)到達(dá)正確的用戶/密碼為止。
在不使用循環(huán)的情況下,您可以通過(guò)這種方式輕松檢查給定的用戶/密碼是否存在于您的 xml 文件中:
var userName = userNameTextBox.Text;
var password = passwordTextBox.Text;
var match = System.Xml.Linq.XElement.Load(@"d:\users.xml")
.Elements("user")
.Where(x => x.Element("name")?.Value == userName &&
x.Element("password")?.Value == password)
.Any();
然后如果match不是真的,你可以顯示消息框。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
問(wèn)題是每次檢查 XML 中不匹配的條目時(shí)都會(huì)顯示消息框。
對(duì)代碼進(jìn)行最少更改的最簡(jiǎn)單方法如下:
private void button4_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("dati.txt");
bool found = false;
foreach (XmlNode node in doc.SelectNodes("//user"))
{
String User = node.SelectSingleNode("name").InnerText;
String Pass = node.SelectSingleNode("password").InnerText;
if (User == textBox1.Text && Pass == textBox2.Text)
{
found = true;
break;
}
}
if (found)
{
button1.Visible = true;
dlt_btn.Visible = true;
button3.Visible = true;
button3.Visible = true;
button5.Visible = true;
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
}
我們創(chuàng)建一個(gè)名為的變量found并將其設(shè)置為false. 這是為了確保如果 XML 為空或沒(méi)有匹配項(xiàng),我們將無(wú)法通過(guò)檢查。
然后我們遍歷結(jié)果并設(shè)置found = true是否找到匹配項(xiàng)。我們調(diào)用 break 來(lái)跳出循環(huán)。
循環(huán)完成后,我們檢查局部變量是否為真:
if (found)
這是簡(jiǎn)寫 if (found == true)
如果這是真的,那么我們會(huì)像以前一樣啟用您的按鈕。如果它不正確,那么我們將顯示錯(cuò)誤消息。
它只會(huì)顯示一次錯(cuò)誤消息。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是一個(gè)解決方案,有效:
private void button4_Click(object sender, EventArgs e)
{
string username;
string password;
string CurrentUser = "";
string CurrentPwd = "";
bool LoginStatus = false;
username = textBox1.Text;
password = textBox2.Text;
XmlDocument xmxdoc = new XmlDocument();
xmxdoc.Load("dati.txt");
XmlNodeList xmlnodelist = xmxdoc.GetElementsByTagName("user");
foreach (XmlNode xn in xmlnodelist)
{
XmlNodeList xmlnl = xn.ChildNodes;
foreach (XmlNode xmln in xmlnl)
{
if (xmln.Name == "name")
{
if (xmln.InnerText == username)
{
CurrentUser = username;
}
}
if (xmln.Name == "password")
{
if (xmln.InnerText == password)
{
CurrentPwd = password;
}
}
}
if ((CurrentUser != "") & (CurrentPwd != ""))
{
LoginStatus = true;
}
}
if (LoginStatus == true)
{
button1.Visible = true;
dlt_btn.Visible = true;
button3.Visible = true;
button3.Visible = true;
button5.Visible = true;
return;
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
}
- 3 回答
- 0 關(guān)注
- 230 瀏覽
添加回答
舉報(bào)