「モデルとデータベース[kohana 3.x]」では、データベースから取得したデータを出力しました。 ここでは、ブラウザ上で入力されたデータをデータベースへ登録する方法を勉強してみます。
「モデルとデータベース[kohana 3.x]」で作成したモデルにtasksテーブルへデータを追加するメソッドを作成します。
class Model_Task extends Kohana_Model{ ・・・・・ public function addTask($task, $limit) { DB::insert('tasks', array('task','limit')) ->values(array($task, $limit)) ->execute(); } }
モデルのインスタンスが作成されるとデータベースとの間を取り持つDatabaseクラスのインスタンスが 生成されるので、上記関数でINSERT文を実行します。
データベースへINSERTするには、次のように記述することもできます。
$sql = sprintf('INSERT INTO `tasks`'."\n". 'SET `task` = %s,'."\n". ' `limit` = %s', $this->_db->escape($task), $this->_db->escape($limit)); $this->_db->query(Database::INSERT, $sql, FALSE);
コントローラーにアクション(メソッド)を追加します。スーパーグローバル変数の$_POSTから 入力された値を取得しモデルへ登録を依頼します。登録後結果を表示します。
class Controller_Task extends Controller_Template_Default { // indexアクション ・・・・ public function action_posts() { $tasks = new Model_Task(); $this->template->title = 'Kohana 3.0 Test Page'; $this->template->meta_keywords = 'bnote, Kohana, KO3'; $this->template->meta_description = 'A test of Kohana'; $this->template->meta_copywrite = ''; $dat['message'] = ""; if($_POST) { if(isset($_POST['task'],$_POST['limit'])) { $tasks->addTask($_POST['task'], $_POST['limit']); $dat['message'] = '登録しました。'; } else { $dat['message'] = 'タスク名または期限が入力されていません。'; } } // 登録済みタスクの取得 $dat['tasks'] = $tasks->getTopTenTasks(); // 出力 $this->template->content = View::factory('blocks/posts', $dat); } }
入力フォームを持ったテンプレート(\blocks\posts.php)を次のように作成します。
<?php if(!empty($message)):?> <?php echo $message.'<br>';?> <?php endif;?> <div class="span-24 last"> <table class="tasks"> <?php foreach($tasks as $task):?> <tr> <td><?php echo $task['task'];?></td> <td><?php echo $task['limit'];?></td> </tr> <?php endforeach;?> <form method="POST" action="<?php echo url::base();?>task/posts/"> <table> <tr> <td>タスク</td> <td><input type="text" name="task"></td> </tr> <tr> <td>期限</td> <td><input type="text" name="limit"></td> <tr> <td colspan="2"><input type="submit" name="submit" value="Submit"></td> </tr> </table> </form> </div>
ブラウザからhttp://localhost/ko3/task/posts/へアクセスすると次の画面が表示され、 タスクと期限を入力してSubmitボタンを押すことで、新しいタスクが追加されます。
これで、データベースへ登録されるようになります。
[サンプルファイル]
Copyright 1997-2010 BBB All rights reserved.