状況を踏まえて追記しました 15:00
実施手順を振り返りますと、
文字列をフォームに入力し
ファイルとブラウザを更新してから、
ブラウザの戻るボタンを押してkadai5.txtを開きます。
とあります。
大事な手順が抜けています。
「文字列をフォームに入力し」の後に**「送信ボタンを押す」**
です。
先の回答にも書いたように「PHPはサーバー側の言語として、HTML出力の前に処理が行われます。」
つまり、今の状態だと、特にリクエストがPOSTかどうかもチェックせずに実行しているので、
画面を表示しただけで中身が空の「kadai5.txt」というファイルができあがります。
文字列を入力したのであれば、その情報をPHPに対して渡す必要があります。
その「渡す」を「送信」ボタン(正確にはSUBMITボタン)が担当してくれます。
つまりその「渡す(SUBMIT)行程をしていないので、テキストファイルの中身が空になる」
ということですね。
気になるところを。 14:46
htmlとphpの順序を入れ替えたりする
関係ありません。
PHPはサーバー側の言語として、HTML出力の前に処理が行われます。
ソースコード上の順序は関係なく、PHPが先に実行されていて、HTMLが出力されます。
それをわかりやすくするために、HTMLを書くより前にPHPを書いておくことを強くすすめます。
HTML内にPHPコードが埋め込まれているとかなり見づらくなり、バグの発見が難しくなります。
POSTについて
POSTはHTMLよりSUBMITされたときに初めて定義されます。
つまり、今の段階では定義されていないものをいきなり使っていることになります。
Noticeエラーが出ているはずです。
まずは送られたリクエストがPOSTかどうかを判断する判定を入れて利用してください。
php
1if ($_SERVER["REQUEST_METHOD"] === "POST") {
2 $comment=$_POST['comment'];
3 ~~~~
4
5}
6
7?>
8html
9~~
また、今の状態だと送信されたかどうかボタンを押下したあと分かりませんよね?
テキストファイルへの書き込みが終わったら何かしらメッセージを出すようにした方が良いでしょう。
php
1$result = '';
2
3if ($_SERVER["REQUEST_METHOD"] === "POST") {
4 $comment=$_POST['comment'];
5 ~~~~書き込み処理
6
7 $result = '書き込みました。';
8}
9?>
10
11html
12~~
13</head>
14<body>
15<?php echo $result; ?>
ブラウザの戻るボタンを押してkadai5.txtを開きます。
サーバー側の言語を実行しているときに限らずですが、ブラウザバックは基本的によくない行為です。
結局ブラウザから直でアクセスするのであれば、ファイルの存在チェックをして画面からリンクを置き、そこから開くようにすると良いのではないでしょうか。
php
1$filename='kadai5.txt';
2
3if ($_SERVER["REQUEST_METHOD"] === "POST") {
4 $comment=$_POST['comment'];
5 $fp=fopen($filename,'w');
6 fwrite($fp,"$comment");
7 fclose($fp);
8 $result = '<p>書き込みました。</p>';
9}
10
11$filelink = '';
12if(file_exists($filename)){
13 $filelink = '<p><a href="'.$filename.'">作成したファイルを開く</a></p>';
14}
15
16</head>
17<body>
18<?php echo $result; ?>
19<?php echo $filelink; ?>
20
もちろんリンクではなく、fopenでファイルの内容を取得して表示するのもありですが、課題のようなので、この辺で。