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

HOME > 

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というフレームワークについて勉強していきたいと思います。

phpMyAdminの設定方法

  • 2009.03.01 (日) 20:48
  • PHP

phpMyAdminの設定方法です

UbuntuにLAMPの環境を作ったのでそこに、phpMyAdminをインストールします。

UbuntuへのLAMP環境の構築は「UbuntuへのLAMP環境の構築」をみてください。

phpMyAdminの設定

  1.  まずは、phpMyAdminをダウンロードします。
    こちらのサイトから圧縮ファイルをダウンロードします。
    今回は,gzファイルをダウンロードします。
  2. ダウンロードしたファイルを解凍します。
    1
    
    tar zxvf phpMyAdmin-3.1.3-all-languages.tar.gz
  3. 解凍してできたフォルダを「/var/www/phpmyadmin」へ移動させます。
  4. ウェブブラウザから対象のフォルダにアクセスします。
    う~ん何やらメッセージがphpのモジュールが足りないみたいだ。
    phpmyadmin-01
  5. 足りないモジュールをインストールします。
    1
    
    sudo apt-get install php5-mcrypt
  6. インストール後に再度ページを開いてみます。
    おっ、警告メッセージは消えました
    phpmyadmin-02
  7. ログインしてみると警告メッセージが表示されました
    (ログインは、MySQLで作成したユーザー名とパスワードでログインできます。
    MySQLのサーバーを構築してからユーザーも作成していないし、パスワードの設定もしていないようでしたら
    ユーザ名:root パスワード:なしでログインできます
    ユーザーの作成は、ログイン後にphpMyAdminの特権のタブで作成することができます)
    phpmyadmin-03
    う~ん、なんだろうかなぁ。
  8. phpMyAdminをインストールしたフォルダの中を見ると「config.sample.inc.php」なるファイルを発見
    どうやらこのファイルをコピーして「config.inc.php」ファイルを作成しないといけないようだ。
    ということで

    1
    
    cp config.sample.inc.php config.inc.php

    コピー処理を行ってファイルを作成

  9. 8.で作成した「config.inc.php」ファイルの中に「blowfish_secret」を設定する箇所を発見
    ということで、とりあえず設定してみる。
  10. それで、再度phpMyAdminにアクセスしてみる。
    警告は全て消えました

色々と動かしてみましたが、問題なさそうです

 

UbuntuへのLAMP環境の構築

  • 2009.03.01 (日) 16:52
  • PHP,サーバー
  • ,

今度は、UbuntuにLAMPの環境を構築します。

まず、

1
apt-cache search [正規表現でのパッケージの検索]

をつかってインストールするべきパッケージを検索しながら

  • Apache
  • MySQL
  • PHP

のインストールをしていきます。

 

コマンドラインPHPのインストール

  1. 以下のコマンドを実行しコマンドライン版のPHPをインストールしてみる。
    1
    
    sudo apt-get install php5-cli
  2. インストールが始まり自動的にインストール完了します。

ためしにプログラムを作成して動かしてみましょう

単純なプログラムを作ります。

1
2
3
<?php
    echo "test\n";
?>

動かしてみました。

ubuntu-lamp-02

ちゃんと動きました。これでコマンドライン版のPHPはインストール完了です。

 MySQLをインストールしよう!!

今度は、MySQLのインストールです。

1
sudo apt-get install mysql-server-5.0

このコマンドを実行するとMySQLのサーバーがインストールが始まります。

依存関係でMySQLのクライアントのパッケージも同時にインストールされるようです。

ubuntu-lamp-03

 インストールが終わったので試しにmysqlに接続してみました見事接続成功

ubuntu-lamp-04

これで、MySQLもインストール完了です

Apacheのインストール

次はapacheのインストールです。

  1. 以下のコマンドを実行してApacheをインストールします。
    1
    
    sudo apt-get install apache2

 Apacheのインストールが完了します

試しにApacheが起動しているかWebブラウザでアクセスしてみます。

ubuntu-lamp-05

見事成功

これでApacheのインストールは成功です。

 ApacheにPHPのモジュールをインストール

  1. 1
    
    sudo apt-get install libapache2-mod-php5

    PHPのapacheモジュールのインストールを行います。

