masayuki5160's diary

滋賀県大津市に住むソフトウェアエンジニアの雑多ブログ

EthnaでMySQLを使用してみる

今回はDBに接続してメールアドレスとパスワードを登録したいと思います。
作業の流れはこんな感じ。


0.前回作成したログインフォームの流用
 こちらで作成したソースを流用してつくっていきます。
 Ethna勉強中 その3 http://d.hatena.ne.jp/masayuki5160/20120327/1332863489

1.DBの準備
 今回はMySQLを使用。

2.DB接続
 app/action/Login/Do.php、etc/php.iniを変更していく。

3.確認


参考資料

Ethna×PHP (LLフレームワークBOOKS)

中古価格
¥1から
(2017/3/19 15:34時点)

アプリケーションオブジェクトについて
http://www.ethna.jp/ethna-document-dev_guide-appobj-overview.html

0.前回作成したログインフォームの流用
いきなり楽をしようとしてますw
前回作成したtestプロジェクトではログイン認証を行っていました。
それをちょっと流用して登録画面とします。

作業としてはテンプレートでボタンのバリューを変更するのと、
認証処理をコメントアウトするだけです。


template/ja/login.tpl


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

{if count($errors)}
<ul>
{foreach from=$errors item=error}
<li>{$error}</li>
{/foreach}
</ul>
{/if}

<form action="{$script}" method="post">
<input type="hidden" name="action_login_do" value="dummy">
<table border="0">
<tr>
<td>メールアドレス</td>
<td><input type="text" name="mailaddress" value="{$form.mailaddress}"></td>
</tr>
<tr>
<td>パスワード</td>
<td><input type="password" name="password" value="{$form.password}"></td>
</tr>
</table>
<p>
<input type="submit" name="action_login_do" value="登録">
</p>
</form>
</body>
</html>

バリューをログインから登録、と変更。
そしてapp/action/Login/Do.phpの認証処理をコメントアウト。



この状態で問題ないか確認してみる。
indexのページが表示されればok。

http://(IPアドレス)/test/?action_login=true

1.DBの準備
MySQLを使用します。

まずuser_dbというDBを作成。

mysql> create database user_db;
Query OK, 1 row affected (0.00 sec)

user_db専用ユーザmasaの作成。

mysql> grant all privileges on user_db.* to masa@localhost identified by 'masa';
Query OK, 0 rows affected (0.00 sec)

user_dbにテーブルを作成。

mysql> create table users(
-> id int4 not null auto_increment,
-> mailaddress varchar(255) not null unique,
-> password char(32) not null,
-> primary key(id));
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>
mysql> show tables;

                                        • +
Tables_in_user_db
                                        • +
users
                                        • +

1 row in set (0.00 sec)


DBの準備はこれで完了。
作業ログもはっときます。

mysql> create database user_db;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;

                                          • +
Database
                                          • +
information_schema
mysql
sample
tanaka
test
user_db
                                          • +

6 rows in set (0.00 sec)

mysql> use user_db;
Database changed
mysql> grant all privileges on user_db.* to masa@localhost identified by 'masa';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
[root@www masayuki]# mysql -u masa -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.0.95 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;

                                          • +
Database
                                          • +
information_schema
test
user_db
                                          • +

3 rows in set (0.00 sec)

mysql> use user_db;
Database changed
mysql>
mysql>
mysql>
mysql> create table users(
-> id int4 not null auto_increment,
-> mailaddress varchar(255) not null unique,
-> password char(32) not null,
-> primary key(id));
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>
mysql> show tables;

                                        • +
Tables_in_user_db
                                        • +
users
                                        • +

1 row in set (0.00 sec)

mysql> insert into users(mailaddress,password) values('masa@mail.com','masayuki');
Query OK, 1 row affected (0.01 sec)

mysql> select * from users;

                                                                • +
id mailaddress password
                                                                • +
1 masa@mail.com masayuki
                                                                • +

1 row in set (0.33 sec)

mysql> quit

2.DB接続
DB接続するためのコードを追加していきます。
まずはetc/test-ini.phpから。

mysql://(ユーザ名):(パスワード)@localhost/(DB)
という感じで設定。

'dsn' => 'mysql://masa:pass@localhost/user_db', // read-write

次にDBにアクセスするクラスを用意します。
今回だとusersテーブルにアクセスするためのクラスをつくることになります。

でそのクラスを下記コマンドで作成。

#ethna add-app-object users

これでapp/Test_Users.phpというファイル内にusersテーブルにアクセスするモデルが生成されます。



で最後にapp/action/Login/Do.php
いま作成したusersオブジェクトを使用して下記のように追加。

function perform()
{
/*dbへの登録*/
$user = $this->backend->getObject('users');

/*値をテーブルに割り当てる(フォームのmailaddressやパスワードを*/
/*テーブルのmailaddressやパスワードと紐付ける)*/
$user->importForm(OBJECT_IMPORT_IGNORE_NULL);
/*割り当てた1件のデータをテーブルに登録*/
$user->add();

return 'index';
}

これで完了です。

3.確認

ためしにデータを登録してみます。
ブラウザからアクセスしててきとうに登録してみてください。

http://(IPアドレス)/test/?action_login=true

そのご、MySQLのコンソールで確認して今登録したデータが入ってれば大丈夫です。