勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPとSQLiteで簡易BBSの作成

   2024/04/18  PHP SQLite

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を作るのには向いてないということにはなってしまいそう。

 - PHP SQLite

  関連記事

SQLite3でデータをランダムに抽出したい

SQlite3でデータをランダムで抽出したいケースがあった。MySQLと同様RA ...

sqliteでphpmyadminみたいに使えるSQLiteManagerの導入方法

SQLiteのデータベースファイルの中身を見たくてphpmyadminみたいなソ ...

SQLiteを使って感じたメリットとデメリット  

SQLiteを用いたツールをいくつか作って感じたメリットとデメリットをメモ。 & ...

PHP5.5からSQLite3を使用する際のよく使う構文

PHPからSQLiteを使う際に必ず使うであろう基本的な構文のメモ。PDOは使っ ...

データベース管理ツール「Adminer」でSQLite3を使えるようにする方法

SQLite3で作成したデータベース及びテーブルをAdminerから操作したい。 ...