新しいブログに移動しました。
9ensanのLifeHack
こちらの記事も必要に応じて新しいブログに移動させる予定です。
今後ともよろしくお願い致します。

HOME > PHP > 

PHP応用 コンタクトフォームの作成 入力チェックの追加

PHP応用 コンタクトフォームの作成 入力チェックの追加

  • 2009.03.16 (月) 20:19
  • PHP

回、作成したコンタクトフォームに入力チェックを追加しましょう。

入力チェックの追加

前回のままでは、名前、メールアドレス、内容どれも空のままでも送信できてしまいます。

なので各項目に以下のようなチェック内容を付加するようにします。

  • 名前
    1.入力必須
    2.20文字以内
  • メールアドレス
    1.入力必須
    2.メールアドレスとして正しいこと
  • 内容
    1.入力必須

上記内容を前回のプログラムに機能追加します。

「confirm.php」を以下のように修正しました。

 ソース:confirm.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php
	$contactname = $_POST["contactname"];
	$contactmail = $_POST["contactmail"];
	$contents    = $_POST["contents"];
	//入力チェック
	$errormsg = array();
	//名前
	if ($contactname == null) {
		$errormsg[] = "名前を入力してください。";
	}
	if (mb_strlen($contactname) > 20) {
		$errormsg[] = "名前は20文字以内で入力して下さい。";
	}
	//メール
	if ($contactmail == null) {
		$errormsg[] = "メールを入力してください。";
	}
	$ret = preg_match("/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/", $contactmail);
	if (!$ret) {
		$errormsg[] = "メールを正しい形式で入力して下さい。";
	}
	//内容
	if ($contents == null) {
		$errormsg[] = "内容を入力して下さい。";
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>コンタクトフォーム</title>
	<style TYPE="text/css">
	<!--
		H1 {
			color: red;
			font-size: 18pt;
		}
		#contact-form th {
			background-color: #9bdbea;
			padding: 10px 20px;
		}
		#contact-form td {
			background-color: #f7f7ef;
			padding: 10px 20px;
		}
		#contact-form td input {
			width: 400px;
		}
		#contact-form td textarea {
			width: 400px;
		}
		form {
			display: inline;
		}
		#errmsg {
			background-color:#E7D3D6;
			border:3px solid #A55952;
			color:#944121;
			font-size:12px;
			margin:10px;
			padding:10px;
			text-align:left;
			width:400px;
		}
	-->
	</style>
</head>
<body>
<h1>コンタクトフォーム</h1>
<?php if (count($errormsg) > 0): ?>
<div id="errmsg">
<?php foreach ($errormsg as $msg): ?><?=$msg?><br />
<?php endforeach; ?>
</div>
<form action="./confirm.php" method="post">
    <table id="contact-form" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <th>
                名前
            </th>
            <td>
                <input type="text" name="contactname" value="<?= $contactname ?>" />
            </td>
        </tr>
        <tr>
            <th>
                メールアドレス
            </th>
            <td>
                <input type="text" name="contactmail" value="<?= $contactmail ?>" />
            </td>
        </tr>
        <tr>
            <th>
                内容
            </th>
            <td>
                <textarea name="contents" rows="10"><?= $contents ?></textarea>
            </td>
        </tr>
        <tr>
            <th colspan="2">
                <input type="submit" value="入力">
            </th>
        </tr>
    </table>
</form>
<?php else: ?>
<table id="contact-form" border="1" cellpadding="0" cellspacing="0">
	<tr>
		<th>
			名前
		</th>
		<td>
			<?= $contactname ?>
		</td>
	</tr>
	<tr>
		<th>
			メールアドレス
		</th>
		<td>
			<?= $contactmail ?>
		</td>
	</tr>
	<tr>
		<th>
			内容
		</th>
		<td>
			<?= $contents ?>
		</td>
	</tr>
	<tr>
		<th colspan="2">
			<form action="./end.php" method="post">
				<input type="hidden" name="contactname" value="<?= $contactname ?>">
				<input type="hidden" name="contactmail" value="<?= $contactmail ?>">
				<input type="hidden" name="contents" value="<?= $contents ?>">
				<input type="submit" value="送信" />
			</form>
			<form action="./input.php" method="post">
				<input type="hidden" name="contactname" value="<?= $contactname ?>">
				<input type="hidden" name="contactmail" value="<?= $contactmail ?>">
				<input type="hidden" name="contents" value="<?= $contents ?>">
				<input type="submit" value="内容修正" />
			</form>
		</th>
	</tr>
