LoginSignup
1

More than 5 years have passed since last update.

posted at

updated at

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

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

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
What you can do with signing up
1