今回は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.確認
参考資料
中古価格 |
アプリケーションオブジェクトについて
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 distributionCopyright (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のコンソールで確認して今登録したデータが入ってれば大丈夫です。