期待されているであろう挙動になるよう修正いたしました。
php
1
2<?php
3// index.php として保存
4
5date_default_timezone_set("asia/Tokyo"); // タイムゾーン設定
6
7$bbs='bbs.txt';
8
9 if($_SERVER['REQUEST_METHOD'] === 'POST'){
10 $name = $_POST['name'];
11 $comment = $_POST['comment'];
12
13 $lenname = mb_strlen($name,'utf-8');
14 $lencomment = mb_strlen($comment,'utf-8');
15
16 if($name === "" || $comment=== ""){ // $nameが空 または $commentが空
17 echo '記入されてません';
18 }else if($lenname>20){
19 echo '*名前は20文字以内';
20 }else if($lencomment>120){
21 echo '*コメントは120文字文字以内';
22 }else{
23 // ファイルを開いて、書き込んで、閉じる一連の動作をしてくれる (fwriteは書き込みのみ)
24 file_put_contents($bbs, date('m月d日 H:i:s'). ' '.$name.' '.$comment."\n", FILE_APPEND);
25 }
26 }
27?>
28
29<!-- submitボタンを押すと、actionに書かれているアドレスにアクセスする -->
30<form action="index.php" method="POST">
31 <p>名前</p>
32 <p><input type="text" name="name"></p>
33 <p>コメント</p>
34 <p><textarea name="comment"></textarea></p>
35 <p><input type="submit" value="送信!"></p>
36</form>
37
38
html部分
html部分では一点変更しています。
formタグ
<form action="index.php" method="POST">
「フォーム内のsubmit
ボタンが押されたとき、index.php
へPOST
でアクセスする」
ことを表します。
本ファイルを index.php とすることで、submit
ボタンが押された際に
form
タグ内のデータを持った状態で index.php 内の php プログラムを走らせることが出来ます。
(ちなみに、最初にブラウザからアクセスする時は自動的にGET
でアクセスします。
if($_SERVER['REQUEST_METHOD'] === 'POST')
は通常のアクセスとsubmit
ボタンからのアクセスを
振り分けるために利用されていますね)
PHP部分
PHP部分では3点変更をしています。
date_default_timezone_set
最初に date_default_timezone_set("asia/Tokyo");
を入れることで
利用するタイムゾーンを設定しています。
date()
を利用する際には基本的に必要です。
(ただし、サーバーの設定ファイルに明記されている場合はここで明記する必要はありません)
if($name === "" || $comment=== "")
提示されていましたif($name||$comment===" ")
ですと、
「$name
がtrue
または$content
が
(スペース一つ)の場合」
と解釈されます。
未記入を弾く為でしたらif($name === "" || $comment=== "")
と
表記する必要があります
(蛇足ですが、このあたりはよりよい表記として
isset()
を使う方法
- そもそも
$_POST[]
でなくfilter_input()
を使用する
等の話もあります。将来余裕が出来た時に改めて学習されると良いでしょう)
file_put_contents
fwrite()
はfile_put_contents()
へ変更しました。
ファイルへの書き込みについては、手順として
- ファイルを開く
- ファイルへ書き込む
- ファイルを閉じる
の順で操作する事が要求されます。
それぞれに対応する命令はfopen()
, fwrite()
, fclose()
なので
これらを順に呼び出せば書き込みは可能です。
ただ、その一連の動作をまとめて行ってくれる関数として
file_put_contents()
が予め存在しているので、
こちらを使用することで代替しました。
+α
最後にちょっとしたコメントを入れさせて貰います。
簡単に質問の履歴を見せていただきましたが、独学でプログラミングを勉強されているのでしょうか?
是非とも頑張っていただきたい所です。
今回のご質問については、修正箇所が数カ所ありましたが、
このような状況ですと何が原因か分かりにくい状態となってしまいます。
まず、エラーが出た際には、(良く言われる「エラーログを読む」のも大切ですが、)
どこが問題なのかを把握するために極力外せそうな処理を外して試行してみるのも良いかと思います。
例えば、if文での記入確認部分は実際の実装時には必要でしょうが、
エラーの出所を探る時には外してしまってfwrite()
の表記だけにした方が、
どこで問題が起こっているか分かりやすいですね。
一度書いた内容を消さずとも、行頭に//
をつけてコメント化するだけでも書いていないのと同様の状態に出来るので、
そのような方法を利用しても良いでしょう。
php
1// 例
2// if($name||$comment===" "){
3// echo '記入されてません';
4// }else if($lenname>20){
5// echo '*名前は20文字以内';
6// }else if($lencomment>120){
7// echo '*コメントは120文字文字以内';
8// }else{
9 fwrite(bbs.txt,date('M月d日 H:i:s').' '.$name.' '.$comment."\n");
10// }
11
極力シンプルな状態で見せていただいた方が回答する側もラクですし、
質問されるときも「このあたりが怪しい」とアタリがつけられるので、より具体的に質問できるでしょう。
少々長くなりましたが、参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/12 20:05