PHPとSQLiteで簡易BBSの作成
2024/04/18
PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。
テーブル構造
CREATE TABLE 'bbs' ( 'id' INTEGER PRIMARY KEY, 'msg' TEXT , 'ymd' DATETIME );
ソースコード
<?php //DB接続 $db = new SQLite3('./db/bbs'); //書き込み時 if( $_POST['mode'] == 'insert' && $_POST['msg'] ){ $msg = $db->escapeString(strip_tags($_POST['msg'])); //エスケープ&HTMLタグ除去 $query = ' INSERT INTO bbs (msg, ymd) VALUES ("' . $msg . '", datetime("now", "localtime")) '; $result = $db->query($query); if( $result ){ header('Location:' . $_SERVER['PHP_SELF']); }else{ echo 'insert error!'; exit(); } } //削除時 if( $_GET['mode'] == 'delete' && $_GET['id'] ){ $id = $db->escapeString($_GET['id']); //エスケープ $query = 'DELETE FROM bbs WHERE id = ' . $id; $result = $db->query($query); if( $result ){ header('Location:' . $_SERVER['PHP_SELF']); }else{ echo 'delete error!'; exit(); } } //編集用のデータ取得 if( $_GET['mode'] == 'update' && $_GET['id'] ){ $id = $db->escapeString($_GET['id']); //エスケープ $query = 'SELECT * FROM bbs WHERE id = ' . $id; $result = $db->query($query); if( $result ){ while ($row = $result->fetchArray()) { $updateData['id'] = $row['id']; $updateData['msg'] = $row['msg']; } }else{ echo 'select error!'; exit(); } } //編集 if( $_POST['mode'] == 'update2' && $_POST['id'] && $_POST['msg']){ $msg = $db->escapeString(strip_tags($_POST['msg'])); //エスケープ $id = $db->escapeString(strip_tags($_POST['id'])); //エスケープ $query = ' UPDATE bbs SET msg = "' . $msg . '" WHERE id = ' . $id ; $result = $db->query($query); if( $result ){ header('Location:' . $_SERVER['PHP_SELF']); }else{ echo 'update error!'; exit(); } } //読み込み $bbsTable = ''; $bbsTable .= '<table border="1"><tr><th>番号</th><th>メッセージ</th><th>書き込み日時</th><th>編集</th><th>削除</th></tr>'; $query = ' SELECT * FROM bbs ORDER BY id DESC LIMIT 10 '; $result = $db->query($query); if( !$result ){ echo 'sql error!'; exit(); } while ($row = $result->fetchArray()) { $bbsTable .= ' <tr> <td>' . $row['id'] . '</td> <td>' . htmlspecialchars($row['msg']) . '</td> <td>' . $row['ymd'] . '</td> <td><input type="button" onclick="return bbsUpdate('. $row['id'] .')" value="編集" class="btn"></td> <td><input type="button" onclick="return bbsDelete('. $row['id'] .')" value="削除" class="btn btn-danger"></td> </tr> '; } $bbsTable .= '</table>'; $db->close(); ?> <html> <head> <title>PHP&sqliteで掲示板テスト</title> <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"> <script> function bbsDelete( id ){ if( confirm('削除してよろしいですか') ){ location.href = '<?=$_SERVER["PHP_SELF"]?>?mode=delete&id=' + id; } else { return false; } } function bbsUpdate( id ){ location.href = '<?=$_SERVER["PHP_SELF"]?>?mode=update&id=' + id; } </script> </head> <body> <form action="<?=$_SERVER["PHP_SELF"]?>" method="post"> <textarea name="msg" rows="5" cols="60"><? if( $_GET['mode'] == 'update' ){?><?=$updateData['msg']?><?}?></textarea><br> <input type="hidden" name="mode" value="<?=( $_GET['mode'] == 'update' ) ? 'update2' : 'insert';?>"> <? if( $_GET['mode'] == 'update' ){?><input type="hidden" name="id" value="<?=$updateData['id']?>"><?}?> <input type="submit" value="書き込み"> </form></hr> <?=$bbsTable?> </body> </html>
その他
読み書きとかに関してはMySQLとあまり変わらないので問題ないけど、パスワードとかが無いので、DBファイルの扱いは注意しないといけなさそう。
あと複数の書き込みのタイミングが一致すると書き込みエラーになってしまう。読み込みはOK。
よってBBSを作るのには向いてないということにはなってしまいそう。
関連記事
-
SQLite3でデータをランダムに抽出したい
SQlite3でデータをランダムで抽出したいケースがあった。MySQLと同様RA ...
-
sqliteでphpmyadminみたいに使えるSQLiteManagerの導入方法
SQLiteのデータベースファイルの中身を見たくてphpmyadminみたいなソ ...
-
SQLiteを使って感じたメリットとデメリット
SQLiteを用いたツールをいくつか作って感じたメリットとデメリットをメモ。 & ...
-
PHP5.5からSQLite3を使用する際のよく使う構文
PHPからSQLiteを使う際に必ず使うであろう基本的な構文のメモ。PDOは使っ ...
-
データベース管理ツール「Adminer」でSQLite3を使えるようにする方法
SQLite3で作成したデータベース及びテーブルをAdminerから操作したい。 ...