PHPで掲示板を作ろう! 掲示板の作成方法 その3(エラーチェックとファイル書き込み)

今回はPHPのコードの説明です。
掲示板の作成方法についてやります。
えー、前回の掲示板の作成方法からだいぶ期間があいてしまいました(汗)。
前回書いたのが2か月前ですね。
ブログ更新は定期的にかいてますが、ネタが結構ぶれるんで、定期連載物はちゃんとやっていきいっすね。
しかもソースが一部間違えてました。
もう修正していますが、18行目は下記の通りです。(今まで見てたかたスイマセン・・・・)
誤 $fp = fwrite( $fp , $name.”\t”.$comment.”\n”);
正 fwrite( $fp , $name.”\t”.$comment .”\n”);
2016/8/24 改行文字が抜けておりましたので追加しました。
Contents
前回までの続き
掲示板全体のソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php //var_dump($_POST); //最初に変数を定義しておかないとエラーになる $err_msg1 = ""; $err_msg2 = ""; $message =""; $name = ( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; $comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : ""; //投稿がある場合のみ処理を行う if ( isset($_POST["send"] ) === true ) { if ( $name === "" ) $err_msg1 = "名前を入力してください"; if ( $comment === "" ) $err_msg2 = "コメントを入力してください"; if( $err_msg1 === "" && $err_msg2 ==="" ){ $fp = fopen( "data.txt" ,"a" ); fwrite( $fp , $name."\t".$comment."\n"); $message ="書き込みに成功しました。"; } } $fp = fopen("data.txt","r"); $dataArr= array(); while( $res = fgets( $fp)){ $tmp = explode("\t",$res); $arr = array( "name"=>$tmp[0], "comment"=>$tmp[1] ); $dataArr[]= $arr; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>掲示板</title> </head> <body> <?php echo $message; ?> <form method="post" action=""> 名前:<input type="text" name="name" value="<?php echo $name; ?>" > <?php echo $err_msg1; ?><br> コメント:<textarea name="comment" rows="4" cols="40"><?php echo $comment; ?></textarea> <?php echo $err_msg2; ?><br> <br> <input type="submit" name="send" value="クリック" > </form> <dl> <?php foreach( $dataArr as $data ):?> <p><span><?php echo $data["name"]; ?></span>:<span><?php echo $data["comment"]; ?></span></p> <?php endforeach;?> </dl> </body> </html> |
講義
前回まではほとんど掲示板とは何か?といったことと全体的な紹介に終始していたので、細かい説明はしていませんでしたね。
今回はPHPの掲示板をしっかり説明していきます。
まず今回の学習項目ですが、
- 変数とエラーメッセージの定義の仕方
- 入力のエラーチェックとファイルへの書き込み(重要!)
です。
変数とエラーメッセージの定義の仕方
ソース
今回説明するのはこの部分ですね。
1 2 3 4 5 |
$err_msg1 = ""; $err_msg2 = ""; $message =""; $name = ( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; $comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : ""; |
解説
えー何をする部分かというとユーザーが入力するデータ(名前とコメント)、そのエラーメッセージを入れる変数を作ります。
変数=箱みたいなもんですね。
参考リンク データを扱ってみようその1(変数)
プログラミングとは簡単に言うと変数になんらかのデータをいれてそれを処理したり、画面に表示したりする行為です。
そのデータが入る変数をあらかじめ用意してあげないとエラーが発生してしまいます。
仮にデータが空であっても変数自体は用意する必要があります。
(空である、ということ自体が大切な情報だからです。)
$message=””というのは「messageという箱を用意します。その箱は最初空です。」
という意味です。
$name = ( isset( $_POST[“name”] ) === true ) ?$_POST[“name”]: “”;
というのはクリックボタンが押された場合はnameにそのデータを入れ、そうでないとき(つまりは一番最初に画面を読み込んだ時)は空白を入れる」という処理です。
入力のエラーチェックと書き込み
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//投稿がある場合のみ処理を行う if ( isset($_POST["send"] ) === true ) { if ( $name === "" ) $err_msg1 = "名前を入力してください"; if ( $comment === "" ) $err_msg2 = "コメントを入力してください"; if( $err_msg1 === "" && $err_msg2 ==="" ){ $fp = fopen( "data.txt" ,"a" ); fwrite( $fp , $name."\t".$comment."\n"); $message ="書き込みに成功しました。"; } } |
解説
まずは入力データのエラーチェックです。
今回の場合、名前とコメントが未入力の場合、エラーメッセージを表示する必要があるので、そのエラーチェックをしなくてはいけません。
if ( $name === “” ) $err_msg1 = “名前を入力してください”;
ですが、$nameが空白なら、$err_msg1に「名前を入力してください」を入れます。
これを名前とコメントについて行います。
名前、コメントに入力があり、エラーメッセージが空白ならファイルへの書き込みになりますが、実は今回の掲示板はここがメインです。
この掲示板を学習する意義ですが、ファイルへの書き込み、ファイルへの読み込みを学ぶことにあるからです。
あ、ちなみにこのプログラムを動かす場合はdata.txtというテキストファイルを用意する必要がでてきます。これがないとソースを完ぺきに写したはずなのにエラーがでます。
$fp = fopen( “data.txt” ,”a” );
fwrite( $fp , $name.”\t”.$comment.”\n”);
の部分ですね。
この$fp = fopen( “data.txt” ,”a” );なんですが、この処理が肝ですね。
ここでファイルポインタという概念がでてきます。
ポインタとは本のしおりみたいなもの
まず$fp = fopen( “data.txt” ,”a” )の処理なんですが、これはファイルポインタを取得しています。
ファイルポインタとはなんぞや?という方もいると思いますが、簡単に言ってしまうと本のしおりみたいなもの、だと思ってください。
本を読む人であれば、ここまで読んだということで目印としてしおりを挟むと思います。
PHPではファイルの読み書きをする場合は、ここから読みます、ここから書き込みます、今ここまで読んでいます、という情報を持っておく必要があるんですね。
その情報をファイルポインタといいます。
fopen( “data.txt” ,”a” );の”a”は、これは追加の書き込みという意味です。
掲示板の場合は、それまでに書いた情報に追加をするので”a”になります。
書き込みをするたびに、前のデータを全消去して、上書きする処理もあり、そのタイプは”w”になります。ちなみの読み込みの場合は次回やりますが、”r”になります。
次の fwrite( $fp , $name.”\t”.$comment.”\n”);
ですが、これは実際に取得できたファイルポインタに書き込みをしています。
fwrite(ファイルポインタ、書き込み内容);です。
書き込み内容の$name.”\t”.$commentですが、これは名前とコメントの間にタブを入れています。
書き込んだ内容が
名前=松本、コメント=テストです。
だった場合に「松本テストです。」と入力してしまうと、PHPが後で取り出すときに、名前とコメントの区切り文字がわかりません。
区切り文字が必要なため、タブ記号(“\t”)を入れます。
最後の”\n”は改行です。
fgetsは1行ずつ読み込むため、改行をいれないと1行と認識しません。
そのために改行をいれます。
まとめ
以上が、今回の内容です。
特にファイルへの書き込みのところの理解が難しかったと思います。
復習しておきますと
変数の定義
PHP上で使う変数はあらかじめ定義しておく必要がある。
エラーチェック
未入力データのチェックを行います。
この手の処理は今後も引き続き行いますので、慣れておきましょう。
ファイルポインタ
ファイルの入力、出力をする際に必要となる本のしおりみたいなもの。
このしおりに入力、書き込みをすることで実際のファイルへの入力、出力ができるようになります。
次回の学習はPHPで掲示板を作ろう! 掲示板の作成方法 その4(ファイル読み込みとHTML表示)になります。
関連記事
-
-
フレームワークのメリット・デメリット
こんばんは。松本です。 昨日25日にはオフィスで第一回目の授業を開講させていただきました。広島
-
-
開発を便利にする道具たち
PHPだけではありませんが、プログラミングには開発スピードをアップさせるための便利な道具があります。
-
-
XAMPPインストール
さて、XAMPPの初歩的な説明とエディタについて説明をしたところで実際にXAMPPをインストールして
-
-
PHPで掲示板を作ろう!(データベース編) その1 データベースとは
以前、掲示板を作成するブログ記事を書きました。 その1 PHPで掲示板を作ろう! 掲示板の作成
-
-
Java/PHP/Perl/Ruby/Python 主要Web系言語徹底比較
本日はWeb系で使われているプログラミング言語の比較をしてみようと思います。 Web系で使われ
-
-
挫折必至!初心者がやってはいけないプログラミングの学習法 ワースト4
多くの方はプログラミングをどのように身につけたらいいのか・・・ということに関心があると思います。
-
-
プログラミングを独学で身につけるための4ステップ(実践編)
前回の記事ではプログラミングを独学で身につけるための心構え的なお話をしました。 今回は、実際に
-
-
初心者でもできる!作れる!WEBサービスの開発 その4 総まとめ編
前3回の記事でWEBサービスを作ったお話をさせていただきました。 (前回までのお話し)
-
-
PHPで掲示板を作ろう!(データベース編) その3 データベース作成編
ちょっと間隔があいてしまいましたが、今回はMySQLの講義です。 前回までの記事 PHPで掲示板
-
-
データを扱ってみよう その2(配列)
こんばんは松本です。 少しずつ暖かくなってきましたね。暖かいのはいいんですが、オフィスでブログ
Comment
ファイルに対するセキュリティの設定をフルコントロールにしたら成功しました。
僕の勘違いでしたすいません>_<
$messageの説明の所が間違っていますよ
$message=””というのは「nameという箱を用意します。その箱は最初空です。」ではなく
$message=””というのは「messageという箱を用意します。その箱は最初空です。」では?
ななしさん
管理人の松本です。
ご指摘ありがとうございます。
修正させていただきます。
[…] […]