入力欄がたくさんあるフォームでは,途中で厭きて閉じられるかもしれません。 そんなとき,入力されたフォームの内容だけでもサーバにこっそり送れるとおもしろいかもしれません。^^;
やってみましょう。まず アンケート に答えてください。
アンケートのページで[送信]を押さずに,ぱんくずリストの「例3」でこのページに戻ってください。ブラウザの[戻る]で戻った場合でも,必要に応じてこのページをリロードすれば,途中までの結果が下に反映されるはずです:
名前:
年齢:
趣味:
このページは PHP で書かれています(ファイル名は index.php
です)。クッキーとセッション管理で説明したように,まずファイルの先頭で次のようにしてセッションを開始します(パスは適宜変えてください):
<?php session_set_cookie_params(0, '/~okumura/'); session_start(); ?>
上の名前や年齢を出力しているところは次のようになっています:
<p> <?php echo '名前:', htmlspecialchars(@$_SESSION['user']), '<br>'; echo '年齢:', htmlspecialchars(@$_SESSION['age']), '<br>'; echo '趣味:'; if (isset($_SESSION['hobbies'])) foreach ($_SESSION['hobbies'] as $x) echo htmlspecialchars($x), ' '; ?> </p>
アンケート のページは単なるHTMLファイルですので,ソースが簡単に調べられます。頭の部分に
function doit() { $.post( 'ex3.php', $('#myform').serialize() ); }
という部分で jQuery を利用しています。
ex3.php は次のようなファイルです:
<?php session_set_cookie_params(0, '/~okumura/'); session_start(); header('Content-Type: text/html; charset=UTF-8'); $_SESSION['user'] = @$_POST['user']; $_SESSION['age'] = @$_POST['age']; $_SESSION['hobbies'] = @$_POST['hobbies']; ?>
$_POST['..."]
や $_SESSION['..."]
などで、いちいち isset()
で値が入っているかどうか調べるのは面倒なので、ここでは @
という文字をかぶせて使っています。こうするとエラーになりません(ない値は NULL になり、echo
で表示されません)。この @
を Error Control Operator といいます。