しばらくするとインストールが完了、さぁインストールは成功か試してみたいと思います。

 

1
2
3
<?php
phpinfo();
?>

このファイルを「/var/www/」にinfo.phpという名前で置いてみる。そしてブラウザでアクセス・・・。

info.phpのダウンロードが始まったう~ん、ぁあ~apacheを再起動してなかった。

1
sudo /etc/init.d/apache2 restart

ということで再起動してみる。

ubuntu-lamp-06

でアクセスすると見事ページが開いた

PHPからDBへのアクセスのテスト

最後に、PHPからDBへのアクセスをテストしてみます。

と思って、phpinfoの内容をみてみるとモジュールがかなり足りていない

とりあえず入れていきたいと思います。

PHPへのMySQLへの接続モジュールのインストールです。

1
sudo apt-get install php5-mysql

インストール完了してからapacheを再起動し、phpinfoの情報を見てみると

 

ubuntu-lamp-07

mysqlの情報があるこれで

よし、MySQLとの接続モジュールを作成してテストしてみよう

ubuntu-lamp-08

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$dsn = 'mysql:dbname=veryposi;host=127.0.0.1';
$user = 'testuser';
$password = 'password';
 
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
$sth = $dbh->prepare('SELECT * FROM test');
$sth->execute();
$result = $sth->fetchAll();
print_r($result);
?>

このプログラムをブラウザで実行してみる、と

ubuntu-lamp-09

ちゃんと起動しました。

これで一通りのLAMP環境がUbuntuに設定できました

たりないモジュールはその都度追加していきます。

 

PHPシステム開発 DB管理ツール

  • 2009.02.28 (土) 17:17
  • PHP
  • ,

PHPで、データベース管理ツールといえば有名な「phpMyAdmin」があります。

でも、実際にシステム開発やシステムの運用時に使用していると、思わぬ操作をしてしまって大怪我することもある可能性があると思います。

システム開発用に簡易DB管理ツールを作ろうと思います

■ 仕様

  • テーブルの作成
  • テーブルレイアウトの変更
  • データの検索
  • データの更新
  • データの削除
  • データの登録
  • データのインポート/エクスポート
  • IDを各テーブルのプライマリーキーとして保持

あとは…色々と便利機能を追加

基本的な機能を備えて、かつシステム開発時に楽できる機能を保持するように考慮するようにします。

Webでのシステムですが、CodeIgniterというフレームワークを使って作ります。

乞うご期待

PHPのドキュメント作成にPhpDocumentorを使ってみる

  • 2009.02.22 (日) 09:31
  • PHP
  • ,

PHPを使ってプログラムを書いていてJavadocのようなドキュメントを作成できたらいいなぁと思ってPhpDocumentorを使ってみました。

まずは、WindowsにXAMPPをインストールした環境でのPhpDocumentorのセットアップの方法です。

PhpDocumentorのセットアップ

  1.  XAMPPのPHPインストール先のフォルダにPATHを設定します。
    (XAMPPのセットアップについてはこちらをご覧ください)
    ◆PATHの設定方法◆
    ■  Windows2000、XPでの設定方法
    「コントロールパネル」から「システム」を開きます。
    すると、「システムのプロパティ」ウインドウが開くので「詳細」タブを選択し「環境変数」ボタンを押下します。
    システムのプロパティ
    環境変数の設定ウインドウが開きます。
    「システム環境変数」の中に「PATH」という変数があるので選択し、編集ボタンを押下します。
    環境変数ウインドウ
    「PATH」の編集画面が表示されるので、「C:\xampp\php;」を追加します。
    追加したら「OK」ボタンを押下します。
    ※「;」がPATHの区切り文字になっているので前のパスとの間に「;」があることを確認してください。
    PATHの設定

     ■ WindowsVistaでの設定方法
      「コントロールパネル」から「システムとメンテナンス」を開きます。
    システムとメンテナンスを選択
    すると、「システムとメンテナンス」ウインドウが開くので「システム」を開きます。
    システムとメンテナンス
    すると「システム」ウインドウが開くので、「システムの詳細設定」をクリックします。
    システムの詳細設定
    「システムのプロパティ」が開くので「詳細設定」のタブにある「環境変数」ボタンを押下します。
    システムのプロパティ
    環境変数の設定ウインドウが開きます。
    「システム環境変数」の中に「PATH」という変数があるので選択し、編集ボタンを押下します。
    環境変数の設定
    「PATH」の編集画面が表示されるので、「C:\xampp\php;」を追加します。
    追加したら「OK」ボタンを押下します。
    ※「;」がPATHの区切り文字になっているので前のパスとの間に「;」があることを確認してください。
    Pathの設定

  2. コマンドプロンプトを開いて、一度PhpDcumentorをアンインストール為に以下のコマンドを実行します。
    (XAMPPでインストールしていると既にインストールされていると思いますが一度アンインストールしください)

    1
    
    pear uninstall phpdocumentor
  3.  PhpDocumentorをインストールします。
    コマンドプロンプトで以下のコマンドを実行します。

    1
    
    pear install -a phpdocumentor

    これで、PhpDocumentorのインストールが終了しました。

