2016-08-20 4 views
0

私はデータベースにユーザ名とパスワードをチェックするログインページを作成しましたが、それはそれを拒否していないユーザー名とパスワードを許可しています。なぜこれが新しいのですか?私はuser_nameとパスワードを使ってデータベースにデータを入力したので、コード内に何かでなければならないわけではありませんが、プログラムを終了すると、パスワードが間違っていると言われます。プログラムはそれほど変わっていません。ログインページをmysql

namespace LoginApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      PassTextBox.PasswordChar = '•'; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string MyConnection = "datasource=localhost;port=3306;username=user;password=pass"; 
       MySqlConnection MyConn = new MySqlConnection(MyConnection); 
       MySqlCommand MyCommand = new MySqlCommand("select * from etool.login where user_name='" + this.UserTextBox.Text + "' and password='" + this.PassTextBox.Text + "' ;", MyConn); 
       MySqlDataReader MyReader; 

       MyConn.Open(); 
       MyReader = MyCommand.ExecuteReader(); 
       int count = 0; 
       while (MyReader.Read()) 
       { 
        Console.WriteLine(MyReader[count]); 
        count++; 
       } 

       MessageBox.Show("Username and password is correct"); 
       this.Hide(); 

       Form2 f2 = new Form2(); 
       f2.ShowDialog(); 

       if (count == 1) 
       { 
       } 
       else if (count > 1) 
       { 

        MessageBox.Show("Duplicate Username and passwor.\nAccess denied."); 
       } 
       else 
       { 
        MessageBox.Show("Username and password is incorrect.\nPleas try again."); 
       } 
       MyConn.Close(); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 
} 

答えて

1

まず、あなたのような変数でコマンドを構成するのではなく、パラメータを使用する必要があります。

第2に、ここにあなたのユーザーを入れてrootに渡すべきではありません。

第3に、「ユーザー名とパスワードは正しい」というメッセージを常に表示します。何もこれが起こらないようにするためです。

実際には、あなたのコードは次のようである:

while (MyReader.Read()) 
{ 
    Console.WriteLine(MyReader[count]); 
    count++; 
} 

//This block of code will ALWAYS be executed, 
//no matter the value of count. 
MessageBox.Show("Username and password is correct"); 
this.Hide(); 
Form2 f2 = new Form2(); 
f2.ShowDialog(); 

//This IF block is doing nothing. 
if (count == 1) 
{ 
} 

あなたが見ることができるように、実行されるべきコードはONLY場合には、カウンタが1の値は、どんな実行されませんでした。私はコードを置くだろうか

if (count == 1) 
{ 
    MessageBox.Show("Username and password is correct"); 
    this.Hide(); 
    Form2 f2 = new Form2(); 
    f2.ShowDialog(); 
} 
+0

:カウントが1に等しい場合

あなたはカウントがチェック1 INSIDE IFに等しい場合にのみ実行されなければならない、あなたのコードの一部を配置する必要がありますIFに私はこれに新しいです私はあなたが私が大いにそれを感謝するのを助けるならコミュニティの私の管理者のために働くためにこのツールを必要とします –

+1

私はすでにあなたに上記の答えを与えました。メッセージが表示されたコードを入力して、新しいフォームを開いて、dbが1つのレジスタだけを返すかどうかを確認します。 – Jauch

+0

Form2 f2 = new Form2()の場合はエラーが発生します。私はそれをForm2に変更すると、f1 =新しいForm2();あなたが私に投稿したコードとエラーはありません。すでにコードを見ましたか?あなたはちょうど私のポストからコードを貼りました.... o.O –

関連する問題