board.php、model.php、view.php の 3 ファイルで動作します。json.php が同梱されていますが、出力ファイルである board.csv を JSON 形式で取得する為のコードです。( JavaScript からアクセスする場合は、header( "Access-Control-Allow-Origin: *" ); を追加して下さい ) 他のアプリケーションからのアクセスを簡単にテストできる仕様になっています。 board.php
<?php // ************************************** // php.ini の output_buffering をチェックして // 有効になっていた場合は、header の前に出力可能です // ************************************** // ************************************** // 通常の HTML として出力します // ************************************** header( "Content-Type: text/html; Charset=utf-8" ); // ************************************** // キャッシュを無効にするヘッダ // ※ いろいろあるのは念のため // ************************************** header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); // ************************************** // 関数の定義を読み込みます // ************************************** require_once("model.php"); // ************************************** // $_POST['send'] != "" は送信ボタンが // クリックされた事を示します // さらに、テキストエリアに何か入力され // た場合に処理を行います // ************************************** $_POST['text'] = preg_replace( "/^[ \s]+/u", "", $_POST['text'] ); $_POST['text'] = preg_replace( "/[ \s]+$/u", "", $_POST['text'] ); if ( $_POST['send'] != "" && $_POST['text'] != "" ) { // データの書き込み処理 post_data(); } // ************************************* // データの表示処理 // ************************************* disp_data(); // ************************************** // ▼ 以下は画面です。$log_text を // 埋め込んでいます // ************************************** require_once("view.php"); ?>
model.php
<?php // ************************************** // データの書き込み処理 // ************************************** function post_data() { // データを一括読み込み $log_text = @file_get_contents("board.csv"); // ************************************** // 本文中の改行コードを "\n" という // 文字列に変換しています // ************************************** $_POST['text'] = str_replace("\r\n","\\n",$_POST['text']); $_POST['text'] = str_replace("\n","\\n", $_POST['text'] ); $_POST['text'] = str_replace("\r","\\n", $_POST['text'] ); // HTML 要素を無効にする $_POST['text'] = str_replace("<","<",$_POST['text']); $_POST['text'] = str_replace(">",">",$_POST['text']); // HTML 要素を無効にする $_POST['subject'] = str_replace("<","<",$_POST['subject']); $_POST['subject'] = str_replace(">",">",$_POST['subject']); $_POST['name'] = str_replace("<","<",$_POST['name']); $_POST['name'] = str_replace(">",">",$_POST['name']); // シングルクォートとダブルクォートとカンマ $_POST['text'] = str_replace("'","'",$_POST['text']); $_POST['text'] = str_replace("\"",""",$_POST['text']); $_POST['text'] = str_replace(",",",",$_POST['text']); // シングルクォートとダブルクォートとカンマ $_POST['subject'] = str_replace("'","'",$_POST['subject']); $_POST['subject'] = str_replace("\"",""",$_POST['subject']); $_POST['subject'] = str_replace(",",",",$_POST['subject']); $_POST['name'] = str_replace("'","'",$_POST['name']); $_POST['name'] = str_replace("\"",""",$_POST['name']); $_POST['name'] = str_replace(",",",",$_POST['name']); $log_wk = "{$_POST['text']},{$_POST['subject']},{$_POST['name']},{$_POST['datetime']}"; // ************************************** // 前回データとの境界に改行コードを // 設定しています // ************************************** $log_text = $log_wk . "\n" . $log_text; // 書き込み file_put_contents("./board.csv", $log_text ); // GET メソッドで再表示します header( "Location: board.php" ); exit(); } // ************************************** // データの表示処理 // ************************************** function disp_data() { // 埋め込み用データを global 宣言 global $log_text; // データを一括読み込み $rows = @file("./board.csv"); // ファイルが存在しない場合 if ( $rows === false ) { $log_text = "ここに投稿データが表示されます"; return; } // 表示用の埋め込みに使用される文字列変数 $log_text = ""; foreach( $rows as $v ) { $data = explode(",", $v); // ************************************** // 本文の改行は br 要素で表現します // ************************************** $row = str_replace("\\n", "<br>\n", $data[0] ); // ************************************** // 行毎に表示 HTML を作成 // ************************************** $row = "<h3>{$data[1]}</h3>{$row}<br><span class='sb'>({$data[2]} : {$data[3]} )</span><br>"; // ************************************** // 記事の境界を hr 要素で表現します // ************************************** $row .= "<hr>\n"; // ************************************** // 表示画面全体 を作成 // ************************************** $log_text .= $row; } } ?>
行データの作成は、以下のように置き換えるとメンテナンスしやすくなります。また、この部分を別ファイルにして require するともっと使いやすくなるでしょう。
// ************************************** // 行毎に表示 HTML を作成 // ************************************** $row = <<<HTML <h3>{$data[1]}</h3> {$row}<br> <span class='sb'>({$data[2]} : {$data[3]} )</span><br> HTML;
view.php
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <style> * { font-family: "ヒラギノ角ゴPro W3","Hiragino Kaku Gothic Pro","メイリオ",Meiryo,"MS Pゴシック",Verdana,Arial,Helvetica,sans-serif; } body { margin: 5px; } form { padding-right: 5px; } .sb { font-size: 8px; } #text { height: 100px; width: 500px; } #subject,#name { width: 400px; } @media screen and (max-width:479px) { #text { width: 100%; } #subject,#name { width: 230px; } #line_control { display: none; } } </style> <script> $( function(){ $("form").on("submit", function(){ var dateNow = new Date(); var dateString = dateNow.getFullYear() + "/" + ("0"+(dateNow.getMonth()+1)).slice(-2)+ "/" + ("0"+(dateNow.getDate())).slice(-2); var timeString = ("0"+(dateNow.getHours())).slice(-2) + ":" + ("0"+(dateNow.getMinutes())).slice(-2) + ":" + ("0"+(dateNow.getSeconds())).slice(-2); $("#datetime").val( dateString + " " + timeString ); }); }); </script> </head> <body> <h3><a href="board.php" style="color:black;">超簡易掲示板 ( CSV )</a></h3> <form method="POST"> タイトル <input type="text" id ="subject" name="subject"> <br> 名 前 <input type="text" id ="name" name="name"> <br> <textarea id ="text" name="text"></textarea> <input type="hidden" id="datetime" name="datetime"> <br> <input type="submit" name="send" value="送信"> </form> <br> <?= $log_text ?> </body> </html>
json.php
<?php // ************************************** // 通常の HTML として出力します // ************************************** header( "Content-Type: application/json; charset=utf-8" ); header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); // データを一括読み込み $rows = @file("./board.csv"); // ファイルが存在しない場合 if ( $rows === false || $rows[0] == "" ) { print '{ "error": "ファイルが存在しません" }'; exit(); } // 全ての行用の JSON 用クラス作成 $json = new stdClass; // 行データを格納する配列を作成 $json->item = array(); foreach( $rows as $v ) { $data = explode(",", $v); // 新しい行用のクラス作成 $board_data = new stdClass; // text プロパティに 本文をセット $board_data->text = $data[0]; // subject プロパティに タイトルをセット $board_data->subject = $data[1]; // name プロパティに 名前をセット $board_data->name = $data[2]; // subject プロパティに タイトルをセット $board_data->datetime = $data[3]; // 配列の最後に投稿データをセット array_push ($json->item, $board_data); } print json_encode($json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); ?>
|
【PHP + WEBアプリの最新記事】
- PHP : $.ajax でアップロード( 画像限定 ) / ファイルアップロード ver.3
- PHP : 選択した画像の表示 / ファイルアップロード ver.2
- PHP : ファイルアップロード ver.1
- 超簡易掲示板 ( JSON ) : PHP / CSS でスマホ用レスポンシブ対応
- PHP : 曲線が必要ならば ImageMagick ( 但し使えるかどうかはサーバー次第 )
- GD で画像縮小。『1) 単純縮小、2) 幅にあわす 3) 高さにあわす 4) 任意の幅と高さ』をその他の処理も含めてクラスでまとめ( class GD )
- PHP : 超簡易ログ
- PHP + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- Windows で Laravel を試す際、PHP の Windows バージョンが 5.6.30 なので、Laravel 5.2 をインストールします
- Laravel を試す為に Windows に Composer をインストール
- スマホ対応、サーバインデックス表示パッケージ( jQuery + Bootstrap(css) + mmenu + PHP )
- PHP による『超簡易掲示板』 / アプリケーションからの POST 検証用
- PHP : 既存 GD 関連ライブラリで、背景をグラデーション(2)
- PHP : 既存 GD 関連ライブラリで、背景をグラデーション
- PHP : 入力値のデバッグ
- PHP : ImageMagick : 背景が透過する画像を作成
- PHP雛型(2会話DB更新処理) : MySQL、XMLHttpRequest、XML、JSON、Canvas
- PHP をテストする為の初心者用フォーム