!PHP再入門 for AiSA
!!対象
-最近PHP書いてない
-なんとなくPHPが読める
-DB?

!!学べる技術
- PHPからのMySQL利用方法
- 簡単なPHPスクリプトの作り方

!!学べない技術
- スケールするWebアプリの書き方
- php,mysqlの環境構築

!!作業の順番
-サービス設計
-DB設計
-DBアクセサ作成
-ルータ作成
-テンプレ作成
-テンプレ結合
-サービスリリース

!!時間があれば全部やりたい
- C4SAでやってみよう 15日無料

!!サービス設計
掲示板つくろう
ログイン不要

!!DB設計
phpmyadminでさくっとつくる

id,text,update
があればいいでしょう

!!DBアクセサ作成
挿入と参照のみ

!!ルーター作成
がりがり
ifで分岐
!!テンプレさくせい
いつもの

!!テンプレ結合
まぜまぜ

!!C4SAで掲示板(ソースコード)
かんたんー
>> code php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>1lineBBS</title>
<?php
define('DB_NAME', getenv('C4SA_MYSQL_DB'));
define('DB_USER', getenv('C4SA_MYSQL_USER'));
define('DB_PASSWORD', getenv('C4SA_MYSQL_PASSWORD'));
define('DB_HOST', getenv('C4SA_MYSQL_HOST'));

$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';charset=utf8;';
$db = new PDO($dsn,DB_USER,DB_PASSWORD);
function getAll(){
  global $db;
  $sth = $db->prepare('select * from board');
  $sth->execute();
  return $sth;
}
function insert($text){
  global $db;
  $sth = $db->prepare('insert board(text) values (?)');
  $sth->execute(array($text));
}

if(isset($_POST['action'])){
  $action = $_POST['action'];
  if($action == 'insert'){
    if(isset($_POST['text'])){
      insert($_POST['text']);
      echo "insert ok ". $_POST['text'];
      echo '<a href="/">back</a>';
    }
  }
}else{
echo "<h1>1line bbs</h1>";
?>
<form method="post">
  <input type="text" name="text" size=50>
  <input type="hidden" name="action" value="insert">
  <input type="submit" value="post">
</form>
<hr>
<?php
$items = getAll();
foreach($items as $item){
?>
<li><?php echo htmlspecialchars($item['text']); ?></li>
<?php
}  
?>
<hr>

<?php } ?>

<hr>
AiSA
<<

!!このままではダメな理由
- 表示とロジックが分離できていない
-- メンテナンス性が著しく悪い
- ルータが複雑になるとむちゃくちゃになる
-- ex. このページからじゃないとココにはきちゃだめ
-- ex. ログインしていないとここにはアクセスできない
- 大事なコードが丸見えになる危険性がある
-- 世界がちゃんとしていれば問題になることはないが、、
- 入力チェックに漏れが生じやすい
-- 一貫した入力チェックの仕組みを

良い子は真似しないように

!!@kuidaoringさんがすばらしくスケーラブルに書き直してくれました

これはすばらしい!
RedBeanとSlimをつかってます。今風!
https://github.com/kuidaoring/aisa_board



5643382
wiki
1394292035