質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

534閲覧

セレクタの選択状態を維持したい

hitonoko

総合スコア42

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/09/01 03:53

編集2022/09/01 06:30

前提

csvファイルを用いてスケジュール帳を作成しています。
年と月を選択するセレクタの選択状態を維持する機能の実装ができません。
原因や解決策などのご指摘をお願いします。

実現したいこと

年と月を選択するセレクタの選択状態を維持できるようにする。

発生している問題・エラーメッセージ

選択状態が保持されない
エラーメッセージなし

該当のソースコード

php

1<?php 2 $year =''; 3 $month= ''; 4 $class="hide"; 5 6 if(isset($_POST["open"],$_POST["month"],$_POST["year"])){ 7 $class="open"; 8 $month = $_POST["month"]; 9 $year = $_POST["year"]; 10 $filename = 'calendar.csv'; 11 // ファイルを開く('a'は追記モード) 12 $fp = fopen($filename, 'a'); 13 // ファイルに書き込む 14 $add_data ="\n$year,$month,"; 15 fputs($fp, $add_data); 16 // ファイルを閉じる 17 fclose($fp); 18 19 } 20 21 $answer = ''; 22 if(isset($_POST["select"],$_POST["num1"],$_POST["add"])){ 23 24 $num1 = $_POST["num1"]; 25 $num2 = $_POST["select"]; 26 if($num2 >= 32){ 27 $answer = "不明な日付"; 28 }else if($num1 == "" || ctype_space($num1)){ 29 $answer = "入力してください"; 30 $num1 ="^(\s| )+$"; 31 }else if(mb_ereg_match(' ',$num1)){ 32 $answer = "入力してください"; 33 $num1 = $_POST["num1"]; 34 }else{ 35 36 $filename = 'calendar.csv'; 37 // ファイルを開く('a'は追記モード) 38 $fp = fopen($filename, 'a'); 39 // ファイルに書き込む 40 $add_data ="$num2,$num1\n"; 41 fputs($fp, $add_data); 42 // ファイルを閉じる 43 fclose($fp); 44 45 if($add_data ="$num2,$num1\n"){ 46 $answer = "入力成功"; 47 } 48 header('Location:http://localhost/practice2/calendar.php'); 49 exit(); 50 } 51 52 } 53 54 55?> 56<html> 57 <style> 58 .tr{ 59 display:flex; 60 61 } 62 .deco{ 63 display:flex; 64 } 65 .hide{ 66 display:none; 67 } 68 69 .open{ 70 display:block; 71 } 72 </style> 73 74 <form action="/practice2/calendar.php" method="post" > 75 76 <select name="year" > 77 <?php 78 79 for($y=2000; $y<=2100; $y++){ 80 if($year == $y){ 81 echo "<option value='$value' selected >".$y."</option>"; 82 }else{ 83 $selected=$y==2022?" selected":""; 84 echo "<option value=\"$y\"$selected >".$y."</option>"; 85 } 86 } 87 88 ?> 89 </select>90 <select name="month" id=""> 91 <?php 92 for($m=1; $m<=12; $m++){ 93 if($year == $m){ 94 echo "<option value='$value' selected >".$m."</option>"; 95 }else{ 96 $selected=$m==9?" selected":""; 97 echo "<option value=\"$m\"$selected>".$m."</option>"; 98 } 99 } 100 ?> 101 </select>102 <input type="submit" value="表示" name="open" method="post"> 103 </br> 104 </br> 105 <br/><?php echo $answer ?> 106 <div class="<?PHP echo $class; ?>"> 107 <?php echo $year; ?><?php echo $month; ?>108 </br> 109 </form> 110 <form action="/practice2/calendar.php" method="post" > 111 <select name="select" id="" > 112 <?php 113 if($month == 4 || $month == 6 || $month == 9 || $month == 11 ){ 114 for($i=1; $i<=30; $i++){ 115 echo '<option>'.$i.'</option>'; 116 } 117 }else if($month == 2 && $year % 4 == 0){ 118 for($i=1; $i<=29; $i++){ 119 echo '<option>'.$i.'</option>'; 120 } 121 122 }else if($month == 2){ 123 for($i=1; $i<=28; $i++){ 124 echo '<option>'.$i.'</option>'; 125 } 126 } 127 128 else{ 129 for($i=1; $i<=31; $i++){ 130 echo '<option>'.$i.'</option>'; 131 } 132 } 133 134 ?> 135 </select>136 137 <input type="text" name="num1"> 138 <input type="submit" value="登録" name="add" method="post"> 139 <br/> 140 <?php 141 if($month == 4 || $month == 6 || $month == 9 || $month == 11 ){ 142 for($i=1; $i<=30; $i++){ 143 144 ?> 145 146 <tbody> 147 <table id="targetTable" border="1"> 148 <tbody> 149 <tr class="tr"> 150 <td style="margin-right:2px;"> 151 <?php echo $i ?> 152 </td> 153 <td> 154 <?php 155 $fp = fopen('calendar.csv', 'r'); 156 $td_txt = ','; 157 $txt = ''; 158 while(($data = fgetcsv($fp)) !== false){ 159 160 if($year == $data[0] && $month == $data[1] && $i == $data[2]){ 161 if($txt == ""){ 162 $txt = htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 163 }else{ 164 $txt .= $td_txt.htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 165 } 166 } 167 168 } 169 echo $txt; 170 171 ?> 172 </td> 173 <?php 174 fclose($fp); 175 176 } 177 }else if($month == 2 && $year % 4 == 0){ 178 for($i=1; $i<=29; $i++){ 179 ?> 180 <tbody> 181 <table id="targetTable" border="1"> 182 <tbody> 183 <tr class="tr"> 184 <td style="margin-right:2px;"> 185 <?php echo $i ?> 186 </td> 187 <td> 188 <?php 189 $fp = fopen('calendar.csv', 'r'); 190 $td_txt = ','; 191 $txt = ''; 192 while(($data = fgetcsv($fp)) !== false){ 193 194 if($year == $data[0] && $month == $data[1] && $i == $data[2]){ 195 if($txt == ""){ 196 $txt = htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 197 }else{ 198 $txt .= $td_txt.htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 199 } 200 } 201 } 202 echo $txt; 203 204 ?> 205 </td> 206 <?php 207 fclose($fp); 208 } 209 }else if($month == 2){ 210 for($i=1; $i<=28; $i++){ 211 ?> 212 <tbody> 213 <table id="targetTable" border="1"> 214 <tbody> 215 <tr class="tr"> 216 <td style="margin-right:2px;"> 217 <?php echo $i ?> 218 </td> 219 <td> 220 <?php 221 $fp = fopen('calendar.csv', 'r'); 222 $td_txt = ','; 223 $txt = ''; 224 while(($data = fgetcsv($fp)) !== false){ 225 226 if($year == $data[0] && $month == $data[1] && $i == $data[2]){ 227 if($txt == ""){ 228 $txt = htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 229 }else{ 230 $txt .= $td_txt.htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 231 } 232 } 233 } 234 echo $txt; 235 236 ?> 237 </td> 238 <?php 239 fclose($fp); 240 } 241 } 242 else{ 243 for($i=1; $i<=31; $i++){ 244 ?> 245 <tbody> 246 <table id="targetTable" border="1"> 247 <tbody> 248 <tr class="tr"> 249 <td style="margin-right:2px;"> 250 <?php echo $i ?> 251 </td> 252 <td> 253 <?php 254 $fp = fopen('calendar.csv', 'r'); 255 $td_txt = ','; 256 $txt = ''; 257 while(($data = fgetcsv($fp)) !== false){ 258 if($year == $data[0] && $month == $data[1] && $i == $data[2]){ 259 if($txt == ""){ 260 $txt = htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 261 }else{ 262 $txt .= $td_txt.htmlspecialchars($data[3], ENT_QUOTES, "UTF-8"); 263 } 264 } 265 } 266 echo $txt; 267 ?> 268 </td> 269 <?php 270 fclose($fp); 271 272 } 273 } 274 275 ?> 276 </tr> 277 </tbody> 278 </table> 279 </div> 280 </form> 281 </body> 282</html> 283

calendar.csv

1

試したこと

入力した年or月とセレクタに設定してある値が一致した場合にselectedを追加して値が保持されるようにした
79,92行目

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/09/01 06:19

>発生している問題・エラーメッセージ >なし では起きている問題はない状態で、質問はないということになりませんか?
hitonoko

2022/09/01 06:31

大変申し訳ございません。修正いたしました。
yambejp

2022/09/01 06:47

calendar.csvは空なんですか?
hitonoko

2022/09/01 07:41

はい、年月や記入した内容がボタンを押すと追加されていく形になっております
guest

回答3

0

ベストアンサー

「自分ならこう書く」という一例です。(流れは同じなので年のみ)

PHP

1//※これ以前に$yearが何かしらで定義されている前提 2 3$year = ( empty($year) || is_null($year) ) ? date("Y") : $year ; 4for($y=2000; $y<=2100; $y++){ 5 $selected = ($year == $y) ? " selected":""; 6 echo "<option value='${y}'${selected}>${y}</option>"; 7 echo PHP_EOL; 8}

2022とハードコーディングしてしまうと年が変わるとコード変えなければならないのでdate()からシステム年を取得します。

投稿2022/09/01 07:51

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このように書くと行いたかった処理ができました。

php

1<select name="year" > 2 <?php 3 4 for($y=2000; $y<=2100; $y++){ 5 if ($y == $year && isset($_GET["open"])) { 6 $selected = "selected"; 7 #↑対象の数字かつボタンを押した状態で選択状態を保持 8 } elseif ($y == date("Y") && $year == "" ){ 9 $selected ="selected"; 10 #↑対象の数字かつボタンを押してない状態で初期値の設定 11 }else{ 12 $selected =""; 13 } 14 echo "<option value='$y' $selected>".$y."</option>"; 15 } 16 17 ?> 18 </select>

投稿2022/09/05 08:29

hitonoko

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

△△△△△△△△△△△△

投稿2022/09/01 11:09

MM_LL

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問