jQueryとPHPとSQLiteを使って中途半端なチャットっぽいものを作成
原理原則を分かってない人間が作るとどうなるかという見本みたいなものなんですが、jQueryとPHPとSQLiteを使って簡素なチャットっぽいものを作りました。
メッセージをsendするとSQLiteに一回書き込んだ後に画面を更新するはずなんですが、上手く行ったりいかなかったりします。10秒経つとSQLiteに書き込まれているデータの最新20件を取得して画面に表示します。
jQueryもPHPも良く分かってないんですけど、何か動いたので載せときます。
一応、htmlタグとか無効化出来てるんじゃないかと思うのですが、foreach辺りの記述が相当無理解なので結構まずい事になってる気がします。jsonとかの知識も不十分。
以下、何の参考にもならないコード。htmlとJavascriptは実際のチャットページのソースを参照してください。
・create_db.php (SQLite作成用のPHPファイル。一度実行してデータベースを作成します。)
$db = sqlite_open('データベース名.db'); sqlite_query($db, 'create table テーブル名(id integer primary key, who text, msg text, date text);');
・message.php (sendボタンがクリックされたときにデータベースに内容を書き込むPHPファイル)
function add_message( $user, $message ){ $date = date("Y-m-d H:i:s"); $sql = "INSERT INTO テーブル名 VALUES(NULL, '$user', '$message', '$date')"; //DBへ接続 $db = sqlite_open('データベース名', 0666, $sqliteerror); if (!$db) { die('接続失敗です。'.$sqliteerror); } $result = sqlite_query($db, $sql); //SQLiteの接続を閉じる sqlite_close($db); } //送信メッセージをデータベースに保存 add_message( $_POST[ 'name' ], $_POST[ 'message' ] );
・update.php (データベースから最新の20件を引っ張ってjson形式でJavascriptに渡すPHPファイル)
//sqliteへ接続 $db = sqlite_open('データベース名.db'); $sql = "SELECT * FROM テーブル名 order by id desc limit 20"; //最新の20件を取得 $query = sqlite_query($db, $sql); $result = sqlite_fetch_all($query, SQLITE_ASSOC); $result_pre = array(); //HTMLエンティティ foreach ( $result_pre as $result ) { $result['who'] = htmlentities($result['who'], ENT_QUOTES, 'UTF-8'); $result['msg'] = htmlentities($result['msg'], ENT_QUOTES, 'UTF-8'); } header( 'Content-Type: application/json' ); echo strip_tags(json_encode($result)); //htmlタグを除去
【参考】
・プログラム全般について
・SQLiteについて
http://p-ho.net/sqlite/index.php?page=3
http://php.plus-server.net/function.sqlite-fetch-all.html
・JSONについて
http://www.doyouphp.jp/sample/sample_xml_json.shtml
http://d.hatena.ne.jp/u87/20100310/1268196424
http://php.benscom.com/manual/ja/function.json-encode.php
http://stacktrace.jp/jquery/api/ajax/$.getjson(url,%5Bdata%5D,%5Bcallback%5D).html
・PHPについて(主にHTMLエンティティ)
http://nyx.pu1.net/reference/control/foreach.html
http://www.phppro.jp/phpmanual/php/function.htmlentities.html
http://blog.ohgaki.net/htmlentitiesa_raspa_a_afia_a_s
http://www.weblio.jp/content/strip_tags