2016-04-06 3 views
0

Das ist wahrscheinlich die einfachste Sache überhaupt, aber ich bin ein Noob!Wie validieren Sie einfach zwei Textfelder in einer if-else-Anweisung gleichzeitig? (C#)

Sagen Sie mir, ich baue derzeit ein Passwort/Benutzername if-else validator, der Ihnen eine Nachricht gibt, wenn Sie einen gültigen Benutzernamen und ein Passwort eingeben (sie sind in einem eindimensionalen Array gespeichert und die Passwörter nicht) müssen mit den Benutzernamen übereinstimmen, so lange Sie eines der Passwörter und Benutzernamen in den Arrays eingeben), ich mache ein If-Else für das Passwort und den Benutzernamen wie (dies ist ein Beispiel für Eile):

if{txtUsername.text = THE ARRAY}{ MessageBox.Show("Welcome ________") } 

und ich würde das gleiche für das Passwort tun.

ABER ... diese Konflikte ... was ist, wenn das Passwort richtig ist, aber der Benutzername falsch ist oder irgendeine andere widersprüchliche Variante. Alle If-Else-Anweisungen, die ich mache, werden nur in Konflikt geraten.

Wie würde ich mein Passwort/username eindimensionale Arrays in einer einzigen if-else-Anweisung zu validieren, die eine Nachricht ausspucken werden wie:

„Hallo (Benutzername von Array eingegeben) Ihr Passwort auscheckt! "

oder

"Hallo (username), es tut uns leid, aber das ist das falsche Passwort!"

"Hallo! Bitte geben Sie einen Benutzernamen und ein Passwort ein!"

oder eine andere Variation. Ich bin sicher, dass das sehr einfach ist, weshalb ich nach einer kleinen Hand frage!


Lassen Sie uns meine Arrays vorgeben werden

genannt
int[] passwords = {123,321,222}; 
string[] usernames = {"jon", "todd", "bob"}; 

und meine Textfelder sind txtUser und txtPass

+1

Ist dies nur ein Beispiel für das eigentliche Problem? Aus Sicherheitsgründen sollten Sie den Benutzer nicht darüber informieren, ob der Name oder das Kennwort das falsche Feld war, da Brute-Force-Angriffe dadurch einfacher werden. – Nikki9696

+0

Nur ein Beispiel! Ich lerne gerade, und ich würde immer wieder Punkte verlieren, weil ich immer wieder eine Milliarde widersprüchliche if-else-Aussagen mache, anstatt einfach nur einen einfach zu machen, wenn ich sonst versuche, an diesem Problem zu arbeiten. Jedes Beispiel, das Sie haben, ist willkommen! – RocknRollDude

+0

Dies verbindet alle Kennwörter miteinander, alle Benutzernamen miteinander und verknüpft Benutzer nicht mit Kennwörtern. Wenn Sie einen Benutzer mit einem Passwort verbinden möchten, ist dies ein schlechtes Design. –

Antwort

0

Ihre einzige Idee zu überprüfen, ob die eingegebene Anmeldeinformationen korrekt ist oder nicht, und nicht vom Benutzer zu lassen weiß genau, welche der Anmeldeinformationen schief gelaufen sind, wodurch der Hacker sich darauf konzentrieren kann (entweder Benutzername oder Passwort).

Sie können nur

if (txtUsername.text = "value" && txtpasswd.text = "value") 
//go on 
else 
//keep trying or lock out after certain trial 

Merkwürdiger zu bestätigen, dass Sie Anmeldeinformationen in einem Array gespeichert haben, aber in diesem Fall können Sie wie

tun
if(Array.IndexOf(yourusernamearray, txtUsername.text) > -1 && Array.IndexOf(yourpasswdarray, txtpasswd.text) > -1) 
+0

war es so einfach wie ein &&? Beeindruckend! Vielen Dank. Nur neugierig, anstatt "Wert", wie kann ich es so machen, dass es = was auch immer in dem Array ist – RocknRollDude

+0

@RocknRollDude, überprüfen Sie Bearbeiten in der Antwort, wenn das hilft. – Rahul

+0

Wenn Sie wissen möchten, ob ein Wert in einem Array vorhanden ist, könnten Sie LINQ oder ein contes einer Art anstelle von equals verwenden. – Nikki9696

0

Ohne in Skalierbarkeit und zahlreiche andere durch diese präsentiert Probleme Design (ich nehme an, die Frage ist akademisch), sollte Ihre Frage eher wie folgt gestaltet sein: "Wie stelle ich sicher, dass der Wert x in einem Array vorhanden ist und dass der Wert y dem Element an der gleichen Position in einem zweiten Array entspricht? möchte etwas wie:

public void WelcomeUser() 
    { 
     var userNames = new string[] { "jon", "todd", "bob" }; 
     var passwords = new int[] { 123, 321, 222 }; // integer passwords??? 
     var userLoc = Array.IndexOf(userNames, this.TxtUserName.Text); 
     if(userLoc >= 0 && passwords[userLoc] == Convert.ToInt32(this.TxtPass.Text)) 
      MessageBox(String.Format("Welcome {0}!", userNames[userLoc])); 
     else 
      MessageBox("Bad username or password"); 
    } 

Beachten Sie, dass es nicht ausreicht, einfach zu überprüfen, um zu sehen, ob hte Passwort im zweiten Array- vorhanden ist, vorausgesetzt, Sie Passwörter für Konten gebunden werden soll, und nicht einige seltsame Schema, bei dem eine beliebige Kombination von beliebigen Benutzernamen und ein beliebiges Passwort wird genügen.

0

Wenn der Benutzername falsch ist, haben Sie keine Ahnung, welches Passwort es sein sollte. Das ist normal. Wie von Nikki erwähnt, möchten Sie dem Benutzer einen allgemeinen Fehler geben, um ein Sicherheitsproblem zu vermeiden.

Versuchen Sie, diese

using System.Linq; 
var userIdx = usernames.ToList().FindIndex(x => x == txtUser.Text); 
var passIdx = passwords.ToList().FindIndex(x => x == int.Parse(txtPass.Text)); 

ähnliche

if(userIdx < 0 || passIdx < 0) 
    MessageBox.Show(Bad Credentials) 
else if(passIdx == userIdx) 
    MessageBox.Show(Welcome) 
else 
    MessageBox.Show(Bad Credentials) 

Empfohlen Nicht empfohlen, aber näher an, was gefragt wird.

if(userIdx < 0 || passIdx < 0) 
    MessageBox.Show(Bad Credentials) 
else if(userIdx < 0 && passIdx > -1) 
    MessageBox.Show(Bad Password) 
else if(userIdx > -1 && passIdx < 0) 
    MessageBox.Show(Bad username) 
else if(passIdx == userIdx) 
    MessageBox.Show(Welcome) 
else 
    MessageBox.Show(Bad Credentials) 
Verwandte Themen