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

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

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

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

Q&A

解決済

2回答

8682閲覧

PHP explodeがうまくいかない。

hellommm

総合スコア49

PHP

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

0グッド

0クリップ

投稿2018/02/07 12:35

・やりたい事
htmlファイルのフォームで名前とコメントを入力し、 {番号<>名前<>コメント<>時間} という形でテキストファイルに保存する。テキストファイルに保存したものを配列として読み込み。
html ファイルのフォームの下に表示したい。

・できない点
explodeを使ってechoしているのだが、phpファイルには Array と表示される。
Array と表示するのではなく、番号<>名前<>コメント<>時間という形で表示したい。

正直、色んなサイト見たのですが、やり方は同じようにしているので、どこが間違っているのかわかりません。

以下コード

php

1 <body> 2 3 <?php 4 $name = $_POST["name"];//htmlファイルの名前フォーム値 5 $comment = $_POST["com"];//htmlファイルのコメントフォーム値 6 ?> 7 <?php 8 $filename = fopen("board.txt", "r+"); 9 $count = fgets($filename);//その行の文字列 10 //echo "count:$count\n"; 11 $count++; 12 rewind($filename); 13 fwrite($filename, $count."<>"); 14 fwrite($filename, $name."<>"); 15 fwrite($filename, trim($comment)."<>"); 16 fwrite($filename, date('H時i分')."\n"); 17 flock($filename, LOCK_UN);//ファイルをロック 18 fclose($filename); 19 20 $file_name = "board.txt"; 21 $ret_array = file( $file_name ); 22 $ret = explode("<>", $ret_array); 23 echo $ret[0];//Arrayと表示される 24 echo $ret[1];// 25 echo $ret[2];//1,2,3は表示されない。 26 echo $ret[3];// 27 ?> 28 </body>

テキストファイル

1<>名前<>コメント<>時間

PHP初心者ですが、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

概ね、全部間違っています。
各関数の仕様を理解していないので、おかしなことをやっています。
まずは、使用されている関数の仕様を確認してください。
PHP マニュアル

独学するのであれば、開発環境とデバッグ環境をまず作ることをオススメします。
上記の環境構築が丁寧に解説されている本で学習すると、学習効率が高まります。

*エラーも出ていると思います。エラーを表示するところから始めてください。

explode が意図したとおりに動かないのは、$ret_arrayの中身を確認するとわかります。

参考
【PHP初心者向け】セキュアな掲示板を最小構成から作る

追記
セキュアなコードは参考を見てもらうとして、質問のコードを意識したコードを書いてみました。

php

1<body> 2<?php 3$name = $_POST["name"];//htmlファイルの名前フォーム値 4$comment = $_POST["com"];//htmlファイルのコメントフォーム値 5if(file_exists("board.txt")){ 6 $text = file_get_contents("board.txt"); 7}else{ 8 $text = ""; 9} 10$text_rows = explode("\n",$text);//改行で分解 11$count = count($text_rows);//行数をカウント 12$add_text = $count."<>".$name."<>".trim($comment)."<>".date('H時i分');//追加したい文章 13array_unshift($text_rows, $add_text);//配列の先頭に追加 14$write_text = implode("\n", $text_rows);//改行でくっつける 15file_put_contents("board.txt", $write_text); 16 17foreach ($text_rows as $text_row) { 18 if($text_row === ""){ 19 continue; 20 } 21 $ret = explode("<>", $text_row); 22 echo $ret[0]; 23 echo $ret[1]; 24 echo $ret[2]; 25 echo $ret[3]; 26 echo "<br>"; 27} 28?> 29</body>

単純なファイル操作系はfile_*_contentsが扱いが楽なので、そちらを採用してみました。

投稿2018/02/07 14:14

編集2018/02/07 14:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hellommm

2018/02/07 14:34

回答有難うございます! ですよね、、PHPマニュアル全部読みたいと思います。 丁寧に教えていただきありがとうございました! 精進いたします!!
hellommm

2018/02/07 14:55

urlを見させて頂いたのですが、とてもわかりやすいサイトで感動しています。 ほんとうに有難うございます。。
guest

0

$ret_array が配列で、explode が文字列を文字列で分割する関数だから。

【PHP: file - Manual】
http://php.net/manual/ja/function.file.php

file — ファイル全体を読み込んで配列に格納する

【PHP: explode - Manual】
http://php.net/manual/ja/function.explode.php

explode — 文字列を文字列により分割する

投稿2018/02/07 14:06

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問