前提・実現したいこと
バリデーションに引っ掛かったらカテゴリーを選択してくださいが消えてしまうので、
バリデーションに引っ掛かっても「カテゴリーを選択してください」が消えないようにしたい。
現在の状況だと、バリデーションに引っ掛かったら「カテゴリーを選択してください」が消えてしまいます。
なので、他のところでバリデーションに引っ掛かっても「カテゴリーを選択してください」が消えないようにしたい。
なお、カテゴリーを選択した上で他のバリデーションにひっかかる場合は以下のようにカテゴリーが選択された状態なので実装上問題ないです。
該当のソースコード
post.php
php
1session_start(); 2require_once(ROOT_PATH .'/Models/Post.php'); 3require_once(ROOT_PATH .'function.php'); 4ini_set('display_errors', "On"); 5$obj = new Post(); 6 7// ログインしているユーザid 8$company_id = $_SESSION['login_company']['id']; 9 10$err = []; 11 12 if($_SERVER['REQUEST_METHOD'] === 'POST'){ 13 14 $title = filter_input(INPUT_POST, 'title'); 15 $text = filter_input(INPUT_POST, 'text'); 16 $tags = filter_input(INPUT_POST, 'tags'); 17 $category = filter_input(INPUT_POST, 'category'); 18 $price = filter_input(INPUT_POST, 'price'); 19 20 if(empty($category)) { 21 $err['category'] = "カテゴリーを以下のセレクトボックスから選択してください"; 22 } 23 24 // エラーがなければ、DBにデータを保存し、リスト一覧にページ遷移 25 if(count($err) === 0) { 26 $j_tags = implode('/', array_column(json_decode($_POST['tags']), 'value')); 27 $result = $obj->createList($company_id,$_POST,$save_path, $j_tags); 28 $_SESSION['list_msg'] = "投稿が完了しました!"; 29 header('Location: index.php'); 30 exit; 31 } 32 <!-- カテゴリー --> 33 <h6 id="p-category"><label for="kome"><font color="red">*</font></label>カテゴリーを選択してください</h6> 34 <?php if(isset($err['category'])): ?> 35 <p class="err_one"><font color="red"><?php echo $err['category'] ?></font></p> 36 <?php endif; ?> 37 <select class="form-select" id="category-select" name="category"> 38 <?php if(isset($_POST['category'])): ?> 39 <option selected><?php echo h($obj->setCategoryName($category)); ?></option> 40 <?php else: ?> 41 <option selected value="0">カテゴリーを選択してください</option> 42 <?php endif; ?> 43 <option value="1">求人</option> 44 <option value="2">人材育成・研修</option> 45 <option value="3">集客・マーケティング</option> 46 <option value="4">Webサイト制作</option> 47 <option value="5">Webコンテンツ制作</option> 48 <option value="6">イラスト</option> 49 <option value="7">営業・コールセンター代行</option> 50 <option value="8">ビジネス相談・経営コンサル</option> 51 <option value="9">士業(税理士・行政書士など)</option> 52 <option value="10">翻訳・語学</option> 53 <option value="11">クリーニング</option> 54 <option value="12">音楽・ナレーション</option> 55 <option value="13">その他</option> 56 </select>
Post.php
/** カテゴリーIDからカテゴリー名に変換 * @param int $category_id * @return string */ public function setCategoryName($category) { if($category === '1') { return '求人'; } elseif($category === '2') { return '人材育成・研修'; } elseif($category === '3') { return '集客・マーケティング'; } elseif($category === '4') { return 'Webサイト制作'; } elseif($category === '5') { return 'Webコンテンツ制作'; } elseif($category === '6') { return 'イラスト'; } elseif($category === '7') { return '営業・コールセンター代行'; } elseif($category === '8') { return 'ビジネス相談・経営コンサル'; } elseif($category === '9') { return '士業(税理士・行政書士など)'; } elseif($category === '10') { return '翻訳・語学'; } elseif($category === '11') { return 'クリーニング'; } elseif($category === '12') { return '音楽・ナレーション'; } elseif($category === '13') { return 'その他'; } }
試したこと
以下の部分を削除し、デフォルトで最初からカテゴリーを選択している状態にしてみた。
<option selected value="0">カテゴリーを選択してください</option>
バリデーションに引っ掛かっても1回目はデータがデフォルトの物が送信されるが、2回ひっかかると空欄になってしまう。
回答1件
あなたの回答
tips
プレビュー