<?php
if (isset($_POST['onamae']) && $_POST['onamae'] != '') {
$x = htmlspecialchars($_POST['onamae']);
echo "<p>こんにちは,$x さん。</p>";
}
?>
<form action="form.php" method="post">
<p>お名前: <input name="onamae" size="20" /></p>
</form>
< > & "
といったHTMLで特別な意味を持つ文字を
< > & "
に変換する関数 htmlspecialchars()
を使っています。
この理由は
セキュリティ上の配慮
をご覧ください。
action="form.php" の部分は,自分のファイル名を書きます。
ファイル名を間違えないようにするには,
action="<?php echo $_SERVER['PHP_SELF']; ?>"
のようにするといいでしょう。
$_SERVER['PHP_SELF'] は自分自身のファイル名(パス)で,このファイルでは
/~okumura/php/form.phpとなります。
ただしPHPではファイル名の後に /
で区切って任意の文字列を付けられるので,これも出力する際には htmlspecialchars()
でエスケープすることが必要です。
上の例は実際には次のように書かれています。
<form action="form.php" method="post"> <p><label for="onamae">お名前:</label> <input id="onamae" name="onamae" size="20" /></p> </form>
このように label を使うと,ラベル(上の例では「お名前」)をクリックすれば,for="..."
と対応する id="..." を持つ入力欄に入力可能な状態になります。ただし,Safari は未対応です。Safari はバージョン3以降で対応しています。
label には次の形もありますが,残念ながらIE 6以前はこちらの形に対応していません。
<form action="form.php" method="post"> <p><label>お名前: <input name="onamae" size="20" /></label></p> </form>
ページを開くと最初のテキストボックス
<p><label for="onamae">お名前:</label> <input id="onamae" name="onamae" size="20" /></p>
をフォーカスした状態にするには,JavaScriptでこの後に
<script type="text/javascript">
document.getElementById('onamae').focus();
</script>
と書くか,あるいはbodyタグに
<body onload="document.getElementById('onamae').focus()">
ような細工をします(JavaScript講座)。
上の例では,名前が入力されているかどうかを if ($_POST['onamae'] != '')
で判断しています。これ以外に次のような判断法が考えられますが,意味は少しずつ違います。
if (isset($_POST['onamae']))$_POST['onamae']
がセットされていません(var_dump($_POST['onamae'])
を表示すると NULL
となります)ので,これで判断できます。ただ,このページで何も入力しないで Enter
キーを押した場合は空文字列 ""
がセットされていますので,「こんにちは, さん」と表示されてしまいます。if (!empty($_POST['onamae']))0
と入力しても無入力と判断されてしまいます。if ($_POST['onamae'])if ($_POST['onamae'] != '')$_POST['onamae']
がセットされていない場合には,警告が出ることがありますが,正しく処理されます。if ($_POST['onamae'] !== '')$_POST['onamae']
がセットされていない場合には,警告が出ることがあるだけでなく,「こんにちは」が表示されてしまいます。isset(...) は,セットされているか(is set?)を調べる命令です。複数のものがすべてセットされているかを調べるには,isset($_POST['onamae'], $_POST['email']) のように連続して書くことができます。
if ($_POST['onamae'])
や if ($_POST['onamae'] != '')
のような書き方では,$_POST['onamae']
が存在しないと
"PHP Notice: Undefined index: onamae in /home/okumura/public_html/php/form.php on line 17”
のような警告が出ることがあります。厳密には
if (isset($_POST['onamae']) && $_POST['onamae'] != '')
のようにするのが正しい方法です。
警告を(画面またはApacheのerror_logに)出ないようにするには,PHPの設定ファイルphp.iniの
error_reporting = E_ALL
を
error_reporting = E_ALL & ~E_NOTICE
または
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
のようにします。
Last modified: 2008-04-13 15:25:49