お問合せフォームによる入力チェックの処理を考えていたのですが、0の処理がうまくいかず、ご助言頂きたくご質問させて頂きました。
以下は、お問合せ入力画面の「test1.php」です。
php
1<?php 2if(!$_POST){ 3 $name = ''; 4 $age = ''; 5 $age_err = ''; 6} 7 8?> 9 10<!DOCTYPE html> 11<html lang="ja"> 12<head> 13 <meta charset="UTF-8"> 14 <style> 15 .red{ 16 color:red 17 } 18 </style> 19<script type="text/javascript"> 20 21function check(){ 22 23 if(window.confirm('送信してよろしいですか?')){ // 確認ダイアログを表示 24 25 return true; // 「OK」時は送信を実行 26 27 } 28 else{ // 「キャンセル」時の処理 29 30 31 return false; // 送信を中止 32 33 } 34 35} 36 37 38</script> 39</head> 40<body> 41 <h1 class="red">お問合せ画面</h1> 42 <h2>お問合せ内容を入力してください</h2> 43 <form action="test2.php" method="post" onSubmit="return check()"> 44 <p>(必須)名前<input type="text" name="name" value="<?php if($name){echo $name;}else{echo '';} ?>"></p> 45 <span class="red"> 46 <?php if(!empty($name_err)): ?> 47 <?=$name_err?> 48 <?php endif;?> 49 </span> 50 51 <p>(必須)年齢<input type="text" name="age" size="2" value="<?php if($age){echo $age;}else{echo '';}?>">歳</p> 52 <span class="red"> 53 <?php if(!empty($$age_err)): ?> 54 <?=$age_err?> 55 <?php endif;?> 56 57 </span> 58 <p>好きな色 59 <input type="checkbox" name="color[]" value="赤">赤 60 <input type="checkbox" name="color[]" value="緑">緑 61 <input type="checkbox" name="color[]" value="青">青 62 </p> 63 64 <input type="submit" value="送信"> 65 66 </form> 67</body> 68</html> 69
以下は、入力フォームより送られた値の入力チェックを行う、test2.phpです。
php
1<?php 2// $name = ''; 3// $age = ''; 4if($_POST){ 5 6 $color = ''; 7 $name = filter_input(INPUT_POST,'name'); 8 $age = filter_input(INPUT_POST,'age'); 9 10 11 //if(count($_POST['color']) > 1){ 12 if(!empty($_POST['color'])){ 13 $color = implode(',',$_POST['color']); 14 15 } 16 //var_dump($color); 17 //} 18 var_dump($age); 19 20 if(!$name){ 21 $name_err = '名前を入力してください'; 22 } 23 24 if(!empty($age)){ 25 //全角を半角に 26 $age = mb_convert_kana($age,"a"); 27 //半角または全角のハイフンは取り除く 28 // $age = mb_ereg_replace("-", "", $age); 29 // $age = mb_ereg_replace("ー", "", $age); 30 // $age = mb_ereg_replace("-", "", $age); 31 //var_dump($age); 32 33 if(!ctype_digit($age)){ 34 $age_err = '年齢は整数を入力してください'; 35 } 36 echo __LINE__; 37 38 }else{ 39 40 $age_err = '年齢を入力してください'; 41 42} 43 44 45 46 47//var_dump($err); 48 49 50 if(!empty($name_err) || !empty($age_err)){ 51 include 'test1.php'; 52 }else{ ?> 53 54 <!DOCTYPE html> 55 <html lang="ja"> 56 <head> 57 <meta charset="UTF-8"> 58 <style> 59 .red{ 60 color:red; 61 } 62 </style> 63 </head> 64 <body> 65 <h1 class="red">お問合せ完了画面</h1> 66 <h2>送信しました</h2> 67 <table border="1"> 68 <tr> 69 <td>名前</td> 70 <td><?= $name?></td> 71 </tr> 72 <tr> 73 <td>年齢</td> 74 <td><?=$age?>歳</td> 75 </tr> 76 <tr> 77 <td>好きな色</td> 78 <td> 79 <?php 80 if($color){ 81 echo $color; 82 } 83 ?> 84 </td> 85 </tr> 86 </table> 87 </body> 88 </html> 89 90<?php 91 } 92} 93 94?> 95
「test1.php」の名前入力欄及び、年齢入力欄に「0」を入力すると、以下の画像のようになります。
名前の欄には、0と表示されずエラーメッセージが表示され、年齢の欄には、
php
1<p>(必須)年齢<input type="text" name="age" size="2" value="<?php if($age){echo $age;}else{echo '';}?>">歳</p>
ここで入力保持の為、設定した$ageが表示されません。
上記問題を解決するには、どのようにすれば良いでしょうか?
追記です。
「0」のチェックを解決したコードを作り直してみましたので、下記に追加しておきます。
下記は、お問合せ入力画面の「inquiry_form.php」です
php
1<?php 2 session_start(); 3 4 $err = []; 5 if(!empty($_POST)){ 6 $name = filter_input(INPUT_POST,'name'); 7 $age = (string)filter_input(INPUT_POST,'age'); 8 $color = filter_input(INPUT_POST,'color', FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 9 //全角を半角にし、空白を削除 10 $name = str_replace([' ',' '], '', mb_convert_kana($name, 'a', 'UTF-8')); 11 $age = str_replace([' ',' '], '', mb_convert_kana($age, 'a', 'UTF-8')); 12 var_dump($age); 13 if(!strlen($name) > 0){ 14 15 $name_err = '必須項目です'; 16 echo __LINE__ . PHP_EOL; 17 }else{ 18 echo __LINE__ . PHP_EOL; 19 20 } 21 22 if(empty($name_err)){ 23 $_SESSION['name'] = $name; 24 } 25 26 if(strlen($age) > 0){ 27 echo __LINE__; 28 29 if(!ctype_digit($age)){ 30 var_dump($age); 31 32 $age_err = '年齢は整数を入力してください'; 33 var_dump($age); 34 echo __LINE__ . PHP_EOL; 35 }else{ 36 var_dump($age); 37 echo __LINE__ . PHP_EOL; 38 } 39 }else{ 40 $age_err = '必須項目です'; 41 echo __LINE__; 42 } 43 44 // var_dump($name_err); 45 // var_dump($age_err); 46 // exit(); 47 if(empty($age_err)){ 48 $_SESSION['age'] = $age; 49 } 50 51 // var_dump($age); 52 // var_dump($age_err); 53 // exit(); 54 55 if($color){ 56 $color = implode('、',$color); 57 echo __LINE__ . PHP_EOL; 58 }else{ 59 $color = array(); 60 $color = ''; 61 //echo __LINE__ . PHP_EOL; 62 } 63 64 $_SESSION['color'] = $color; 65 66 if(empty($name_err) && empty($age_err)){ 67 header('Location:complete.php'); 68 exit(); 69 echo 'OK'; 70 echo __LINE__; 71 } 72 // var_dump($name_err); 73 // var_dump($age_err); 74 // exit(); 75 76 77 } 78 79?> 80 81 82 83<!DOCTYPE html> 84<html lang="ja"> 85<head> 86 <meta charset="UTF-8"> 87 <title>お問合せ</title> 88</head> 89<body> 90 <h1 style="color:red">お問合せ画面</h1> 91 <p>お問合せ内容を入力してください。</p> 92 <form id="input_form" action="inquiry_form.php" method="post"> 93 <p> 94 (必須)名前<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>"> 95 <span style="color:red"><?php echo isset($name_err) ? $name_err : ''; ?></span><br> 96 (必須)年齢<input type="text" name="age" size="5" value="<?php echo isset($age) ? $age : '';?>">歳 97 <span style="color:red"><?php echo isset($age_err) ? $age_err : ''; ?></span><br> 98 99 好きな色 <input type="checkbox" name="color[]" value="赤">赤 100 <input type="checkbox" name="color[]" value="緑">緑 101 <input type="checkbox" name="color[]" value="青">青 102 </p> 103 <input type="submit" value="送信"> 104 </form> 105 <script> 106 document.addEventListener('DOMContentLoaded',function(){ 107 document.getElementById('input_form').addEventListener('submit',function(e){ 108 if(!window.confirm('ページを送信しても良いですか?')){ 109 e.preventDefault(); 110 } 111 },false) 112 },false); 113 </script> 114</body> 115</html>
下記は、完了画面の「complete.php」です
php
1<?php 2session_start(); 3?> 4 5<!DOCTYPE html> 6<html lang="ja"> 7<head> 8 <meta charset="UTF-8"> 9 <title> お問合せ完了</title> 10</head> 11<body> 12 <h1 style="color:red">お問合せ 完了画面</h1> 13 <h3>送信しました</h3> 14 <table border="1" > 15 <tr> 16 <td>名前</td> 17 <td><?php echo $_SESSION['name']; ?></td> 18 </tr> 19 <tr> 20 <td>年齢</td> 21 <td><?php echo $_SESSION['age']; ?>歳</td> 22 </tr> 23 <tr> 24 <td>好きな色</td> 25 <td><?php echo $_SESSION['color']; ?></td> 26 </tr> 27 </table> 28</body> 29</html>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/01 03:10