通っているPHP講習会の私的メモ。
何度も繰り返しますが、小生の知識レベルはASP(.NETでない)は基本レベル、Perlをかじった程度です。
●SQLiteでDB作成
今回よりブログシステムの作成になります。
まずはブログのデータを入れるDBを作成します。
CREATE TABLE blog_m(
blog_id INTEGER PRIMARY KEY,
blog_date,
blog_title,
blog_body,
delete_flag
);
INTEGER PRIMARY KEYでオートインクリメントのデータ型設定。
その他DB作成時のTips。
・delete_flagで論理削除をしよう
・パスワードを保存する際はmd5()関数を使う
●PHPからDBを利用(sqlite関数)
$db = sqlite_open("../blog.db");//DB接続
$date=date("Ymd");
$sql = "INSERT INTO blog_m (blog_date,blog_title,blog_body) VALUES ({$date},'タイトル','本文')";
$result = sqlite_query($db,$sql);//SQL文の実行のみ
$sql = "SELECT * FROM blog_m WHERE delete_flag<>1";
$blog_list = sqlite_array_query($db,$sql);//SQLの結果を配列で受け取る
print_r($blog_list);//わかりやすく配列を見れる(htmlじゃなくてソースで確認)
●PHPからDBを利用(smarty)
<?php
include_once("../libs/Smarty.class.php");
$db = sqlite_open("../blog.db");
$sql = "SELECT * FROM blog_m WHERE delete_flag<>1";
$blog_list = sqlite_array_query($db,$sql);
$smarty = new Smarty();
$smarty->assign("blog_list",$blog_list);//SQLの結果をそのままassign
$smarty->display("blog.html");
?>
smarty側はforeachで値を表示。
{foreach from=$blog_list item=blog}
{$blog.blog_date|escape}<br>
{$blog.blog_title|escape}<br>
{$blog.blog_body|escape|nl2br}<br>{*nl2brは改行コードを<br>に変換*}
やったことをまとめると以上です。実際はコードを書く作業が大半でした。
いまいちforeach文や二次元配列を理解しきれていない。
構文として丸覚えするか。
こっから第5回内容。
●SQLインジェクション
価格.comが1年前にクラックされたのはこれが原因。
価格.comの攻撃手法はSQLインジェクション(2005/05/24)
入力されたデータは全て下記でサニタイズ処理せよ。
sqlite_escape_string($_POST["blog_title"])
sqlite_escape_string($_POST["blog_body"])
※DBごとにより危険な文字、サニタイズすべき文字が異なる。DB専用の関数を使おう!
sqliteは“sqlite_escape_string()”
mysqlは“mysql_real_escape_string()”
PostgreSQLは“pg_escape_string()”
汎用関数addslashes()は漏れがあるので使用禁止!
習ったことは以上。
えー!?講習内容は実装作業が大半でした。
ここまででブログの投稿とコメント機能を開発しました。
DBへの入力と出力さえ押さえれば、基本的なモノはとりあえず形にできそうです。
(色々な関数や機能はその都度、調べながらおぼえていこう)
次回はRSSとトラックバックを実装して完成です。
コメント