MicroFramework Flightで簡易掲示板を作成する
前回の続きFlightを進める
Flight Frameworkの勉強がてら簡易的な掲示板を作成してみました。
名前とメールアドレスと内容をMySQLに保存して表示を行います。
BootStrapでちょいちょいとフォームを作ってこんな感じに仕上げる
index.php
DBは全くセキュリティ等は考慮せずに保存しています。
FlightにはMySQLの操作を直接便利にするようなものは用意されていないようで、
Flight::registerに対してDBの設定はできるんですが、これって結局PDOなのですね・・・
フォームに記入してそれを表示させるだけなので、
POSTを受ける部分と、それ以外のときには表示をおこなう二つの部分に分けました。
あってんのかなこの書き方・・・
<?php
require 'flight/Flight.php';
Flight::register('db', 'PDO', array('mysql:host=127.0.0.1;dbname=flight_test', 'root', 'root'));
// POSTであればここに入る
Flight::route('POST /', function(){
$db = Flight::db();
$stmt = $db->prepare("insert into bbs(content, mail, name) values('{$_POST['content']}', '{$_POST['mail']}', '{$_POST['name']}')");
$stmt->execute();
Flight::redirect('./');
});
// 通常のアクセスはここ
Flight::route('/', function(){
$db = Flight::db();
$stmt = $db->prepare('select * from bbs order by created DESC limit 20');
$stmt->execute();
$a = $stmt->fetchAll(PDO::FETCH_ASSOC);
Flight::render('top.php', array('hoge' => $a));
});
Flight::start();
Flight::render(‘top.php’, array(‘hoge’ => $a));
この部分でtop.phpを呼び出していますが、Flightのviewはデフォルトでviews以下を読み込みます。
ダウンロードして展開したFlightにはなぜかviewsのディレクトリがないので作成して、
その下にtop.phpを編集します。
views/top.php
Bootstrapで書いているのでview部分がちょいと長いです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
<meta name="keywords" content="">
<meta name="description" content="">
<!-- http://todc.github.io/todc-bootstrap/components/#panels-heading -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h1>flight test 掲示板</h1>
</div>
<div class="container">
<form method="post" action="./" class="form-horizontal" role="form">
<div class="form-group">
<label for="input_name" class="col-sm-1 control-label">名前</label>
<div class="col-sm-2">
<input type="text" name="name" class="form-control" id="input_name" value="" placeholder="名前">
</div>
</div>
<div class="form-group">
<label for="input_mail" class="col-sm-1 control-label">メール</label>
<div class="col-sm-4">
<input type="mail" name="mail" class="form-control" id="input_mail" value="" placeholder="hoge@hogehoge.com">
</div>
</div>
<div class="form-group">
<label for="input_text" class="col-sm-1 control-label">内容</label>
<div class="col-sm-4">
<textarea name="content" class="form-control" id="input_text"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-4">
<input type="submit" class="btn btn-primary">
</div>
</div>
</form>
</div>
<div class="container">
<hr>
<? foreach ($hoge as $c) { ?>
<div class="panel panel-default">
<div class="panel-heading">
<span class="label label-primary"><?=$c['name'];?></span>
<a href="mailto:<?=$c['mail'];?>"><?=$c['mail'];?></a>
<span class="label label-default"><?=$c['created'];?></span>
</div>
<div class="panel-body">
<?=$c['content'];?>
</div>
</div>
<? } ?>
</div>
</body>
</html>
動作解説とSQLスキーマ
作成したデータベースの構造
[sql]
CREATE TABLE bbs
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
content
text,
mail
varchar(50) DEFAULT NULL,
name
varchar(50) DEFAULT NULL,
created
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[/sql]
formからデータが投げられたときにはindex.phpのPOSTに入ります。
そのときにMySQLへデータが投げられてすぐにトップへリダイレクト。
トップはデータを表示するだけなので書き込んだ内容がすぐに反映されるような動きになります。
-
前の記事
Casper the bath loving dog [YouTube] 2014.02.25
-
次の記事
Flightで作った掲示板をクラスに分割してみる 2014.03.02
コメントを投稿するにはログインしてください。