PhpDocumentorを使ってみよう

 コマンドを実行して、ドキュメントを作ってみましょう

例)

1
phpdoc -t ./phpdoc/ -d C:/htdocs/codeigniter/system/application/

-tオプションで出力先を決定、-dオプションでphpdocを処理するソースが存在するディレクトリを指定しています。

詳しいコマンドのオプション内容は、こちらをご覧ください。PDFファイルなどにも出力できますよ

 ちょっとだけコマンド解説

  • -tオプション:作成されたファイルの出力先(相対パス、絶対パスどちらで指定することも可能です)
  • -dオプション:ドキュメントを作成するファイルが入っているディレクトリを指定する(相対パス、絶対パスどちらで指定することも可能です)
  • -fオプション:ドキュメントを作成するファイルを指定する(相対パス、絶対パスどちらで指定することも可能です)
  • -oオプション:ドキュメントのレイアウトを指定する
    PDFや、色々なHTMLのレイアウトが指定できます。
    例)PDFでの出力

    1
    
    phpdoc -t ./phpdoc -d ./application -o PDF:default:default

    例)デフォルトとは違うレイアウトでの出力(日本語も文字化けしないのでこれはお勧めの設定)

    1
    
    phpdoc -t ./phpdoc -d ./application -o HTML:Smarty:PHP

    他にも先ほどphpdocのコマンドのリファレンスの-oオプションの場所に色々なoutputの出力できる定義がのっているので試してみてください。
    (中には文字コードが指定されている為に、日本語が文字化けするものも存在するので注意が必要です)

出力種類の一覧) -oオプションで使用できる値は以下のものになります

ドキュメントが英語で書かれているので面倒なので-oオプションで使用できる値の一覧を抜粋して書いておきました

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HTML:frames:* - output is HTML with frames.
      HTML:frames:default - JavaDoc-like template, very plain, minimal formatting
      HTML:frames:earthli - BEAUTIFUL template written by Marco von Ballmoos
      HTML:frames:l0l33t - Stylish template
      HTML:frames:phpdoc.de - Similar to phpdoc.de PHPDoc output
      HTML:frames:phphtmllib - Very nice user-contributed template
      HTML:frames:phpedit - Based on output from PHPEdit Help Generator
 
HTML:Smarty:* - output is HTML with no frames.
      HTML:Smarty:default - Bold template design using css to control layout
      HTML:Smarty:HandS - Layout is based on PHP, but more refined, with logo image
      HTML:Smarty:PHP - Layout is identical to the PHP website
 
CHM:default:* - output is CHM, compiled help file format (Windows help).
      CHM:default:default - Windows help file, based on HTML:frames:l0l33t
 
PDF:default:* - output is PDF, Adobe Acrobat format
      PDF:default:default - standard, plain PDF formatting
 
XML:DocBook:* - output is XML, in DocBook format
      XML:DocBook/peardoc2:default - documentation ready for compiling into peardoc for online pear.php.net documentation, 2nd revision

PhpDocument用のコメントの書き方

コメントの書き方は、こちらを見てください。

お薦めのレンタルサーバー
広告
お薦めの書籍
HOME > 

PHP