前提・実現したいこと
PHPにてメールフォームを作っております。
あるホームページを見ながら、写経なのですが作りました。
そこで、バリデーションチェック後のエラーメッセージの表示を、
1つにまとめてするのではなく、
それぞれyour_name,email,commentでわけて取得する方法はないかと思い、質問させていただきました。
発生している問題・エラーメッセージ
PHP
1 2function validation ($data) { 3 $error = array(); 4 5 //氏名のバリデーション 6 if ( empty($data['your_name'])) { 7 $error[] = "名前は必ず入力してください"; 8 } elseif( 20 < mb_strlen($data['your_name']) ) { 9 $error[] = "名前は20文字以内で入力してください。"; 10 } 11 12 if( empty($data['email'])){ 13 $error[] = "メールアドレスは必ず入力してください"; 14 } elseif( !preg_match( '/^[0-9a-z_./?-]+@([0-9a-z-]+.)+[0-9a-z-]+$/', $data['email']) ) { 15 $error[] = "「メールアドレス」は正しい形式で入力してください。"; 16 } 17 18 if( empty($data['comment'])){ 19 $error[] = "コメントは必ず入力してください"; 20 } elseif( 10 >= mb_strlen($data['comment']) ) { 21 $error[] = "コメントは10文字以上で入力してください。"; 22 } 23 24 25 return $error; 26 }
PHP
1 <?php if( !empty($error) ): ?> 2 <?php foreach( $error as $value ): ?> 3 <?php echo $value; ?> 4 <?php endforeach; ?> 5 <?php endif; ?>
追記です↓ 20.02.24
PHP
1function validation ($data) { 2 $error = array(); 3 4 //氏名のバリデーション 5 if ( empty($data['your_name'])) { 6 $error['your_name'] = "名前は必ず入力してください"; 7 } elseif( 20 < mb_strlen($data['your_name']) ) { 8 $error['your_name'] = "名前は20文字以内で入力してください。"; 9 } 10 11 if( empty($data['email'])){ 12 $error['email'] = "メールアドレスは必ず入力してください"; 13 } elseif( !preg_match( '/^[0-9a-z_./?-]+@([0-9a-z-]+.)+[0-9a-z-]+$/', $data['email']) ) { 14 $error['email'] = "「メールアドレス」は正しい形式で入力してください。"; 15 } 16 17 if( empty($data['comment'])){ 18 $error['comment'] = "コメントは必ず入力してください"; 19 } elseif( 10 >= mb_strlen($data['comment']) ) { 20 $error['comment'] = "コメントは10文字以上で入力してください。"; 21 } 22 23 24 return $error; 25 }
HTML
1 <form method="post" action=""> 2 <p> 3 <label>お名前: 4 <?php 5 if( !empty($error) ) { 6 foreach( $error as $key => $value ) { 7 echo $error['your_name']; 8 } 9 } 10 ?> 11 <input type="text" name="your_name" value="<?php if( !empty($clean['your_name']) ) echo $clean['your_name']; ?>"> 12 </label> 13 </p> 14 <p> 15 <label>メールアドレス: 16 <?php 17 if( !empty($error) ) { 18 foreach( $error as $key => $value ) { 19 echo $error['email']; 20 } 21 } 22 ?> 23 <input type="text" name="email" value="<?php if( !empty($clean['email']) ) echo $clean['email']; ?>"> 24 </label> 25 </p> 26 <p> 27 <label>コメント: 28 <?php 29 if( !empty($error) ) { 30 foreach( $error as $key => $value ) { 31 echo $error['comment']; 32 } 33 } 34 ?> 35 <textarea name="comment" name="comment"><?php if( !empty($clean['comment']) ) echo $clean['comment']; ?></textarea> 36 </label> 37 </p> 38 <p><input type="submit" value="送信前に確認する" name="btn_confirm"></p> 39 </form>
何も入力せずにsubmitすると、エラーメッセージは3回吐き出されます。
何かを入力すると、your_nameのみUndefinedが出てしまいます。
説明
この状態だと、配列errorにそれぞれ値が入力され、echo $valueで、errorの中身が書き出されます。
それを、それぞれyour_nameからのエラーですよ、emailからのエラーですよ、commentからのエラーですよ、とわけて表示させたいです。
配列のさらに元をたどる方法はあるのか、それとも別の方法でいい方法があれば教えていただきたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/22 23:24
2020/02/23 03:04
2020/02/23 22:25
2020/02/23 22:38
2020/02/23 23:57