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

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

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

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

Q&A

解決済

1回答

540閲覧

php でテキストファイルに書き込み

hellommm

総合スコア49

PHP

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

0グッド

0クリップ

投稿2018/02/01 13:10

やりたい事。
入力ホームで名前、コメントを入力する。
その名前、コメントを「{番号}<>{名前}<>{コメント}<>{投稿された時間}」と言う形で
テキストファイルに保存する。

わからない事。
名前と投稿時間はテキストファイルに保存することができたのですが、
番号とコメントを保存することができません。
色々ためしたのですが、分からなかったので質問させて頂くことにしました。
あと、flock関数の必要性が調べたのですが、よくわかりません。
誰かが書き込んでいるときに他の人が書き込めないようにファイルをロックする。
と私の中で捉えているのですが、何か物足りない気がします。

以下コード
html

html

1<?php 2header('Content-Type: text/html; charset=UTF-8'); 3?> 4<html> 5 <head> 6 <meta charset="utf-8"/> 7 <title>sample</title> 8 </head> 9 <body> 10 <form method="post" action="Kadai2_15.php"> 11 <p>名前</p> 12 <input type="text" name="name" placeholder="山田太郎"> 13 <p>コメント</p> 14 <textarea name="com" value="コメントを入力"> 15 </textarea> 16 <input type="submit" value="送信"> 17 </form> 18 </body> 19</html> 20

php

1<?php 2header('Content-Type: text/html; charset=UTF-8'); 3?> 4<html> 5 <head> 6 <meta charset="utf-8"/> 7 <title>sample</title> 8 </head> 9 <body> 10 11 <?php 12 $name = $_POST["name"]; 13 $comment = $_POST["com"]; 14 ?> 15 <?php 16 $filename = fopen("Kadai2_15.txt", "a"); 17 $count = fgets($filename,1000);//その行の文字列 18 echo "count:$count\n"; 19 $count++; 20 rewind($filename); //ファイルポインタを先頭。 21 fwrite($filename, $count."<>"."\n"); 22 fwrite($filename, $name."<>"."\n"); 23 fwrite($filename, $comment."<>"."\n"); 24 fwrite($filename, date('H時i分')."\n"); 25 flock($filename, LOCK_UN);//ファイルをロック?? 26 fclose($filename); 27 ?> 28 </body> 29</html>

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

番号が無いのはfopenのaオプションは追記オプションなので、既存のtxtの内容を読み込めないのではないかと思います。読み込むならrオプションが必要です。

コメントが無いのは単に何も入力していない可能性もあります。valueではなく、textareaタグ内のものが送信されるので。

ちなみに正常に送信できても、textareaは改行を含むこともできるので、txtファイル内にも改行が入ってしまい正しく保存できません。改行を何か別の特別な文字に置き換えたり、ということが必要になってきます。また、そうすると区切り文字である「<>」も入力されたらエラーにするか消すかしないとtxtファイル内がおかしくなると思います。

flockもしないと、複数の人が書き込んだ時にtxtの中身が一部消えてしまったりします。割とよく発生したのを見たことがありますし、だからといってflockが完璧に信頼できるかというと微妙です。

そのあたり気をつけないと、総合すると結局MySQL等のDBの保存した方が楽、という感じになると思います。クオリティを求めないのであればとりあえずtxt保存でも良いとは思いますが。

投稿2018/02/01 13:33

編集2018/02/01 13:40
dala00

総合スコア441

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

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

hellommm

2018/02/01 13:55

回答ありがとうございます! textareaはできたのですが、番号はr+に変えてもできませんでした。 カウントすら表示されません。 番号の付け方を教えて頂きたいです。 flockの説明もありがとうございます!
dala00

2018/02/01 14:02

r+オプションはマニュアルを見ると 読み込み/書き出し用にオープンします。 ファイルポインタをファイルの先頭に置きます。 となっています。ファイルの先頭を読んでいるのでいつも最初の行の値になってしまいます。 しかも、fgetsしているだけで、<>で分割等をしていないので、正しい数値はどちらにしろ取れません。 やるのであれば、最後の行を読んで、<>で分割、となりちょっと面倒です。 どちらかというと、txtの行数をカウントして$countを生成するか、countだけ別ファイルにして+1していく、の方が良い気がします。
dala00

2018/02/01 14:11

ああ、1行前提なんですね。なら<>で分割すれば行けると思います。
dala00

2018/02/01 14:12

てか課題なんですね…。一人でやるならロックは要りませんよ。
hellommm

2018/02/06 10:01

有難うございます!できました! 課題と言っても学校の課題ではなく、自分に向けての課題です。 丁寧に教えていただき助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問