質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2905閲覧

ユーザー管理システムのユーザー新規登録について

mogukoro

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/06/07 07:46

前提・実現したいこと

ユーザーの管理システムを作成しています。

ユーザー新規登録の際に、以下の場合は登録失敗としてデータの登録は行わないようにしたいです。
条件1 既に登録されているログインIDが入力された場合
条件2 パスワードとパスワード(確認)の内容が異なる場合
条件3 入力項目に1つでも未入力の項目がある場合

まだプログラムの構造を理解できていないので、
アドバイス頂けると助かります。

発生している問題・エラーメッセージ

該当のソースコード

Java

1protected void doPost(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 request.setCharacterEncoding("UTF-8"); 5 6 // リクエストパラメータの入力項目を取得 7 String loginId = request.getParameter("loginId"); 8 String password = request.getParameter("password"); 9 String Name = request.getParameter("name"); 10 String birthDay = request.getParameter("birthDate"); 11 // リクエストパラメータの入力項目を引数に渡して、Daoのメソッドを実行 12 UserDao userDao = new UserDao(); 13 userDao.NewEntry(loginId, password, Name, birthDay); 14 15 /** 登録失敗時 **/ 16 User user = userDao.AlreadyUsed(loginId); 17 18 String str = (String) request.getParameter("password2"); 19 20 if (user != null) { 21 22 // リクエストスコープにエラーメッセージをセット 23 request.setAttribute("errMsg", "入力されたログインIDは既に使用されています"); 24 25 // ユーザー新規登録jspにフォワード 26 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userentry.jsp"); 27 dispatcher.forward(request, response); 28 return; 29 30 } else if (!str.equals(password)) { 31 // リクエストスコープにエラーメッセージをセット 32 request.setAttribute("errMsg", "パスワードが異なります"); 33 34 // ユーザー新規登録jspにフォワード 35 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userentry.jsp"); 36 dispatcher.forward(request, response); 37 return; 38 39 } else if (Name == null) { 40 41 // リクエストスコープにエラーメッセージをセット 42 request.setAttribute("errMsg", "未入力があります"); 43 44 // ユーザー新規登録jspにフォワード 45 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userentry.jsp"); 46 dispatcher.forward(request, response); 47 return; 48 49 } else { 50 51 /** 登録成功時 **/ 52 53 // ユーザ一覧のサーブレットにリダイレクト 54 response.sendRedirect("UserListServlet"); 55 56 } 57 } 58}

Dao

1public void NewEntry(String loginId, String password, String Name, String birthDay) { 2 3 Connection conn = null; 4 try { 5 // データベースへ接続 6 conn = DBManager.getConnection(); 7 // INSERT文を準備 8 String sql = "INSERT INTO user (login_id, name, birth_date, password, create_date, update_date) VALUES (?,?,?,?,now(), now())"; 9 10 // INSERTを実行 11 PreparedStatement pStmt = conn.prepareStatement(sql); 12 pStmt.setString(1, loginId); 13 pStmt.setString(2, Name); 14 pStmt.setString(3, birthDay); 15 UserDao UserDao = new UserDao(); 16 String string = UserDao.encoding(password); 17 18 pStmt.setString(4, string); 19 20 int result = pStmt.executeUpdate(); 21 22 System.out.println(result); 23 24 pStmt.close(); 25 26 } catch (SQLException e) { 27 e.printStackTrace(); 28 } finally { 29 if (conn != null) { 30 try { 31 conn.close(); 32 } catch (SQLException e) { 33 e.printStackTrace(); 34 } 35 } 36 } 37 } 38

jsp

1<body> 2 <div class="alert alert-dark" role="alert"> 3 <ul class="nav navbar-nav navbar-right"> 4 <li class="navbar-text">${userInfo.name}さん</li> 5 <li class="dropdown"><a href="LogoutServlet" 6 class="navbar-link logout-link">ログアウト</a></li> 7 </ul> 8 </div> 9 <div class="container"> 10 <h1 align="center"> 11 <b>ユーザー新規登録</b> 12 </h1> 13 <c:if test="${errMsg != null}"> 14 <div class="alert alert-danger" role="alert"> 15 <h2 align="center">${errMsg}</h2> 16 </div> 17 </c:if> 18 <div class="row justify-content-center align-items-center" 19 style="height: 100vh"> 20 21 <div class="col-4"> 22 <form action="userEntry" method="post"> 23 <p align="left">ログインID</p> 24 <div class="form-group"> 25 <input type="text" class="form-control" name="loginId"> 26 </div> 27 <p align="left">パスワード</p> 28 <div class="form-group"> 29 <input type="text" class="form-control" name="password"> 30 </div> 31 <p align="left">パスワード(確認)</p> 32 <div class="form-group"> 33 <input type="text" class="form-control" name="password2"> 34 </div> 35 <p align="left">ユーザー名</p> 36 <div class="form-group"> 37 <input type="text" class="form-control" name="name"> 38 </div> 39 <p align="left">生年月日</p> 40 <div class="form-group"> 41 <input type="date" class="form-control" name="birthDate"> 42 </div> 43 44 <button type="submit" class="btn btn-light">登録</button> 45 46 <p align="left"> 47 <a href="http://localhost:8080/UserManagement/UserListServlet">戻る</a> 48 </p> 49 </form> 50 </div> 51 52 </div> 53 54 </div> 55 56</body>

試したこと

自分なりに考えて実装したものだと、条件1は引っかかるのですが、
異なるパスワードを入力したり(条件2)、未入力のまま登録(条件3)をすると
条件2の場合、条件1のエラーメッセージが表示されますがDBへは登録されてしまいます。
条件3の場合も、条件1のエラーメッセージが表示されますが、空欄の項目は空欄のままDBへ登録されてしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DB処理を行う前に、入力フォームのバリデーションを先に済ませては?
一通り、問題がなければ、そこでDBへの登録を行い、重複などで失敗した場合のハンドリングも書くと良いと思います。

  1. 入力フォームのバリデーションチェックとエラーハンドリング
  2. DBへの登録とエラーハンドリング

の順番で書けば良いと思います。

投稿2019/06/07 08:27

編集2019/06/07 08:33
foobar810

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mogukoro

2019/06/11 06:58

参考になるご回答ありがとうございます。 解決することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問