</table>
<?php endif; ?>
</body>
</html>

これで、入力チェックを行うことができます。

不正な入力値を除いて、正しく入力されている場合のみ最後の送信まで行えます。

例えば、未入力で入力ボタンを押下すると

contactform02-01

このように、入力エラーとなり先に進むことができなくなります。

変更した後のデモは「こちら」から確認できます

今回で入力チェックを行うことができました。

 

プログラムの考察

ここまでで、コンタクトフォームとしての機能は満たしました。

ですが、プログラムとしてはどうでしょうか?

  • 「input.php」
  • 「confirm.php」
  • 「end.php」

何か無駄な点とプログラムとしてわかりづらい点があります。

  1.  input.phpとconfirm.phpの中に同じHTMLの記述がある
  2. confirm.phpの中に入力チェックである業務ロジックと画面表示部分であるHTMLのロジックが混在していてプログラムがメンテナンスしづらい
  3. end.phpの中にメール送信部分と、送信完了画面のHTMLのロジックが混在していてプログラムのメンテナンスしづらい

簡単にプログラムのまずい部分をあげただけでも3つもでてきました。

これくらいの小さなプログラムだったらこれでもいいかもしれませんが、もっと大規模プログラムだったらどうでしょうか?

メンテナンス出来ないとんでもないプログラムが出来上がると思います。

 

では、どうすればよいでしょうか?

最低、画面表示部分業務ロジック部分は最低限分ける必要があると思います。

 e794bbe99da2e981b7e7a7bb

では、その業務ロジックと画面表示部分を分離させる設計方法はどのようにしたら便利になり、ソースコードのメンテナンス性が向上するでしょうか?

ここでソフトウェアの設計手法の一つでMVCモデルというものを紹介したいと思います。

どのようなものかというと

処理の中核を担う「Model」、表示・出力を司る「View」、入力を受け取ってその内容に応じてViewとModelを制御する「Controller」の3要素の組み合わせでシステムを実装する方式

です。

入力はまず、全ての処理を制御するContorollerに処理を委譲します。

Controllerが入力の内容から、適したModelを呼び出し、その結果に応じて必要なViewを表示するように実装します。

今回ならControllerが入力チェックを行うModelを呼び出しその結果に応じて、確認画面を表示するViewを呼び出すかまたは、入力画面のViewを呼び出すように実装されます。

 

そのような処理を書きますが、毎回、毎回、同様の処理を記述するのはばからしいのでフレームワークというものが先人の知恵で作られています。

 

フレームワークとは、開発する際に頻繁に必要とされる汎用的な機能をまとめてあるアプリケーションのことです。

 

次回は、PHPでのMVCフレームワークで私がよく使用しているCodeIgniterというフレームワークについて勉強していきたいと思います。

コメント:2件

  1. さくら使用

    メールフォームを使わせてもらいました。
    ありがとうございます。

    サーバ、さくらを使っています。
    メールボックスの受診箱に入っている文面が文字化けしています。。
    なぜおきるのか?回避方法など思い当たる節がありましたら、ご教授いただけましたら助かります。

    宜しくお願いいたします。

    • gensan

      サクラのレンタルサーバではPHPが使用する文字コードがEUCになっています。
      なので、プログラムの文字コードをEUCで作成しないと日本語が文字化けしてし
      まいます。
      プログラムファイルの文字コードをEUCにするとなおると思います。

コメント投稿フォーム
さくら使用 への返信を入力してください。
ユーザー名(必須)
メールアドレス(必須)(非公開)
ホームページ
コメント

トラックバック:1件

この記事のトラックバックURL
http://blog.veryposi.info/programing/php/php-appli-contactform-2/trackback/
お薦めのレンタルサーバー
広告
お薦めの書籍
HOME > PHP > 

PHP応用 コンタクトフォームの作成 入力チェックの追加