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

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

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

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

Q&A

0回答

518閲覧

入力した日付とデータの日付によって値を変更する範囲を決めたい

at_0225

総合スコア4

PHP

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

0グッド

1クリップ

投稿2020/02/12 02:25

編集2020/02/15 21:23

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>

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

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

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

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

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

m.ts10806

2020/02/12 03:33

データ内容はどうなってるんでしょう。保存処理はどうなってますか?
at_0225

2020/02/12 04:07

データ内容はグーグルカレンダーをエクスポートしたもので、概要、曜日、開始日、開始時、終了日、終了時、時間数が順番に一行ずつ入っています。 今のところフォームのsubmitを押すだけしかしていないのですが、別途保存処理が必要なのでしょうか?
takepan1973

2020/02/12 21:00

「別途保存処理が必要なのでしょうか?」というのは、要件的に蓄積が必要であれば必要でしょう、としか言いようがありません。 言えるのは、そういう要件であるのに現状の状態で「どこかに勝手に保存、蓄積されること」を期待しているのであれば、「勝手には保存されません。現状では、揮発(その場限りの反映しかされない)状態」ということです。
at_0225

2020/02/13 00:30

ありがとうございます。保存処理を自分なりに加えてみましたが、やはりうまく行きません。foreachの使い方が間違っているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問