php
1<form action="" method="post" id="signup2"> 2 <p> 3 メールアドレスを入力してください。 4 <input type="text" name="email" placeholder="メールアドレス" value="<?= isset($app->getValues()->email) ? h($app->getValues()->email) : ''; ?>"> 5 </p><br> 6 <p class="err"><?= h($app->getErrors('email')); ?></p> 7 8 <p> 9 ユーザーの識別IDです。<br>半角で入力してください。 10 <input type="text" name="id" placeholder="アカウントID" value="<?= isset($app->getValues()->id) ? h($app->getValues()->id) : ''; ?>"> 11 </p><br> 12 <p class="err"><?= h($app->getErrors('id')); ?></p> 13 14 パスワードを入力してください。 15 <input type="password" name="password" placeholder="パスワード" value="<?= isset($app->getValues()->password) ? h($app->getValues()->password) : ''; ?>"> 16 </p><br> 17 <p class="err"><?= h($app->getErrors('password')); ?></p> 18 <div class="btn" onclick="document.getElementById('signup2').submit();">新規登録</div> 19 <input type="hidden" name="token" value="<?= h($_SESSION['token']); ?>"> 20 <input type="hidden" name="posttype" value="signup"> 21 </form>
ユーザ認証の勉強でフォームを作りました。そこでうまくIDを英数で入力しないとエラーがでるようにしたく下のコードを書きました。
php
1 2 try { 3 $this->signup_validate(); 4 } catch (\MyApp\Exception\InvalidEmail $e) { 5 $this->setErrors('email', $e->getMessage()); 6 } catch (\MyApp\Exception\InvalidPassword $e) { 7 $this->setErrors('password', $e->getMessage()); 8 }catch (\MyApp\Exception\InvalidId $e){ 9 $this->setErrors('id', $e->getMessage()); 10 } 11 12 13 private function signup_validate() 14 { 15 // 送られてきたトークンが本物かどうか調べる 16 if (!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) { 17 echo "送信中エラー エラー番号T01"; 18 exit; 19 } 20 21 // 入力したデータ(メール)が形式じゃなかったらエラーを返す 22 if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 23 throw new \MyApp\Exception\InvalidEmail(); 24 } 25 26 // 入力したデータ(パスワード)が形式じゃなかったらエラーを返す 27 if (!preg_match('/\A[a-zA-Z0-9]+\z/', $_POST['password'])) { 28 throw new \MyApp\Exception\InvalidPassword(); 29 } 30 31 // 入力したデータ(アカウントID)が形式じゃなかったらエラーを返す 32 if (!preg_match('/\A[a-zA-Z0-9]+\z/', $_POST['id'])) { 33 throw new \MyApp\Exception\InvalidId(); 34 } 35 } 36
とこんな感じにしました。そして、
php
1catch (\MyApp\Exception\InvalidId $e){ 2 $this->setErrors('id', $e->getMessage()); 3} 4```が引っかかってほしいのに、 5```php 6catch (\MyApp\Exception\InvalidEmail $e) { 7 $this->setErrors('email', $e->getMessage()); 8} 9```で引っかかってしまうので、英数で入力してくださいというメッセージではなく、メールアドレスを正しく入力してください。というメッセージが表示するバグに遭遇しています。助けてください。
実際に画面のフォームからどのような入力値を送信しているか具体的に提示していただけると回答も詳しくできるかとおもいます。
回答2件
あなたの回答
tips
プレビュー