PHPとSQLiteで簡易BBSの作成
2015/02/26
PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。
■テーブル構造
1 |
CREATE TABLE 'bbs' ( 'id' INTEGER PRIMARY KEY, 'msg' TEXT , 'ymd' DATETIME ); |
■ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
<?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を作るのには向いてないということにはなってしまいそうですね。
関連記事
-
-
PHPで特定のファイル内のみタイムアウトを無効にする
重たい処理をするページだけ、タイムアウトを無効にする場合のメモ。 以下をPHPフ ...
-
-
MySQLで重複を除く
ユニークな値を取り出したいときに使う。 DISTINCT(ディスティンクト) S ...
-
-
pdfからjpg/jpegへ出来るだけ劣化させずに変換
やりたかった事はpdfからjpg画像への変換。 imagemagick使えばすぐ ...
-
-
日付と時間のピッカー
ここだとbootstrap使用だけど、他に良さそうなものがあったのでメモ。 ■参 ...
-
-
PHPでの$_REQUESTは色々危険
extract($_REQUEST)はかなり怖いよ、という話が最近あった。 でき ...
-
-
PHPのheader関数で気になった点
結論としてページの移転の場合はexitか ページ自体を消した方がよさ下。 &nb ...
-
-
PHPの条件式でまとめて評価
PHPのソースで、 if( !($hoge || $fuga || $foo) ...
-
-
UTF-16にエンコードされている文字列をUTF-8へデコード
エンコードされている文字列であまり見かけない感じのものがあった。UTF-8やSh ...
-
-
カンマ区切りの文字列で最後のカンマを排除
文字列をカンマ区切りにして、カンマを取り外して 配列にする際、頭もしくはお尻につ ...
-
-
PHPでis_fileとfile_existsについて
ファイルの存在チェックを行う際に、file_exists関数を 使用していたが、 ...