TransmitMail 2 で入力内容を MySQL に保存するカスタマイズ例をご紹介します。
開発および動作確認環境
開発および動作確認環境は下記の通りです。
- TransmitMail: 2.0.0
- PHP: 5.6.10
- MySQL: 5.5.42
input.html
に入力フィールドを追加する
input.html
に下記のような入力フィールドを追加します。
<table>
<tr>
<th>お名前</th>
<td><input type="text" name="お名前" value="{$お名前}"></td>
</tr>
<tr>
<th>年齢</th>
<td><input type="text" name="年齢" value="{$年齢}"></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><input type="text" name="メールアドレス" value="{$メールアドレス}"></td>
</tr>
</table>
DB を用意する
DB は MySQL で、入力フィールドにあわせて下記のようなテーブル contacts
を用意します。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(11) | NO | PRI | NULL | auto_increment |
name | varchar(255) | YES | NULL | ||
age | int(11) | YES | NULL | ||
varchar(255) | YES | NULL | |||
created_at | datetime | NO | NULL |
DB 情報を config.yml
に追加する
DB 情報を config/config.yml
に追加します。
config:
db_name: transmitmail
db_user: username
db_password: password
db_host: localhost
db_table: contacts
exTransmitMail.php
を作成する
次に TransmiMail
クラスを継承した exTransmiMail
クラスを lib/exTransmitMail.php
に作成します。
<?php
class exTransmitMail extends TransmitMail
{
}
exTransmitMail
クラスに機能を実装する
メール送信のあとの処理となる afterSetTemplateAndSendMail
メソッドを追加し、そこに処理を書いていきます。( afterXXX
メソッドについては Wiki をご参照ください。)
/**
* メール送信のあとの処理
*/
public function afterSetTemplateAndSendMail()
{
if ($this->page_name === 'finish') {
try {
$dns = 'mysql:host=' . $this->config['db_host'] . ';dbname=' . $this->config['db_name'] . ';charset=utf8';
$pdo = new PDO($dns, $this->config['db_user'], $this->config['db_password']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'insert into ' . $this->config['db_table'] . ' (name, age, email, created_at) values (:name, :age, :email, :created_at)';
$stmt = $pdo->prepare($sql);
$stmt->execute([
':name' => $this->post['お名前'],
':age' => $this->post['年齢'],
':email' => $this->post['メールアドレス'],
':created_at' => date('Y-m-d H:i:s')
]);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
}
index.php
を修正する
index.php
に lib/exTransmitMail.php
の読み込みと TransmitMail
クラスではなく exTransmitMail
クラスを利用するように修正します。
<?php
require_once 'lib/TransmitMail.php';
require_once 'lib/exTransmitMail.php';
$tm = new exTransmitMail('config/config.yml');
$tm->run();
動作確認
DB に お名前
、 年齢
、 メールアドレス
、 登録日
が挿入されていることが確認できました。
まとめ
以上、 TransmitMail 2 で入力内容を MySQL に保存するカスタマイズ例をご紹介でした。 TransmitMail 2 は DB 連携も実装しやすくなりました。
今回のカスタマイズのコードは下記ブランチで公開をしています。
dounokouno/TransmitMail at example_mysql
修正ファイルは下記のコミットをご参照ください。