※ パクレゼルヴではWeb開発エンジニアを大募集中!詳細はこちら
Home > HTMLとか, PHP > 久々にベタ書きで入力フォームを書いてみる

久々にベタ書きで入力フォームを書いてみる  

2010/6/30 水曜日 15:47:47

モリモリモリモリです。

Webアプリは実際の業務ではCakePHP、symfony、Zend Framework等のPHPフレームワーク、
自社フレームワーク、またテンプレートエンジンとしてsmarty等を使うかと思います。

WEBプロミングを始めたばかりの人は何を参考にすればいいか割と苦労するかなと。
私自身がそうでした。

ベタ書きで簡単な入力フォームを書いたらどーなるかなと思って久々に書いてみることにしました。

以下は、セッションを利用したPC向けの書き方です。
手抜きな部分も有りますので参考程度にお願いします。

< ?php
session_start();

$param = array('name','tel');
foreach($param as $val){
	// SESSION値よりもPOST値を優先
	if(isset($_POST[$val])){
		${$val} = trim($_POST[$val]);
	}elseif(isset($_SESSION[$val])){
		${$val} = trim($_SESSION[$val]);
	}else{
		${$val} = '';
	}
}

// 確認ボタンが押された際の処理
if(isset($_POST['confirm_btn'])){
	// バリデーション
	$err = array();
	foreach($param as $val){
		switch($val){
			case 'name':
				if($name == ''){
					$err['name'] = '※名前は必須です。<br />';
				}
				break;
			case 'tel':
				if($tel == ''){
					$err['tel'] = '※電話番号は必須です。<br />';
				}elseif(!preg_match('/^\d+$/',$tel)){
					$err['tel'] = '※電話番号は数字で入力して下さい。<br />';
				}
				break;
			default:
		}
	}
	// エラーが無ければ
	if(count($err) == 0){
		// 値をセッションに格納
		foreach($param as $val){
			$_SESSION[$val] = ${$val};
		}
		// 確認画面へロケート
		header('Location:http://example.com/confirm.php');
		exit;
	}
}
?>
<html>
<body>
<form method="post" action="">
	< ?php
	if(isset($err['name'])){
		echo $err['name'];
	}
	?>
	名前: <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?/>" /><br />
	< ?php
	if(isset($err['tel'])){
		echo $err['tel'];
	}
	?>
	電話番号: <input type="text" name="tel" value="<?php echo htmlspecialchars($tel); ?/>" /><br />
	<input type="submit" name="confirm_btn" value="確認" />
</form>
</body>
</html>

投稿の際に勝手に置換されたりするので、上記のコードをまんまコピペしてもうまく動きません。汗
適宜修正お願いします。
すいません。

5行目あたりからの処理の

${$val}

ですが、こんな感じで可変変数を使うことにより、$name、$telに入力値が入ってくるようになります。

これについては弊社の下記記事も参考にどうぞ。
http://labs.pakureserve.jp/archives/124

バリデーション処理もベタで書いてますがご了承下さい。

処理としては、エラーが無ければセッションに格納して、確認画面へロケーション。
確認画面ではセッションの値を表示
(表示の際は項目に応じてhtmlspecialchars、nl2br関数等を使って表示させましょう)し、
登録完了画面で登録が完了したら、

$_SESSION = array();

等でセッションを空にしてやる感じで。

あと、最近たまたま気付いたことですが、もしこのフォームのテキストフォームが一つだった場合、
IEでテキストを入力してENTERキーを押すと、多分動きません。笑

これはIEのバグ?

IEでテキストフォームが一つの場合、ENTERキーでSubmitした場合に、
なぜか type=”submit” のパラメータと値がpostされないのです。
つまり、この場合だと、$_POST['confirm_btn']のパラメータと値が送信されません。

これを回避するためには以下のようなテキストフォームをダミーで入れといてやれば大丈夫です。

<input type="text" style="display:none;" />

…美しくない!

MoriMoriMoriMori HTMLとか, PHP

  1. No comments yet.
  1. No trackbacks yet.