例3

入力欄がたくさんあるフォームでは,途中で厭きて閉じられるかもしれません。 そんなとき,入力されたフォームの内容だけでもサーバにこっそり送れるとおもしろいかもしれません。^^;

やってみましょう。まず アンケート に答えてください。

アンケートのページで[送信]を押さずに,ぱんくずリストの「例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 '趣味:';
  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'];
?>

補足

このページをそのまま見ると次のような警告がApacheのerror_logに出るかもしれません(設定によってはブラウザの画面にも出ます):

PHP Notice:  Undefined index:  user in ...
PHP Notice:  Undefined index:  age in ...
PHP Warning:  Invalid argument supplied for foreach() in ...

これは $_SESSION['user'] などがその時点ではまだ定義されていないためです。if (isset($_SESSION['user'])) などを使うか,@$_SESSION['user'] のように @ をかぶせれば,警告が出なくなります。