【やりたいこと】
①フォームの作成
②フォームから受け取ったデータをtxtファイルに表示させる
③txtファイルを読みこみ、値を変数に格納
④↑の変数を受け取り、フォームの下に表示
上記を実行すべく以下のようなコードをかきましたが、いくつか問題点が...
php
1<?php 2 3// メッセージを保存するファイルのパス設定 4define( 'FILENAME', './kadai_2_02.txt'); 5 6// タイムゾーン設定 7date_default_timezone_set('Asia/Osaka'); 8 9// 変数の初期化 10$now_date = null; 11$data = null; 12$file_handle = null; 13$split_data = null; 14$message = array(); 15$message_array = array(); 16 17//-------テキストファイルにデータを書き込む-------- 18 19if(file_exists(FILENAME)){ 20 $num = count(file(FILENAME)) + 1; //$num = count(file(FILENAME))でファイルの行数をカウントできる 21}else{ 22 $num = 1; 23} 24 25if( !empty($_POST['btn_submit']) ) { 26 27 if( $file_handle = fopen( FILENAME, "a") ) { //fopen関数で指定したファイルを開く 28 // タイムスタンプ 29 $now_date = date("Y-m-d H:i:s"); 30 31 // 書き込むデータを作成 32 $data = $num."<>".$_POST['view_name']."<>".$_POST['message']."<>".$now_date."\n"; 33 34 // 書き込み 35 fwrite( $file_handle, $data); //file_handleは書き込む対象となるファイル(●●.txt)を判別するためのパラメータ 36 37 // ファイルを閉じる 38 fclose( $file_handle); 39 } 40} 41 42//-------テキストファイルのデータを掲示板のフォーム下に表示-------- 43 44if( $file_handle = fopen( FILENAME,'r') ) { 45 46 while( $data = fgets($file_handle) ){ //fgets関数でファイルからデータを一行ずつ全て取得 47 48 //preg_split関数で文字列を特定の文字で分割する: 49 $split_data = explode(",",$data); 50 51 $message = array( 52 'view_name' => $split_data[2], 53 'message' => $split_data[4], 54 'post_date' => $split_data[6] 55 ); 56 array_unshift( $message_array, $message); 57 } 58 59 // ファイルを閉じる 60 fclose( $file_handle); 61} 62 63?> 64 65<!DOCTYPE html> 66<html lang="ja"> 67<head> 68<meta charset="utf-8"> 69<title>簡易掲示板</title> 70</head> 71 72<body> 73<h2>簡易掲示板(^-^*)</h2> 74 <form method="post"> 75 <div> 76 <label for="view_name">名前</label> 77 <input id="view_name" type="text" name="view_name" value=""> 78 </div> 79 <div> 80 <label for="message">メッセージ</label> 81 <textarea id="message" name="message"></textarea> 82 </div> 83 <input type="submit" name="btn_submit" value="書き込む"> 84 </form> 85<hr> 86<section> 87<?php if( !empty($message_array) ): ?> 88<?php foreach( $message_array as $value ): ?> 89<article> 90 <div class="info"> 91 <h2><?php echo $value['view_name']; ?></h2> 92 <time><?php echo date('Y年m月d日 H:i', strtotime($value['post_date'])); ?></time> 93 </div> 94 <p><?php echo $value['message']; ?></p> 95</article> 96<?php endforeach; ?> 97<?php endif; ?> 98</section> 99 100</body> 101</html>
【問題①】
上記のコードを実行すると
回答フォームのしたに「1970年01月01日 09:00」と表示されます。
しかし、テキストファイルにはきちんと投稿された時間と日時にタイムスタンプが表示されています。
なぜ「1970年01月01日 09:00」になるのでしょう???
【問題②】
メッセージフォームの上に以下のようなエラーが表示されます。
Notice: date_default_timezone_set(): Timezone ID 'Asia/Osaka' is invalid in /home/co-19-208.99sv-coco.com/public_html/kadai_2.php/kadai_2_01.php on line 7 Notice: Undefined offset: 2 in /home/co-19-208.99sv-coco.com/public_html/kadai_2.php/kadai_2_01.php on line 52 Notice: Undefined offset: 4 in /home/co-19-208.99sv-coco.com/public_html/kadai_2.php/kadai_2_01.php on line 53
おそらくhtmlコードの前にphpコードを書いているからかなとおもうのですが、htmlファイルにhtmlに関するコードを書いてphpファイルにphpに関するコードを書いて分けようとすると、phpファイルにおいてテキストファイルの内容を読み込んだ後その値を配列として変数に格納し、その変数をhtmlファイル側で使えなくなってしまう、つまり、アンケートフォームの下にコメントや名前、タイムスタンプを表示できなくなってしまいます。どのような順序でコーディングすればよいでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/04 02:25
2020/05/04 05:46
2020/05/04 14:32
2020/05/04 14:41 編集
2020/05/04 14:42
2020/05/04 14:44
2020/05/04 14:45
2020/05/04 14:50
2020/05/04 14:54
2020/05/04 14:57
2020/05/04 15:04