LoginSignup
2
1

More than 5 years have passed since last update.

TransmitMail 2 で入力内容を MySQL に保存する

Last updated at Posted at 2015-11-05

TransmitMail 2 で入力内容を MySQL に保存するカスタマイズ例をご紹介します。

開発および動作確認環境

開発および動作確認環境は下記の通りです。

  • TransmitMail: 2.0.0
  • PHP: 5.6.10
  • MySQL: 5.5.42

input.html に入力フィールドを追加する

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
email varchar(255) YES NULL
created_at datetime NO NULL

DB 情報を config.yml に追加する

DB 情報を config/config.yml に追加します。

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 に作成します。

lib/exTransmitMail.php
<?php
class exTransmitMail extends TransmitMail
{
}

exTransmitMail クラスに機能を実装する

メール送信のあとの処理となる afterSetTemplateAndSendMail メソッドを追加し、そこに処理を書いていきます。( afterXXX メソッドについては Wiki をご参照ください。)

lib/exTransmitMail.php
/**
 * メール送信のあとの処理
 */
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.phplib/exTransmitMail.php の読み込みと TransmitMail クラスではなく exTransmitMail クラスを利用するように修正します。

index.php
<?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

修正ファイルは下記のコミットをご参照ください。

入力内容を MySQL に保存するカスタマイズ例 · dounokouno/TransmitMail@6a69cb7

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1