- ベストアンサー
同一phpページ内に一言掲示板の作り方
- 初心者向けに、PHPを使用して同一のPHPページ内に一言掲示板を作成する方法を紹介します。
- 投稿フォームと投稿内容の表示ページを別々に作る方法ではなく、一つのPHPページにまとめる方法を解説します。
- エラーメッセージの表示位置を調整する際のテクニックや、変数や関数の追加・削除なども紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> あくまで該当エラーメッセージの表示は入力後にしたいのです。 じゃぁこんな感じかな。 ========== <?php $err_message = ''; if ($_POST['key']) == '1') { if (mb_strlen($_POST['name']) === 0 && mb_strlen($_POST['comment']) === 0) { $err_message = '名前・コメントが両方未入力です。'; } else if (isset($_POST['name']) !== TRUE || mb_strlen($_POST['name']) === 0) { $err_message = '名前を入力してください。'; } else if (isset($_POST['comment']) !== TRUE || mb_strlen($_POST['comment']) === 0) { $err_message = 'コメントを入力してください。'; } else if (mb_strlen($_POST['name']) > 20 && mb_strlen($_POST['comment']) > 100) { $err_message = '名前(20文字以内)とコメント(100文字以内)が両方文字数制限を超えています。'; } else if (mb_strlen($_POST['name']) > 20) { $err_message = '名前は20文字以内で入力してください。'; } else if (mb_strlen($_POST['comment']) > 100) { $err_message = 'コメントは100文字以内で入力してください。'; } else if (preg_match('/http/', $_POST['comment']) > '0' ) { $err_message = 'スパム対策により、URL付きのコメントは投稿できません。'; } else { $name = htmlspecialchars($_POST['name']).' <font size="2">さん</font>'; $comment = htmlspecialchars($_POST['comment']); $now = date('m月d日 H時i分'); $post_data = "<strong>名前:</strong>$name <strong>コメント:</strong>$comment <strong>時間:</strong>$now\n"; $read_data = file_get_contents('bbs.txt'); file_put_contents('bbs.txt',$post_data . $read_data); } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="utf-8" /> <title>一言</title> </head> <body> <?php if ($err_message != '') { ?> <p><?php print $err_message; ?></p> <?php } ?> <form action="bbs2.php" method="post"><input type="hidden" name="key" value="1"> 名前:<input size="15" type="text" name="name" value=""> コメント:<input size="30" type="text" name="comment"> <input type="submit" value="送信"> <input type="reset"> </form> <hr> <?php $lines = file('bbs.txt'); foreach ($lines as $l) { print "</p>" . $l . "</p>\n"; } ?> <hr> </body> </html> ==========
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5241/13712)
こんか感じですかね。 実際に動かしてないんでタイポとかあったらゴメンナサイ ========== <?php $err_message = ''; if (mb_strlen($_POST['name']) === 0 && mb_strlen($_POST['comment']) === 0) { $err_message = '名前・コメントが両方未入力です。'; } else if (isset($_POST['name']) !== TRUE || mb_strlen($_POST['name']) === 0) { $err_message = '名前を入力してください。'; } else if (isset($_POST['comment']) !== TRUE || mb_strlen($_POST['comment']) === 0) { $err_message = 'コメントを入力してください。'; } else if (mb_strlen($_POST['name']) > 20 && mb_strlen($_POST['comment']) > 100) { $err_message = '名前(20文字以内)とコメント(100文字以内)が両方文字数制限を超えています。'; } else if (mb_strlen($_POST['name']) > 20) { $err_message = '名前は20文字以内で入力してください。'; } else if (mb_strlen($_POST['comment']) > 100) { $err_message = 'コメントは100文字以内で入力してください。'; } else if (preg_match('/http/', $_POST['comment']) > '0' ) { $err_message = 'スパム対策により、URL付きのコメントは投稿できません。'; } else { $name = htmlspecialchars($_POST['name']).' <font size="2">さん</font>'; $comment = htmlspecialchars($_POST['comment']); $now = date('m月d日 H時i分'); $post_data = "<strong>名前:</strong>$name <strong>コメント:</strong>$comment <strong>時間:</strong>$now\n"; $read_data = file_get_contents('bbs.txt'); file_put_contents('bbs.txt',$post_data . $read_data); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="utf-8" /> <title>一言</title> </head> <body> <?php if ($err_message != '') { ?> <p><?php print $err_message; ?></p> <?php } ?> <form action="bbs2.php" method="post"> 名前:<input size="15" type="text" name="name" value=""> コメント:<input size="30" type="text" name="comment"> <input type="submit" value="送信"> <input type="reset"> </form> <hr> <?php $lines = file('bbs.txt'); foreach ($lines as $l) { print "</p>" . $l . "</p>\n"; } ?> <hr> </body> </html> ==========
補足
申し訳ありませんが、ちょっと違います。 これですと、phpページを開いた時点で「名前・コメントが両方未入力です。」のエラーメッセージが表示されてしまいます。 あくまで該当エラーメッセージの表示は入力後にしたいのです。
お礼
これですと、Parse error: syntax error……と、新しく追加された if ($_POST['key']) == '1') { の行でエラーログを吐き、phpページ自体が動作しなくなりました。 ですが、何となくというか、ダメ元でこの記述を if (isset($_POST['key']) == '1') { に変えてみると、(formタグ内の action="bbs2.php" も削除) 私の望み通り、正常に動作するようになりました。 そう、これです! 解決致しましたので、これで回答を締め切らせていただきます。 ありがとうございました。