入力欄がたくさんあるフォームでは,途中で厭きて閉じられるかもしれません。 そんなとき,入力されたフォームの内容だけでもサーバにこっそり送れるとおもしろいかもしれません。^^;
やってみましょう。まず アンケート に答えてください。
アンケートのページで[送信]を押さずにブラウザの[戻る]でこのページに戻った場合でも,必要に応じてこのページをリロードすれば,途中までの結果が下に反映されるはずです:
名前:
年齢:
趣味:
このページは 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