x9jdzhcc72mxib2azgcyo
@x9jdzhcc72mxib2azgcyo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

DB一致チェック aspnet c#

Discussion

解決したいこと

c#でデータベースと接続してログイン認証を行っていており、問題が発生したため質問させていただきました。データベースにユーザ1とユーザ2のID、PWがあるのですが、ユーザ1のIDとユーザ2のPWでも認証してしまい困っています。

該当するソースコード

 string PW = TextBox2.Text;
                bool a = false, b = false;
                while (dataReader.Read())
                {
                    if ((int)dataReader[0] == ID)
                    {
                        a = true;

                    }
                    if ((string)dataReader[8] == PW)
                    {
                        b = true;
                        break;
                    }
                }



                if (!a)
                {
                    errorms.Text = "IDが存在しません";
                    topMessage.Visible = true;
                }
                else if (!b)
                {
                    errorms1.Text = "パスワードが間違っています";
                    topMessage.Visible = true;
                }

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0

パスワードが一致したときだけwhileをbreakしていることが原因だと思います。
そのため、dataReaderの中にパスワードが存在すれば必ず認証してしまうのではないでしょうか。
逆に存在しなければ認証は通らないはずです。

こんな感じで解決するのでは。
動かしてないのでちょっと自信ないですが。。

`

            string PW = TextBox2.Text;
            bool a = false, b = false;
            while (dataReader.Read())
            {
                a = a || (int)dataReader[0] == ID;
                b = b || (string)dataReader[8] == PW;
            }

            if (!a)
            {
                errorms.Text = "IDが存在しません";
                topMessage.Visible = true;
            }
            else if (a && !b)
            {
                errorms1.Text = "パスワードが間違っています";
                topMessage.Visible = true;
            }

`

1Like

c#でデータベースと接続してログイン認証を行っていており、問題が発生したため質問させていただきました。

可能でればデータベースから情報を取得する際、ID、PWを条件に追加するよう実装した方が良いと思います。

一応、ソースコードに手を加えるとすればこんな感じでしょうか(動作未確認)

該当するソースコード(抜粋)
while (dataReader.Read())
{
    if ((int)dataReader[0] == ID)
    {
        a = true;

+        if ((string)dataReader[8] == PW)
+        {
+            b = true;
+            break;
+        }
    }
-    if ((string)dataReader[8] == PW)
-    {
-        b = true;
-        break;
-    }
}
1Like

Your answer might help someone💌