2016-05-18 13 views
0

以下のプログラムは現在、ユーザーのログインの詳細が正しいかどうかを確認しています。その後、ユーザーが管理者であるかどうかをチェックする次のセクションに進みます。現在、私はこれを正常に動作させようとしています。通常のユーザーはデータベースに 'user_admin' [null]と表示され、管理者はデータベースに1と表示されます。私は周りを見回して、誰かが私がそれをやっている方法でこれに関連する何かを尋ねたようです。SQLログインの確認 - ユーザータイプの確認

私のコードを見ると、AdminPanelを指し示すべきであるのに対し、通常のユーザーはUserPanelを指すはずです。これは私のプログラムが設定されているために人々はそこにアカウントを見ることができますが、管理者はアカウントを編集することができます。

これはコラージュプロジェクト用ですので、私はこのプログラムの簡潔さに取り組んでいます。

JLabel lblNewLabel = new JLabel(""); 
    lblNewLabel.setIcon(new ImageIcon(PanelLogin.class.getResource("/image/Login.png"))); 
    lblNewLabel.setBounds(118, 115, 100, 26); 
    lblNewLabel.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseEntered(MouseEvent e) { 
      lblNewLabel.setIcon(new ImageIcon(PanelLogin.class.getResource("/image/Loginv2.png"))); 
     } 
     @Override 
     public void mouseExited(MouseEvent e) { 
      lblNewLabel.setIcon(new ImageIcon(PanelLogin.class.getResource("/image/Login.png"))); 
     } 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      if (LoginAttempts < 3) { 
      try { 
       String Host = "removed"; 
       String Name = "removed"; 
       String Pass = "removed"; 

       Connection conn = DriverManager.getConnection(Host, Name, Pass); 
       PreparedStatement pst = conn.prepareStatement("SELECT `user_name`, `user_pass` FROM `table_1` WHERE `user_name` = ? AND `user_pass` = ?"); 
       pst.setString(1, textID.getText()); 
       pst.setString(2, String.valueOf(passwordField.getPassword())); 
       ResultSet Result = pst.executeQuery(); 
       if (Result.next()) { 
        String user =Result.getString("user_name"); 
        try { 
         PreparedStatement pst2 = conn.prepareStatement("SELECT `user_admin` FROM `table_1` WHERE `user_name` = ?"); 
         pst2.setString(1, user); 
         if (Result.next()) { 
          frmLotusLogin.dispose(); 
          new UserPanel(user).frame.setVisible(true); 
         } 
         else { 
          frmLotusLogin.dispose(); 
          new AdminPanelMain(user).frmLotusSecurity.setVisible(true); 
         } 

        } 
        catch (Exception exc){ 

        } 
       } 
       else { 
        JOptionPane.showMessageDialog(null, "Incorrect Username/Password"); 
        LoginAttempts = LoginAttempts + 1; 
       } 
      } 
      catch (Exception ex) { 
       System.out.println(ex); 
       JOptionPane.showMessageDialog(null, "An error occurred. Your Username/Password could be incorrect, " 
         + "If error contiues to appear please contact support! Error Number: L1"); 
      } 
      } 
      else { 
       JOptionPane.showMessageDialog(null, "You Have Entered The Wrong Password Too Many Times, You are now locked out!"); 
      } 
     } 
    }); 

私が間違って行ったことや正しく検証するために変更する必要があることを発見した人には、事前に感謝します。何が起こっているのかについてさらに詳しい情報が必要な場合は、お気軽にお問い合わせください。最初の提案の後

try { 
       String Host = ""; 
       String Name = ""; 
       String Pass = ""; 

       Connection conn = DriverManager.getConnection(Host, Name, Pass); 
       PreparedStatement pst = conn.prepareStatement("SELECT `user_name`, `user_pass` FROM `table_1` WHERE `user_name` = ? AND `user_pass` = ?"); 
       pst.setString(1, textID.getText()); 
       pst.setString(2, String.valueOf(passwordField.getPassword())); 
       ResultSet Result = pst.executeQuery(); 
        if (Result.next()) { 
         String user = Result.getString("user_name"); 
         try { 
          PreparedStatement pst2 = conn.prepareStatement("SELECT `user_admin` FROM `table_1` WHERE `user_name` = ?"); 
          pst2.setString(1, user); 
          ResultSet Result2 = pst2.executeQuery(); // added 
          if (Result2.next()) { // modified 
           System.out.println("Test"); 
           frmLotusLogin.dispose(); 
           new UserPanel(user).frame.setVisible(true); 
          } else { 
           frmLotusLogin.dispose(); 
           new AdminPanelMain(user).frmLotusSecurity.setVisible(true); 
          } 

         } catch (Exception exc) { 

          // do something here ! 

         } 
       } 
       else { 
        JOptionPane.showMessageDialog(null, "Incorrect Username/Password"); 
        LoginAttempts = LoginAttempts + 1; 
       } 
      } 
      catch (Exception ex) { 
       System.out.println(ex); 
       JOptionPane.showMessageDialog(null, "An error occurred. Your Username/Password could be incorrect, " 
         + "If error contiues to appear please contact support! Error Number: L1"); 
      } 
      } 
      else { 
       JOptionPane.showMessageDialog(null, "You Have Entered The Wrong Password Too Many Times, You are now locked out!"); 
      } 
     } 
    }); 

Here is the view of the table I'm using

これは、ユーザーが管理者かどうか

答えて

0

必要であれば、あなたは私が述べることをやっているかを見ることができますように私のテーブルは、現在に見えるものです2番目のステートメントを実行しないでください。もちろん、最初の結果セットを使用するため、結果を使用しないでください。

また、重要ではないことが確実でない限り、例外を無視することはありません。

最後に、文/接続が完了したら閉じます(この部分を以下のコードに追加しませんでした)。

 ResultSet Result = pst.executeQuery(); 
     if (Result.next()) { 
      String user = Result.getString("user_name"); 
      try { 
       PreparedStatement pst2 = conn 
         .prepareStatement("SELECT `user_admin` FROM `table_1` WHERE `user_name` = ? AND `user_admin` = 1"); 

       pst2.setString(1, user); 
       ResultSet Result2 = pst2.executeQuery(); // added 
       if (Result2.next()) { // modified 
        frmLotusLogin.dispose(); 
        new AdminPanel(user).frame.setVisible(true); 
       } else { 
        frmLotusLogin.dispose(); 
        new MainUserPanel(user).frmLotusSecurity.setVisible(true); 
       } 

      } catch (Exception exc) { 

       // do something here ! 

      } 
+0

これは非常に参考になりますが、あなたの提案は私が改善できるところを示しています。これは現在のところ問題は解決していませんが、管理者がログオンするとユーザーパネルに行くようになりました。私はあなたの編集提案を使って追加した変更を表示するために投稿を編集しようとしています。 –

+0

2番目のクエリの結果がある場合はAdminPanelが必要で、条件を逆転するために編集するだけです。 – Berger

+0

私のコードの下に私のテーブルのレイアウトを追加して、管理設定の様子を表示しました。また、結果を逆転させるために提案した編集を試してみましたが、今は管理ペインを開くだけです。私のコードが管理者検証でどのように機能するかを理解するのに役立つことを願っています。申し訳ありません問題があります。 –

関連する問題