html
1<form method="POST" action="" name="form2"> 2 <input type="date" name="date"> 3 <input type="tel" name="money"> 4 <input type="submit" value="決定"> 5</form>
のように日付と金額を入力するフォームを作り、決定ボタンを押すとcsvデータの6番目の時間数と掛けた費用が表示されるコードを書きました。
例えば二月十二日に今日の日付と金額を千円と入力すると二月十二日以降の金額欄が千円と表示されます。一週間後、二月十九日の日付で金額を千二百円と入力した場合、その日までの金額は千円のままで、一週間後(二月十九日)以降の金額が千二百円と表示されるようにしたいです。
現在私が考えたコードでは、一度金額を千円と入力するとデータの全てが千円になります。そこまではいいのですが、その後二月十九日・千二百円と入力すると、二月十九日以前のデータも全て千二百円になってしまいます。
csvデータの日付によってデータの変更を反映させるにはどうしたらよいでしょうか。
以下現在のコードです。
PHP
1<?php 2 3if(isset($_POST['date'])){ 4$date = $_POST['date']; 5}else{ 6 $date = ""; 7} 8 9$fileName = "Calendar.csv"; 10$file = fopen($fileName, "r"); 11 12while(!feof($file)){ 13$csv = fgets($file); 14$str = explode(",", $csv); 15 16 17if(isset($_POST['money']) ){ 18$money = $_POST['money']; 19}else{ 20 $money =""; 21} 22 23if(isset($_POST['money'])){ 24$cost = (int)$money * $str[6]; 25}else{ 26 $cost = ""; 27} 28 29 30$dataFile = "data.dat"; 31if($_SERVER['REQUEST_METHOD'] == 'POST' && 32isset($_POST['date']) && isset($_POST['money'])){ 33 34 if($money !== ''){ 35 $postedAt = date('Y-m-d H:i:s'); 36 $newData = $date . "\t" . $money . "\t" . $postedAt . "\r\n"; 37 $fp = fopen($dataFile, 'a'); 38 fwrite($fp, $newData); 39 fclose($fp); 40 } 41} 42 43$pastDay = $str[5]; 44 45if($date > $pastDay){ 46 $money = $newData[2]; 47}elseif($pastDay > $date){ 48 $money = $_POST['money']; 49}else{ 50 $money = ""; 51} 52 53$posts = file($dataFile, FILE_IGNORE_NEW_LINES); 54$posts = array_reverse($posts); 55 56?> 57 58 59<tr> 60<td><?php echo $str[0]; ?></td> 61<td><?php echo $str[1]; ?></td> 62<td><?php echo $str[2]; ?></td> 63<td><?php echo $str[3]; ?></td> 64<td><?php echo $str[4]; ?></td> 65<td><?php echo $str[5]; ?></td> 66<td><?php echo $str[6]; ?></td> 67<?php foreach($posts as $post) :?> 68 <?php list($date, $money, $postedAt) = explode("\t", $post); ?> 69 <td><?php echo $date; ?></td> 70 <td><?php echo $money; ?></td> 71 <?php endforeach ;?> 72<td><?php echo $cost ?></td> 73</tr> 74 75<?php 76} 77fclose($file); 78?> 79</table>
あなたの回答
tips
プレビュー