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

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

ただいまの
回答率

87.61%

php ファイルの変数をhtmlファイルで使いたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,090

score 41

やりたい事。
htmlファイルのフォームからテキストファイルに番号<>名前<>コメント<>時刻を保存し、
テキストファイルを読み込み、htmlファイルのフォームの下に番号<>名前<>コメント<>時刻を表示したい。

できないこと。
htmlのなかに組み込まれているphpをうまく表示することができない。

require_onceを使うと、phpファイルの変数をhtmlファイルで使うことができると
かいてあったのでやってみたが出来なかった。

<?php
header('Content-Type: text/html; charset=UTF-8');
function h($str) {
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
require_once('board.php');
?>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>sample</title>
  </head>
  <body>
    <form method="post" action="board.php">//フォーム
      <p>名前</p>
      <input type="text" name="name" placeholder="山田太郎" required="required">
      <p>コメント</p>
      <textarea type="text" name="com" required="required">
      </textarea>
      <!-- <input type="hidden" name="token" value="<?=h(sha1(session_id()))  ?>"> -->
      <input type="submit" value="送信">
    </form>
    <p>
      <?php

        foreach ($text_rows as $text_row) {//配列でcount<>name<>comment<>data表示
          if($text_row === ""){
            continue;
          }
          $ret = explode("<>", $text_row);
          echo $ret[0];
          echo $ret[1];
          echo $ret[2];
          echo $ret[3];
          echo "<br>";

        }
      ?>

    </p>
  </body>
</html>
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>sample</title>
  </head>
  <body>

    <?php

      function h($str) {
        return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
      }

      //session_start(); // 1

      $name = (string)filter_input(INPUT_POST, 'name'); //名前フォーム値 文字列にキャスト
      $comment = (string)filter_input(INPUT_POST, 'com');//コメントフォーム値 フィルタリングする
      //$token = (string)filter_input(INPUT_POST, 'token'); // トークンセッション

      $fp = fopen('board.txt', 'a+');
    if ($_SERVER['REQUEST_METHOD'] === 'POST'/* && sha1(session_id()) === $token */) { // postが送られて来てるか?CSRF対策
        flock($fp, LOCK_SH);
        $text_rows = file("board.txt");
        $count = count($text_rows);//行数をカウント
        $add_text = ($count + 1)."<>".$name."<>".trim($comment)."<>".date('H時i分');//追加したい文章
        array_unshift($text_rows, $add_text);
        flock($fp, LOCK_EX);
        fwrite($fp, $add_text."\n");
        flock($fp, LOCK_UN);
        fclose($fp);
      }else{
        echo "エラー";
      }




    ?>
  </body>

</html>

テキストファイルにはうまく保存することができていますが、表示がうまいこと行きません。
まだまだ未熟者なので教えていただけると幸いです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

require_onceを使うと、phpファイルの変数をhtmlファイルで使うことができると
かいてあった

そんなふうに書いている本はないと思います。

htmlコード(bodyだのh1だのpだのtableだの)は
phpファイルにもhtmlファイルにも記述できますが、

htmlファイルはサーバー側でプログラム実行するわけではなく
htmlファイルに書いてあるままwebブラウザに向けて送信されるのに対して、

phpファイルであればサーバー上でphpコードを実行した結果を踏まえて
phpファイルに含まれているhtmlも一緒にwebブラウザに向けて送信されます。

なので、phpコードを実行してその結果をhtml内に組み込みたい場合には、
(ファイル名の末尾が)「~.html」や「~.htm」とするのではなく、
(ファイル名の末尾を)「~.php」とするのが正しいです。
そういう意味でphpファイルと呼びます。

そして、やりたいことを解釈するに、

テキストファイルに番号<>名前<>コメント<>時刻を保存

というのはフォームで受信した投稿内容を
データを保存する目的でテキスト形式のファイル(データファイルと呼ぼう)に保存する
という意味でしょうね。
フォームで投稿を受信するたびに、
データファイルを編集して改めて同じデータファイルに保存し直す必要があると。

その、保存してあるデータファイルをphpの処理で読み出して、
投稿用フォームの下に展開して表示しようとしているのでしょうね。
いわゆる簡易掲示板ですね。

それをこの場でイチから教えるのはとても大変ですし、
一気に作り上げるのではなく

・フォームの表示
・投稿を受信してデータファイルに保存
・指定の番号の投稿データをデータファイル上から削除
・指定の番号の投稿データを投稿フォーム上に再現
・再現した投稿フォームからの投稿をデータファイルに編集して保存

といったステップで徐々に作り上げていけばいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/02 13:27

    回答ありがとうございます!
    m6uさんのおっしゃるとおりでございます。
    今徐々にやっていて、簡要掲示板の消去でまた悩まされております。。
    また質問すると思うので、その時はよろしくお願いいたします!!
    ありがとうございました!!

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る