![]()
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 をテストする為の初心者用フォーム



board.php、model.php、view.php の 3 ファイルで動作します。json.php が同梱されていますが、出力ファイルである board.csv を JSON 形式で取得する為のコードです。( JavaScript からアクセスする場合は、header( "Access-Control-Allow-Origin: *" ); を追加して下さい )
他のアプリケーションからのアクセスを簡単にテストできる仕様になっています。
board.php




