条件分岐のエラーの出し方についてです。
下記コードだと
$errorMsg = "入力された部署コードは権限がありません";
が上書きされて困っています。
自分で一から作ったものですが、構造自体が悪いのかどう改良していいのかわからずです。
コメント部分のソースは改良しようとしたけど、できなかったところです。
php
1<?php 2 3require_once(dirname(__FILE__).'/LoginModel.php'); 4 5$departmentCode = filter_input(INPUT_GET, 'departmentCode'); 6$staffCode = filter_input(INPUT_GET, 'staffCode'); 7$password = filter_input(INPUT_GET, 'password'); 8 9if(isset($_GET['submit'])) { 10 if($departmentCode){ 11 //下記メソッドでは部署コードが存在するかをチェック 12 //returnには該当レコードをセットしている 13 $singleLoginCheck = LoginModel::singleLoginCheck($departmentCode); 14 15 if($singleLoginCheck) { 16 //ページ遷移の処理 17 } else { 18 $errorMsg = "入力された部署コードは権限がありません"; 19 //$errorMsgSub = "入力された部署コードは権限がありません"; 20 } 21 //ログイン方法は2通りある。 22 //部署コードで使っているメソッド名の通り1つの入力値のみでログインできるのが部署コード 23 //もう1パターンは全てのフォームを使ってログインする方法 24 25 //①部署コード or 社員コード+パスワード ならわかるけど 26 //②部署コード or 部署コード+社員コード+パスワード っておかしくない? 27 //②なら①にするか、そもそも部署コードだけのログインでいいじゃん 28 //って思うけどそういう仕様だから今は気にせず 29 //ということで仕様通りに行くと、次のif文はここから始まる。と思う。 30 if($staffCode) { 31 if($password) { 32 //下記メソッドでは 33 //社員コードとパスワードが一致するか判定して 34 //部署コードのカラムを含むレコードをreturnしている 35 $doubleLoginCheck = LoginModel::doubleLoginCheck($staffCode,$password); 36 if($doubleLoginCheck) { 37 //下記でその部署コードのカラムと入力した部署コードが一致するかも確認 38 if($doubleLoginCheck['departmentCode'] === $departmentCode) { 39 //ようやく画面遷移 40 } else { 41 $errorMsg = "部署が一致しません"; 42 } 43 } else { 44 $errorMsg = "社員コードとパスワードが一致しません"; 45 } 46 } else { 47 $errorMsg = "パスワードを入力してください"; 48 } 49 } else { 50 $errorMsg = "社員コードを入力してください"; 51 } 52 } else { 53 $errorMsg = "部署コードを入力してください"; 54 } 55} 56?> 57<省略> 58<body> 59 <header class=""> 60 61 </header> 62 <article> 63 <form action="" method="get" accept-charset="utf-8"> 64 <table> 65 <tbody> 66 <tr> 67 <th>部署コード</th> 68 <td><input type="text" name="departmentCode" value="<?php $departmentCode ?>" ></td> 69 </tr> 70 <tr> 71 <th>社員コード</th> 72 <td><input type="text" name="staffCode" value="<?php $staffCode ?>" ></td> 73 </tr> 74 <tr> 75 <th>パスワード</th> 76 <td><input type="text" name="password" value="<?php $password ?>" ></td> 77 </tr> 78 </tbody> 79 </table> 80 <input type="submit" name="submit" value="ログイン"> 81 </form> 82 <?php 83 echo $errorMsg; 84 /* 85 if($errorMsgSub) { 86 echo "<br>" . $errorMsgSub; 87 } 88 */ 89 ?> 90 </article> 91</body>
最下部の$errorMsg出力箇所ですが、2段(2個表示)ではなく
何かしらのエラー文の出力は1つのみになるようにしなければなりません。
夕方ぐらいに別質問しましたが、
$errorMsg[] = "入力された部署コードは権限がありません";
のように配列に入れてけば上書きは防げますが
条件分岐に従った出力ができなくなってしまいます。
というところで悩んでいます。
要件としては下記です。
自分で造っておいてなんなんですが、
php
1if($doubleLoginCheck['departmentCode'] === $departmentCode) { 2 //ようやく画面遷移 3 } else { 4 $errorMsg = "部署が一致しません"; 5 }
このうち、下記に到達することがあっても
php
1else { 2 $errorMsg = "部署が一致しません"; 3}
下記に到達することはありません。
php
1if($doubleLoginCheck['departmentCode'] === $departmentCode) { 2 //ようやく画面遷移 3 }
部署コードを入力するということは、下記の処理になります。
php
1if($singleLoginCheck) { 2 //ページ遷移の処理 3 } else { 4 $errorMsg = "入力された部署コードは権限がありません"; 5 //$errorMsgSub = "入力された部署コードは権限がありません"; 6 }
部署コードが正しいものを入力していた場合、
php
1if($doubleLoginCheck['departmentCode'] === $departmentCode) { 2 //ようやく画面遷移 3 }
ではなく
php
1if($singleLoginCheck) { 2 //ページ遷移の処理 3 }
の処理をするのでこれでは結局は1通りのログインしか実装できていません。
要件をパッと見そんな複雑そうな内容ではなさそうなんですが
本当に困っています。宜しくお願いします。
//////////
色々模索した結果やりたかったことが実現できました。
仕様書はシンプルに見えても案外悩みました。
php
1<?php 2 3$departmentCode = filter_input(INPUT_GET, 'departmentCode'); 4$staffCode = filter_input(INPUT_GET, 'staffCode'); 5$password = filter_input(INPUT_GET, 'password'); 6 7function singleLoginCheck($storecd) { 8 9 if($storecd === "test") { 10 $result = $storecd; 11 } 12 return $result; 13} 14 15function DoubleLoginCheck($userCode, $password) { 16 17 if($userCode === "0001" && $password === "test001") { 18 $result =array( 19 "usercode" => $userCode, 20 "password" => $password 21 ); 22 } 23 return $result; 24} 25 26if(isset($_GET['submit'])) { 27 if(!empty($departmentCode)) { 28 $singleLogincheck = singleLogincheck($departmentCode); 29 if(empty($staffCode) && empty($password)) { 30 if($singleLogincheck) { 31 $errorMsg = "部署は存在します。部署情報で遷移します"; 32 } else { 33 $errorMsg = "そんな部署ありません"; 34 } 35 } else if(!empty($staffCode) && !empty($password)) { 36 $doubleLogincheck = doubleLogincheck($staffCode,$password); 37 if($doubleLogincheck) { 38 if($departmentCode === $singleLogincheck) { 39 $errorMsg = "3点締めOKです。ユーザー情報で遷移します。"; 40 } else { 41 $errorMsg = "社員コードとパスワードは合ってますが部署が違うようです"; 42 } 43 } else { 44 $errorMsg = "社員コードかパスワードが間違っています"; 45 } 46 } else { 47 if(empty($staffCode)) { 48 $errorMsg = "社員コードを入力してください"; 49 } 50 if(empty($password)) { 51 $errorMsg = "パスワードを入力してください"; 52 } 53 } 54 } else { 55 $errorMsg = "部署コードを入力してください"; 56 } 57} 58?> 59<!DOCTYPE html> 60<html> 61<head> 62 <meta http-equiv="content-language" content="ja"> 63 <meta charset="UTF-8"> 64 <meta name="robots" content="noindex,nofollow"> 65 <meta name="description" content=""> 66 <meta name="keywords" content=""> 67 <meta name="author" content=""> 68 <title></title> 69 <link rel="stylesheet" href="" /> 70 <script type="text/javascript" src=""></script> 71</head> 72<header class=""> 73 74</header> 75<body> 76 <header class=""> 77 78 </header> 79 <article> 80 <form action="" method="get" accept-charset="utf-8"> 81 <table> 82 <tbody> 83 <tr> 84 <th>部署コード</th> 85 <td><input type="text" name="departmentCode" value="<?php $departmentCode ?>" ></td> 86 </tr> 87 <tr> 88 <th>社員コード</th> 89 <td><input type="text" name="staffCode" value="<?php $staffCode ?>" ></td> 90 </tr> 91 <tr> 92 <th>パスワード</th> 93 <td><input type="text" name="password" value="<?php $password ?>" ></td> 94 </tr> 95 </tbody> 96 </table> 97 <input type="submit" name="submit" value="ログイン"> 98 </form> 99 <?php 100 var_dump($errorMsg); 101 ?> 102 </article> 103</body> 104<footer> 105 <nav> 106 </nav> 107</footer> 108</html> 109
回答3件
あなたの回答
tips
プレビュー