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

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

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

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

Q&A

解決済

2回答

1276閲覧

PHP 簡単な掲示板作り

hiro.1

総合スコア1

PHP

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

0グッド

0クリップ

投稿2020/11/12 14:11

前提・実現したいこと

PHPの勉強で、簡単な掲示板を作ろうとしています。
テキストエリアの文字をchatlog.txtに保存して、このファイルの中の文字を出力させ、文字を表示させたいのですが、arrayができてしまう。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

chat.phpファイル

<?php //チャット内容を保存するテキスト $file = 'chatlog.txt'; //名前を入れる変数 $name = ""; //メッセージを入れる変数 $message = ""; if(isset($_POST['name'])){ $name = $_POST['name']; if($name == ""){ $name = "名無しさん"; } } if(isset($_POST['message'])){ $message = $_POST['message']; // メッセージがあればテキストファイルに書き込む //fopen=ファイルを開く、"a"=モード、追加して記入する //exit=内容を出力し、閉じる $fp = fopen($file, "a") or exit($file . "が開けません"); // | を区切りに名前とメッセージを繋げて保存 //fwrit=テキストファイルに書き込む関数 date_default_timezone_set('Asia/Tokyo'); fwrite($fp, date("Y/m/d H:i:s"). "|" . $name . "|" . $message . "\n"); } //テキストファイルの中身を吐き出す //file関数=テキストファイル内のテキストを1行ずつ配列($lines)に入れる $lines = file($file); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>チャット</title> </head> <body> <h1>チャット</h1> <p>投稿するメッセージを入力してください</p> <form action="chat.php" method="post"> 名前   :<input type="text" name="name" size="20"><br> <span>コメント:</span> <textarea name="message" cols="30" rows="5" maxlength="150" placeholder="コメント"></textarea> <input type="submit" name="submit" value="投稿"> </form> <section> <br><br><br> <?php //countで配列(テキスト)の数を出す $linesNum = count($lines);

for($i=0 ; $i<$linesNum ; $i++){
//1行のメッセージを"|"を区切りに前後に分けて$onemessageに入れる
$onemessage = explode("|",$lines[$i]);
//$onemessageのキー値が0を$nameへ入れる
$time = $onemessage[0];
//$onemessageのキー値が1を$messageへ入れる
$name = $onemessage;
//$onemessageのキー値が2を$timeへ入れる
$message = $onemessage;

echo "投稿日時『".$time."』 投稿者『".$name."』 内容『".$message."』";
echo '<br><hr>';
}

?>

</section> </body> </html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

yuuyuさんも指摘されているようにArray to string conversionのエラーは

php

1//$onemessageのキー値が1を$messageへ入れる 2$name = $onemessage; 3//$onemessageのキー値が2を$timeへ入れる 4$message = $onemessage;

の部分にキー[1][2]がそれぞれ指定されていないのが原因です。

それから、これは本題から外れますが、受け取った$_POSTをそのまま登録するのはやめましょう。
セキュリティーの観点からも、必ず値をチェックして必要に応じて整型したものをデータとして扱うべきです。
提示されたコードの場合、テキストボックスに複数行にわたるコメントを入れたりタグを入れた投稿をした場合、表示がおかしくなってしまうはずです。

投稿2020/11/12 14:55

編集2020/11/12 14:55
cerfweb

総合スコア1907

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

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

hiro.1

2020/11/13 01:44

回答ありがとうございます。 無事にキー置を入れたら文字が出力されました。本当にありがとうございます。 セキュリティ面の回答もありがとうございます。$_POSTを整型したものを保存できるように頑張っていこうと思います。
guest

0

キー値が1を

キー値が2を

…とコメントには記載していますが、コードにはキー値が指定されていないので、Arrayが表示されているのではないでしょうか。

投稿2020/11/12 14:21

yuuyu

総合スコア1139

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

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

hiro.1

2020/11/13 01:45

回答ありがとうございます。 キー値を入れたら直りました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問