入力欄がたくさんあるフォームでは,途中で厭きて閉じられるかもしれません。 そんなとき,入力されたフォームの内容だけでもサーバにこっそり送れるとおもしろいかもしれません。^^;
やってみましょう。まず アンケート に答えてください。
アンケートのページで[送信]を押さずに,ぱんくずリストの「例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() {
const form = new FormData(document.getElementById("myform"));
fetch("ex3.php", { method: "POST", body: form });
}
としています。
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 といいます。