アクセス向上大失敗 www.igros.net
Last updated 2004/8/16
コメントバック 対応

入力データのチェック -簡単PHP掲示板講座 STEP5-

[PR]特集 Amazon.co.jp レコメンドコンテンツ



STEP5
・掲示板に書込まれたデータを掲示板へ反映する前にデータチェックを行いエラーを表示する
  [STEP4の問題点] 未入力でも処理してしまう。
  [要点] 必須入力チェックと1項目(メール入力)を行います。
  [決め事] お名前と本文を必須とし、メール入力がある場合のみお名前をmailtoでリンクします。
参考ソースプログラム
解説
<?php
# プログラム bbs.php STEP5
 $name = $HTTP_POST_VARS["NAME"];
 $mail = $HTTP_POST_VARS["MAIL"];
 $body = $HTTP_POST_VARS["BODY"];
 if ($name=="" or $body=="") {
  echo '<font color="#FF000">必須項目入力エラー</font><br>';
  echo 'お名前と本文は必ず入力してください<br>';
  echo '<a href="javascript:history.back()">戻る</a>';
  exit;
 }
 $body = str_replace("\r\n", "<br>", $body);
 echo '
  <html>
  <head>
  <title>PHP-BBS</title>
  </head>
  <body>
  <h1>PHP-BBS</h1>
  STEP5<br>
  <form method="post" action="bbs.php" accept-charset="x-euc-jp">
  お名前 <input type="text" size="16" maxlength="30" name="NAME">
  メール <input type="text" size="30" maxlength="50" name="MAIL"><br>
  本文<br>
  <textarea rows="10" cols="70" wrap="soft" name="BODY"></textarea><br>
  <input type="submit" name="SUBMIT" value="送信">
  </form>
 ';
 if ($mail=="") {
  echo "お名前:$name<br>";
 }
 else {
  echo "お名前:<a href=\"mailto:$mail\">$name</a><br>";
 }
 echo "本文:$body<br>";
 echo '</body></html>';
?>
if ($name=="" or $body=="") {   は
もし、$nameが空、または、$bodyが空だったら、{ } の中を実行しなさい、と言う意味になります。
$nameはお名前、$bodyは本文ですから、いずれか一つでも入力されていなければ...となります。
""と書かれた場合、"何も無い"と言う意味になり、NULL(ヌル)と呼ばれています。
<a href="javascript:history.back()">戻る</a>はJavaScriptのヒストリー命令を指定しています。
リンク先としてjavascript:history.back()を指定すると、一つ前の画面に戻ります。(ブラウザの[戻る]ボタンと同じ意味になります)
exit;は強制的にこのプログラムを終了しなさい、と言う意味になります。
PHPはexit命令を解釈した後、以降の処理を行いません。
では質問です!
お名前、メール、本文の全てが入力されていない場合エラー処理になるよう判定するにはif文をどう書換えますか?
答えは最後に...

if ($mail=="") {   は
$mailが空だったら、{ }を処理することを意味します。
つまりメール入力がされていない場合、お名前をMailtoとしてメールへリンクせず表示します。
else {   は
直前の判定(if文)の反対、つまり、$mailが空じゃ無かったら、{ }を処理することを意味します。
メールに何らかの入力あった場合、お名前をMailtoとしてメールへリンク表示します。

ここまでのサンプル check!

エラー判定を入れたことで致命的な制御フロー不足が露呈したと思います。
そこで掲示板へ新規書込みがあったのか?それとも呼出されただけなのか?の判定を追加します。

答え:if ($name=="" or $mail=="" or $body="") {エラー処理;}
  または if ($name<>"" and $mail<>"" and $body<>"") { } esle {エラー処理;}


<<<< トップ <<< テーマトップ << サブテーマトップ < 前頁次頁 >

www.igros.net
[PR]特集 Amazon.co.jp レコメンドコンテンツ



Copyright(C) アクセス向上大失敗 All Rights Reservd.
version2.0