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

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

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

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

Q&A

解決済

1回答

611閲覧

掲示板の投稿時間についてお伺いさせていただきます。

messi_Raisei

総合スコア1

PHP

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

0グッド

0クリップ

投稿2020/05/03 09:34

編集2020/05/03 10:35

投稿時間を表示させたいです。
(初心者です。意味不明な質問をしているかもしれません。その場合には自分にもまた質問をお願いします。)

PHPで簡易掲示板を作ろうとしています。
投稿時間をaモード?で書き込みがうまくいってないのか時間のデータが送られていないようです。
投稿や表面的にはうまくいっているのですが、投稿時間の表示が1970年~のやつになってしまいます。
ぜひ、皆さんのお力を貸していただきたいです。

###自分が書いているコードです

<?php define('FILENAME','./message.txt'); $now_date = null; $data = null; $file_handle = null; $split_data = null; $message = array(); $message_array = array(); $success_message = null; $error_message = array(); $clean = array(); if(!empty($_POST['btn_submit'])){ if(empty($_POST['view_name'])){ $error_message[] ='名前を入力してください。'; }else{ $clean['view_name'] = htmlspecialchars( $_POST['view_name'],ENT_QUOTES); $clean['view_name'] = preg_replace('/\r\n|\n|\r/','<br>',$clean['view_name']); } if(empty($_POST['message'])){ $error_message[] ='内容が入力されていません。'; }else{ $clean['message'] = htmlspecialchars( $_POST['message'],ENT_QUOTES); $clean['message'] = preg_replace('/\r\n|\n|\r/','<br>',$clean['massage']); } if(empty($error_messege)){ if($file_handle = fopen(FILENAME,"a")){ $now_date = new DateTime(); $data = "'".$clean['view_name']."','".$_clean['message']."','".$_now_date."'\n"; fwrite($file_handle,$data); fclose($file_handle); $success_message = '投稿完了'; } } } if($file_handle = fopen(FILENAME,'r')){ while($data = fgets($file_handle)){ $split_data = preg_split('/\'/',$data); $message = array( 'view_name' => $split_data[1], 'message' => $split_data[3], 'post_date' => $split_data[5] ); array_unshift($message_array,$message); } fclose($file_handle); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <?php if(!empty($success_message)):?> <p><?php echo $success_message;?></p> <?php endif;?> <?php if(!empty($error_message)):?> <?php foreach($error_message as $value):?> <ul> <li><?php echo $value; ?></li> <?php endforeach; ?> </ul> <?php endif;?> <br> <p></p> <form method="post"> <div> <label="view_name">お名前:</label> <input id="view_name" type="text" name="view_name"/> </div> <div> <label="message">内容:</label> <textarea id="message" name="message"></textarea> </div> <input type="submit" name="btn_submit" value="送信する"/> </form> <hr> <section> <?php if(!empty($message_array)):?> <?php foreach($message_array as $value):?> <article>> <div class="info"> <h2><?php echo $value['view_name'];?></h2> <p><?php echo $value['message'];?></p> <time><?php echo date("Y年m月d日 H:i", strtotime($value['post_date'])); ?></time> </div> </article> <?php endforeach; ?> <?php endif; ?> </section> </body> </html>

試したこと

https://gray-code.com/さんを参考にやってきてここまできたのですが同じコードを書いているつもりではいるんですが間違いやミスが探しきれませんでした。他のサイトも参考にしてみましたがわかりませんでした。どうかご協力をお願いします。

補足情報(FW/ツールのバージョンなど)

贅沢なのですが、コードつきの説明がありましたらありがたいです。
よろしくお願いいたします。

追記です。
返信や意見本当にありがとうございます。
見やすいようにある程度コードを省いて書いていたのですが伝わりずらいとおもいましたので編集でコードをすべて表示させるようにしました。(m.ts10806さんcode機能の紹介ありがとうございました。)

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

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

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

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

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

miyabi_takatsuk

2020/05/03 09:46 編集

WordPressなどのCMS、もしくは、何かフレームワークを使ってるなら、その質問タグ追加と、質問内容に記載、 そうでなく、独自のシステムをお使いなら、その旨を記載下さい。 (独自システムなら、DB構造も必要かも)
mari.rinn

2020/05/03 09:53

$now_date = new DateTime(); のところを、 $now_date = new DateTime('now'); とするとどうなりますか?
m.ts10806

2020/05/03 09:55

post_date にはどういう情報が入っているのでしょう。 単にstrtotime()で正しく日付と認識できない形式ではないかと推察されますが。
messi_Raisei

2020/05/03 10:11

質問、返信ありがとうございます。 (返信はここであっているのでしょうか) フレームワークは使っておらずローカル?でやっています。 カッコ内に'now'を入れてもダメでした。 ここにコード機能を使ってコード返信しても大丈夫しょうか?
miyabi_takatsuk

2020/05/03 10:17

コードは質問本文に記載下さい。 質問本文は編集可能ですので。
messi_Raisei

2020/05/03 10:20

了解しました。ありがとうございます。
messi_Raisei

2020/05/03 10:37

編集できたと思います。すみませんが、またミスなどがあると思います。その際はご指摘お願いします。
guest

回答1

0

ベストアンサー

クラスの基礎とかそのあたりをきちんと勉強した方が良いと思うのですけど
DateTimeをインスタンス化してそのまま書き込んでいますが、それは間違いです。
テキストに保存するのであれば文字列でなければいけません。
インスタンスはオブジェクトなので、想定の情報(現在日時)は書きこまれていません。
書き込んだテキストファイルを確認してください。

php

1<?php 2$d = new DateTime(); 3var_dump($d); 4/** 5object(DateTime)#1 (3) { 6 ["date"]=> 7 string(26) "2020-05-03 19:40:10.767998" 8 ["timezone_type"]=> 9//後略 10 11**/

DateTime使うにしても、正しくフォーマット化された日時の文字列を取る必要があります。

PHPマニュアルで機能確認して、保存したい形(strtotime()で認識できる形)で取得し、テキストに保存するように調整してください。


オブジェクト指向が難しければ、決まり決まった日時形式の入力・出力だけなので、date()で十分かと思います。
フォーマットは結局こちらを見なければなりませんしね。

投稿2020/05/03 10:44

編集2020/05/03 11:05
m.ts10806

総合スコア80861

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

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

messi_Raisei

2020/05/05 03:39

m.ts10806さん回答ありがとうございました。 勉強不足の自分に勉強するべき点まで教えてくださり本当に感謝しております。 また、わからなくなった際は気が向き次第よろしくお願いいたします。 本当にありがとうございました。
m.ts10806

2020/05/05 03:40 編集

PHPマニュアルをよく確認することです。 あとはデバッグを覚える。 エラーを読む この3つで大抵の問題は解決できます。 ところで、結局どのように解決とされたのでしょう。 https://teratail.com/help/question-tips#questionTips4-2
messi_Raisei

2020/05/06 03:58

今回は申し訳ないですが、まだ解決までは至っておりません。 自分もphp始めたてで基礎的なものがそろっておらず皆さんの説明や意見を理解しきれてない状態にあります。また、https://teratail.com/の使い方もあまりわかっておらずとりあえずm.ts10806さんの回答を待たせてはいけないと思い返答した次第です。(申し訳ございません。) 本当に申し訳ないです。 これから勉強を本格的にかためて理解できるようにしようと思います。
m.ts10806

2020/05/06 05:49

解決してから解決済みにしないと、後から見た人の参考になりません。 こちらは誰も急いでおりません。望んでいるのは確実な解決のみです。
messi_Raisei

2020/05/06 05:54

申し訳ないです。勝手な解釈をしていました。 解決済みを外すようにしておき、理解でき次第また解決済みにしておこうと思います。 大変申し訳ございませんでした。
messi_Raisei

2020/05/10 10:17 編集

あれから色々な方法で試したり調べたりして、自分なりに解釈が出来ました。 strtotimeの使い方やタイムを経過した秒数で受け取りそれを指定した形で表示すること。 タイムスタンプを使わずともできる方法があるということ。 それぞれなんとなくは理解できた気がします。 タイムスタンプを使わない場合 $now_date = date("Y-m-d H:i:s"); post_date→now_dateにしました。 表示は $value['now_date']で投稿時間を表示させることができました。 タイムスタンプを使う場合 $now_date = time();にし、 表示はdate('Y年m月d日 h時i分s秒',$value['now_date'])にすることでできるようになりました。 あと、$dataの変数を置くとき $_now_date→$now_dateにしました。 ご協力やご意見、teratailの使い方まで教えて頂きありがとうございました。
m.ts10806

2020/05/10 10:26

確かにtime()のほうが副作用がでにくいかもしれませんね。 ただ、やはりデータベース利用して「型」も意識した設計にしたほうがより堅牢なシステムになります。 「簡易掲示板」という質問を見るたびに思いますし、丸投げになりがちで望ましくない実装であることからアドバイスもつきにくいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問