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

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

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

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

Q&A

解決済

3回答

4751閲覧

[PHP(掲示板)]preg_replaceで日付表記の変更方法/名前空欄を名無しで登録する方法

star24star

総合スコア115

PHP

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

0グッド

0クリップ

投稿2015/05/20 02:52

前回も質問させていただきましたが、解決できなかったため再度質問させて頂きました。
(入力画面.php)→(確認画面.php)→(一覧画面.php)という流れで掲示板を作りました。
入力データはDBへ格納し一覧画面でDBに登録された情報を表示しています。

■質問1
入力画面にて名前を未記入で送信した場合、一覧画面では”名無し”と表記させたいのですが、
その方法が分かりません。
(そもそも、DBへ名無しと格納して呼び出すのか?空の場合名無しと表記しているだけなのか?)
入力データはSESSIONで格納しています。

■質問2
preg_replaceを利用して日付の表示を
2015-05-01 15:00:00(デフォルト) ⇒ 2015/05/01 15:00:00に変更したいのですが
その方法が分かりません。

以下、一覧画面

lang

1<?php 2//クラスファイルの読み込み 3//SESSION開始 4//フォームから格納されたかを判定 5if(isset($_SESSION['name']) && isset($_SESSION['message'])) 6{ 7 // DBへ接続 8 //*** メッセージをデータベースへ格納する ***// 9 //実行するクエリを変数に入れる 10 $sql = "INSERT INTO onebord(name,message) VALUES ('" . $_SESSION['name'] . "','" . $_SESSION['message']."')"; 11 12 //クエリを実行して、フォームから入力されたデータをデータベースに挿入 13 $result_reg = mysql_query($sql); 14} 15 16//データの取得 17$sql = 'SELECT * FROM onebord'; 18$bbs_date = mysql_query($sql); 19while ($row = mysql_fetch_assoc($bbs_date)) 20{ 21 $bbs[] = $row; 22} 23$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/','/^\s*{(\w+)}\s*=/'); 24$replace = array ('\3/\4/\1\2', '$\1 ='); 25$name = $_SESSION['name']; 26?> 27<html> 28</head> 29<body> 30<table> 31 <tr> 32 <th>日付</th> 33 <th>名前</th> 34 <th>メッセージ</th> 35 </tr> 36<?php foreach ($bbs as $bbs) 37{ 38?> 39 <tr> 40 <td><?php echo preg_replace($patterns, $replace, '$data'); 41 ?></td> 42 <td><?php 43 if(!$name) 44 { 45 $name = '名無しさん'; 46 } 47 else 48 { 49 echo htmlspecialchars($bbs['name']); 50 } 51 ?></td> 52 <td><?php echo htmlspecialchars($bbs['message']); ?></td> 53 </tr> 54<?php 55} 56?> 57</table></body></html>

よろしくお願いいたします

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

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

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

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

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

guest

回答3

0

名前が未記入のときに「名無し」でDBに登録するのは少し気持ちが悪いです。
なんとなく。

空文字列またはNULLで登録して、表示するときに「名無し」と表示するのが良いのではないでしょうか。

投稿2015/05/20 04:22

naga3

総合スコア1293

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

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

star24star

2015/05/20 07:32

確かにそうですね 考えてみたら登録しておく必要もなかったですね! 表記するだけにします
guest

0

■質問1
どちらでもよいと思います。

lang

1if(empty($_SESSION['name'])) { 2 $name = '名無し'; 3} else { 4 $name = $_SESSION['name']; 5$sql = "INSERT INTO onebord(name,message) VALUES ('" . $name . "','" . $_SESSION['message']."')";

はいかがでしょうか。

■質問2
2015-05-01 15:00:00(デフォルト) ⇒ 2015/05/01 15:00:00に変更
構造は \d+-\d+-\d+ \d+:\d+:\d+ ですよね。\d+\d{1,2} 等でも良いです。

lang

1$ans = preg_replace('|(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)|', '\1/\2/\3 \4:\5:\6', $str);

でいけませんか?ただ、strtotimedate 関数を使った方が良いと思いますよ。

lang

1$timestamp = strtotime($str); 2$str_formatted = date('Y/m/d H:i:s', $timestamp);

かな。未検証です。typo あったらすみません。

lang

1 if(!$bbs['name']) 2 { 3 $name = '名無しさん'; 4 echo $name; 5 } 6 else 7 { 8 echo htmlspecialchars($bbs['name']); 9 }

がやりたいことかな?
foreach($bbs as $bbs) は foreach($bbs as $comment) の方が良いと思いますよ…

投稿2015/05/20 03:08

編集2015/05/20 03:38
takotakot

総合スコア1111

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

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

takotakot

2015/05/20 03:35

'$data' は $data という5文字になるので、 $data にします。
star24star

2015/05/20 07:43

>>foreach($bbs as $bbs) は foreach($bbs as $comment) エラーが出てしまったのでそのままにしてしまいましたが、変更する意味を 教えていただけますでしょうか? 同じ変数を並べるのはあまりよくないとか・・・?
takotakot

2015/05/20 08:49

$bbs という配列から、ひとつ分を取り出して $bbs に入れています。はじめの $bbs はどうなると思いますか?
takotakot

2015/05/20 08:50

そもそも、エラーが出ているなら、その旨のべて質問したらいかがですか?
star24star

2015/05/20 09:44

foreach($bbs as $comment)とした場合 ・Notice: Undefined index: というエラーが出ます。 foreach($comment as $bbs)とした場合、 ・Notice: Undefined variable: comment ・Warning: Invalid argument supplied for foreach() といったエラーが出ます。 どちらにしろ、commentが何も定義されていないからだと思うのですが、 何処でどう定義したらよいのかがわかりません
star24star

2015/05/20 09:47

foreachの件は解決しました! しかし日付の表記がまだ未解決です
takotakot

2015/05/20 09:57

日付は、私のコメントでは不足していますか?
takotakot

2015/05/20 10:50

解決したのなら、「何がどう間違っていたから解決した」かどうか、書かないと、同じような疑問を持った他の人のためになりません。 「どちらにせよ、commentが何も定義されていないからだと思う」は間違っていて前者は、「$bbs という変数が配列になっていなかったから」のはずです。後者は、$comment が空だったから、でしょうね。
guest

0

ベストアンサー

質問1について
これはどちらでもいいのではないかと思います。

質問2について
preg_replaceを利用してとのことですが、preg_replaceを利用しない方が簡単にできます。

lang

1echo date('y/m/d H:i:s', strtotime('2015-05-01 15:00:00'));

とすることで出来ます。

投稿2015/05/20 03:04

orange0190

総合スコア1698

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

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

star24star

2015/05/20 03:10

ご回答ありがとうございます! >>echo date('y/m/d H:i:s', strtotime('2015-05-01 15:00:00')); DBに格納した日付を表示させるにはstrtotimeの中に何を入れたらいいでしょうか? $bbs['data']だとエラーが出てしまいますね また、1に関してですが、上記のコードでは動作しなかったので間違いをご指摘いただけると幸いです
takotakot

2015/05/20 03:33

strtotime の中に DB に格納した「日付の文字列」を入れますよ。
orange0190

2015/05/20 03:34

「名無し」と出ないことですかね・・・ それは echo $name; としていないためです。
star24star

2015/05/20 07:44

echo $nameが抜けていましたね・・・! 表記したら動作しました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問