例3

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

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

アンケートのページで[送信]を押さずにブラウザの[戻る]でこのページに戻った場合でも,必要に応じてこのページをリロードすれば,途中までの結果が下に反映されるはずです:

名前:
年齢:
趣味:

仕組み

このページは PHP で書かれています(ファイル名は index.php です)。 クッキーとセッション管理 で説明したように,まず head 要素の中で次のようにしてセッションを開始します:

<?php
  session_set_cookie_params(0, '/~okumura/ajax/ex3/');
  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() {
  new Ajax.Request('ex3.php', { parameters: $('myform').serialize(true) });
}

という部分で Prototype を利用しています。

ex3.php は次のようなファイルです:

<?php
  session_set_cookie_params(0, '/~okumura/ajax/ex3/');
  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'])) などを使えば警告が出なくなります。


奥村晴彦

Last modified: 2012-01-17 10:11:49