確認画面を作りましょう。
check_question.phpを作ります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
</style>
<title>アンケート</title>
</head>
<?php
// 購入日
$pdate = $_POST['pdate'];
// 平均購入額
$pprice = $_POST['pprice'];
// 評価
$star = $_POST['star'];
// 興味のある言語
for ($i =0; $i < 6; $i++) {
if (isset($_POST['lang'][$i])) {
$lang[$i] = $_POST['lang'][$i];
} else {
$lang[$i] = '';
}
}
// 職業
$job = $_POST['job'];
?>
<body>
<p>■アンケートの内容を確認してください。</p>
<p>この本の購入日を教えてください。<br />
<?php
// 全角から半角へ変換
$pdate = mb_convert_kana($pdate,'as','UTF-8');
// 「/」で分割
if (empty($pdate)) {
echo '年月日を入力してください。<br />';
} elseif (preg_match("/([0-9]{4})[-\/]+([0-9]{1,2})[-\/]+([0-9]{1,2})/", $pdate)) {
list($year,$month,$day) = explode('/',$pdate);
} else {
echo htmlspecialchars($pdate, ENT_QUOTES) . '(年月日を「/」で区切って下さい。)<br />';
}
// 日付チェック
if (isset($year,$month,$day)) {
checkdate($month,$day,$year);
} else {
echo htmlspecialchars($pdate, ENT_QUOTES) . '(日付に誤りがあります。)';
}
?></p>
<p>一ヶ月あたりの書籍の平均購入額を教えてください。<br />
<?php
// 全角から半角へ変換
$pprice = mb_convert_kana($pprice,'as','UTF-8');
// 数値チェック
if (is_numeric($pprice)) {
echo $pprice . '円';
} else {
echo htmlspecialchars($pprice, ENT_QUOTES) . '円 (数値ではありません。)' ;
}
?></p>
<p>本の評価を教えてください(5段階)<br />
<?php echo htmlspecialchars($star, ENT_QUOTES); ?></p>
<p>興味のある言語を教えてください。(複数選択可)<br />
<?php
for ($i = 0; $i < 6; $i++) {
// チェックされているもののみ表示
if (isset($lang[$i])) echo htmlspecialchars('[' . $lang[$i] . ']', ENT_QUOTES);
//別パターンB
//if ($lang[$i] != '') echo '[' . $lang[$i] . ']';
}
?></p>
<p>あなたの職種を教えてください。<br />
<?php echo htmlspecialchars($job, ENT_QUOTES); ?></p>
<form action="write_question.php" method="POST" />
<input type="hidden" name="pdate" value="<?php echo $pdate; ?>" />
<input type="hidden" name="pprice" value="<?php echo $pprice; ?>" />
<input type="hidden" name="star" value="<?php echo $star; ?>" />
<?php
for ($i = 0; $i < 6; $i++) {
if (isset($_POST['lang'][$i])) {
echo'
} elseif (empty($_POST['lang'][$i])){
echo'
}
}
?>
<input type="hidden" name="job" value="<?php echo $job; ?>" />
<input type="submit" value="アンケートを送信する" / >
</form>
</body>
</html>
●mb_convert_kana(①,②,③)
全角かな、半角かな等に変換します。
①は対象文字列です。
②はオプション記号です。これは決まってます
a:全角英数を半角にします。
s:全角スペを半スペにします。
k:半角カナを全角にします。
とりあえず「as」で覚えちゃってもいいみたいです。
③は文字コードです。ここは、UTF-8でいきましょう。
●list($year,$month,$day) = $ary
とりあえず、わかりやすいように例で書いてみました。listは割り当てです。$aryは配列でいっぱいあります。この場合だと3個です。それを変数$year,$month,$dayに割り当てて代入します。
●explode(区切り文字,対象文字列)
文字列を文字列で分割する関数です。例えば
$ary = explode('/' 2012/10/28; 2)
なら、$ary[0]・・・[2012]、$ary[1]・・・[10/28]になります。最後の2で、/で文字列を2分割するって意味です。ややこしいですね。
●checkdate(月,日,年)
正しい年月日かチェックします。過去、未来も可です。うるう年にも対応です。うるう年ってなんでしたっけ?順番は月,日,年です。これ面倒ですが決まってるみたいです。
●is_numeric()
引数が数値かどうかをチェックします。整数、小数、16進数(0~9,a~f)、と指数(1e4=104らしいです。指数はよくわかりませんが天文学的な数字みたいな感じだと思います。)がいけます。数値ならtrue、数値でないならfalseで返します。
●isset()
変数があるかどうかを調べます。正確には変数がセットされているかどうか?です。NULLではないかを調べます。NULLは何もないという意味らしいです。NULLの場合はfalseを返します。
●empty()
変数が空かどうかを調べます。深くやるとまだ意味がありそうですが、とりあえずこれで自分を納得させます。NULLのとき、文字が空のとき、値が0の場合true、それ以外の場合はfalseです。
●preg_match()
正規表現によるマッチングを行う。らしいです。色々記述があり正直わかりません。
なんとなくですが、ここですと
preg_match("/([0-9]{4})[-\/]+([0-9]{1,2})[-\/]+([0-9]{1,2})/", $pdate)
だと0-9の数字を4回繰り返し/で区切り、0-9の数字を2回繰り返し/で区切り、0-9の数字を2回繰り返し/で区切るってことです。もう少し詳しく調べてみます。
上のソースでやればエラーは出ないです。が多々おかしいと思うところもあります。本当は必須条件とかでちゃんと打ち込まないと先に進めなくするのが普通だと思いますが、とりあえず出るエラーを全部防ぎました。たぶんですけど。
※htmlspecialchars()の使いどころは、echoのところらしいです。直前で入れることが好ましいらしいです。ようはブラウザ側で働く悪意のあるJSのプログラムを防げればいいらしいです。
アンケートフォームの確認画面です。画僧はクリックで拡大できます。確認画面はCSSで装飾されています。本当はもっとシンプルな画面です。↓
PR