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

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

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

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

PHP

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

Q&A

解決済

2回答

501閲覧

phpでcsvにセレクターの値を出力できない

hitonoko

総合スコア42

CSV

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

PHP

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

0グッド

1クリップ

投稿2022/09/05 04:54

前提

csvファイルを用いてスケジュール帳を作成しています。
年と月の値をcsvに追加できません。
原因や解決策などのご指摘をお願いします。

実現したいこと

年と月の値をcsvに追加できるようにする。

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

年と月の値がcsvに追加できない

エラーメッセージ

該当のソースコード

php

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

試したこと

$month = $_POST["month"];
$year = $_POST["year"];

$month = $_GET["month"];
$year = $_GET["year"];
に変更した

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

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

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

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

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

hitonoko

2022/09/05 05:21

自己解決いたしました。申し訳ございません。
m.ts10806

2022/09/05 05:44

ではついた回答から選ぶのではなく、自己解決の形をとってください。 https://teratail.com/help#resolve-myself いずれにしても私がした回答は理解されたほうが実装としてはのぞましい方向になると思いますが・・・。
hitonoko

2022/09/05 08:30

承知しました。回答の方、勉強させていただきます。
guest

回答2

0

送信ボタンで送信されるのはそのボタンが所属しているform内のみです。

投稿2022/09/05 05:45

m.ts10806

総合スコア80850

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

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

hitonoko

2022/09/06 05:42 編集

ご回答ありがとうございます。下記のように記述して年と月の値をcsvに追加可能になったのですが、リロード時に二重ポストが発生してしまいます。二重ポストを回避するためにはどのような方法が必要ですか?
m.ts10806

2022/09/06 03:54

コメントにコードを貼り付けられてもマークダウン使えませんし見にくいだけなので、質問本文へ。 なお、二重送信対応は本件とは無関係ですし、対応策は調べれば幾らでも出てくるレベルなのでいったん本件締めてください。
guest

0

自己解決

  1. <input type="hidden" name="year" value="<?php echo $year; ?>">
  2. <input type="hidden" name="month" value="<?php echo $month; ?>">

をmethod="post"のformに記述することで解決しました。

php

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

投稿2022/09/06 05:55

hitonoko

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問