SQLの窓

2016年05月29日


超簡易掲示板 : 保存タイプは CSV





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("<","&lt;",$_POST['text']);
	$_POST['text'] = str_replace(">","&gt;",$_POST['text']);

	// HTML 要素を無効にする
	$_POST['subject'] = str_replace("<","&lt;",$_POST['subject']);
	$_POST['subject'] = str_replace(">","&gt;",$_POST['subject']);
	$_POST['name'] = str_replace("<","&lt;",$_POST['name']);
	$_POST['name'] = str_replace(">","&gt;",$_POST['name']);

	// シングルクォートとダブルクォートとカンマ
	$_POST['text'] = str_replace("'","&#39;",$_POST['text']);
	$_POST['text'] = str_replace("\"","&#34;",$_POST['text']);
	$_POST['text'] = str_replace(",","&#44;",$_POST['text']);

	// シングルクォートとダブルクォートとカンマ
	$_POST['subject'] = str_replace("'","&#39;",$_POST['subject']);
	$_POST['subject'] = str_replace("\"","&#34;",$_POST['subject']);
	$_POST['subject'] = str_replace(",","&#44;",$_POST['subject']);
	$_POST['name'] = str_replace("'","&#39;",$_POST['name']);
	$_POST['name'] = str_replace("\"","&#34;",$_POST['name']);
	$_POST['name'] = str_replace(",","&#44;",$_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アプリの最新記事】
posted by lightbox at 2016-05-29 22:21 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり