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

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

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

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

Q&A

解決済

2回答

318閲覧

PHP 配列の読み込み

kaity

総合スコア19

PHP

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

0グッド

0クリップ

投稿2018/11/17 08:34

以前、入力フォームとテキストファイルを作り、そちらはフォーム送信されるごとにテキストファイルが追記保存されるようにしていした。
そしてそのテキストファイルをPHPで配列として(1行ずつの内容がそれぞれの配列の要素となるように)読み込みたいです。配列のデータを一回ごとの投稿に改行してブラウザで表示させる。
これを作業を行いたかったのですが、

コード ```<html> <head> <meta charset="utf-8"> <title>○○</title> </head> <body> <form method="POST" action="○○.php"> <input type="search" name="name" value="コメント"> <input type="submit" value="送信"> </form> <?php if(empty($_POST['name'])===false){ $name=$_POST['name']; $filename="○○.txt"; $ret_array=file(○○); for($i=0; $i<count($ret_array);++$i){ echo ($ret_array[$i]. "<br/>\n"); } $fp=fopen($filename,"a"); fwrite($fp,$name . PHP_EOL); fclose($fp); } ?> </body> </html> という形を取っているのですがこの後の作業で詰まっています。よければご指摘お願いいたします。

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

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

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

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

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

m.ts10806

2018/11/17 09:21

コードは```で囲ってコードブロックにしてください。
guest

回答2

0

php で、テキストファイルの読み取りを行う機会はそれほど多くありません。

ファイルシステム関数は潤沢に揃っていますが、初心者であれば基本の数個を十分に扱えるようになると良いと思います。

fopen を使用した一連の操作は、非常に基本に忠実ですが「実現したいこと」に対して面倒です。

個人的なオススメですが
・file_get_contents()
・file_put_contents()
に絞って学習するとわかりやすいです。

ファイル全体を都度読み書きするので、効率の良い方法ではありませんが、学習スクリプトの段階で、パフォーマンスを気にするようなケースは無いと思います。

上記の関数と explode(), implode() の利用で、大抵の事は可能です。

今回のケースであれば、file_get_contents() で全体を読み取り、改行を explode() で分割し、分割で出来た配列を foreach() で回すのが基本手順になります。

読み取りは、file() でも良いのですが、file_get_contents() と file_put_contents() のセットの方が対比がしやすいので理解しやすいと思います。

投稿2018/11/19 08:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

最後の3行の

?> </body> </html>

php

1 2 $fp = fopen($filename,"r"); 3 $namearray = array(); 4 while($value=fgets($fp,1024)){ 5 $namearray[]=$value; 6 } 7 fclose($fp); 8 9 foreach ($namearray as $value) { 10 echo "$value<br />\n"; 11 } 12?> 13</body> 14</html>

のような形にすれば表示されます。
なお、3行目の1024は読み込む一行の最大文字数ですから、もし少なければ増やして下さい。
また表示を複雑にしたければ、9行目のecho文を編集します。前後にtable編集をすることもあるでしょう。

投稿2018/11/17 11:04

seastar3

総合スコア2285

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

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

kaity

2018/11/19 00:47

ありがとうございます! 試してみたのですが、今回作った入力フォームで文章を送信しても入力フォームの下には出てこなくて・・・ 前回作った入力フォームから送信すると 新しい方のページの方が反映されてしまうのですが何かわかりますでしょうか
seastar3

2018/11/19 08:09 編集

すみません。新しい入力を反映させるためには、もう一手順いりました。出先なのでコードを示せませんが、formタグのaction= の先のphpプログラムを自分自身にせず、書き込み用のプログラムにします。そのプログラムの最後の飛ばし先(リダイレクト先)を元のこのプログラムにすれば反映されたリストを表示できます。"php form ファイル書き込み"などでググってみて、サンプルコードを解析してみてください。
kaity

2018/11/20 02:37

ありがとうございます、無事完成することができました!!助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問