前回の続きです。JSONを簡易データベースとして使用します。投稿データを連想配列からJSON形式に変換してJSONファイルに保存します。
ブログでは、Mysqlのようなデータベースを使用するのですが、今回は簡単にWebアプリの仕組みを学習するために、簡易的にJSONをデーターベースとして投稿内容を読み書きしていきます。
JSONは、構造的なデータのため、Mysqlのようにカラムとカラムの値を見やすく分けて書けるからです。
このような形です。
[ { "id" : "1", "title" : "楽しい!ブログ作成", "category" : "ニュース" "comment":"楽しくブログ作成はじめましょう。" }, { "id" : "2", "title" : "サッカーの試合結果", "category" : "スポーツ" "comment":"チェルシーが勝ちました!" }, ]
JSONをデーターベースとして使っていきます。
フォームから受け取ったデータをJSONで保存するために構造的な連想配列にします。
PHPでは、連想配列の形は次のように書きます。
$array = array(
"a" => 100,
"b" => 200,
"c" => 300,
"d" => 400,
);
#arrayを省略して書くことも可能です。
$array = [
"a" => 100,
"b" => 200,
"c" => 300,
"d" => 400,
];
今回の場合は、「タイトル」、「カテゴリー」、「記事内容」を連想配列にします。
次のようにコードを書いてください。
<?php
$title = htmlentities($_POST['title'], ENT_QUOTES);
$category = htmlentities($_POST['category'], ENT_QUOTES);
$comment = htmlentities($_POST['comment'], ENT_QUOTES);
if( empty($title) || empty($comment) ){
header('Location: index.html');
exit;
}
$title = str_replace("楽しい", "面白い", $title);
#全角カナから半角カナに変える
$title = mb_convert_kana($title, "k");
$blog_content = [
"title" => $title,
"category" => $category,
"comment" => $comment,
];
var_export($blog_content);
?>
localhost:8000を開いて、入力フォームに
タイトル「楽しい!ブログ作成」
カテゴリーを「ニュース」
記事内容を「ブログ作成を始めましょう!」
と入力して送信を押してください。
array ( 'title' => '面白い!ブログ作成!', 'category' => 'ニュース', 'comment' => 'ブログ作成を始めましょう!', )
こんな結果がでればOKです。
連想配列をJSON形式に変換して保存します。PHPは便利ですね。たったひとつの関数でJSON形式に変換できます。
「 json_encode」という関数を使って変換します。
<?php
$title = htmlentities($_POST['title'], ENT_QUOTES);
$category = htmlentities($_POST['category'], ENT_QUOTES);
$comment = htmlentities($_POST['comment'], ENT_QUOTES);
if( empty($title) || empty($comment) ){
header('Location: index.html');
exit;
}
$title = str_replace("楽しい", "面白い", $title);
#全角カナから半角カナに変える
$title = mb_convert_kana($title, "k");
$blog_content = [
"title" => $title,
"category" => $category,
"comment" => $comment,
];
var_export($blog_content);
$json_blog_content = json_encode($blog_content);
var_export($json_blog_content);
?>
localhost:8000を開いて、入力フォームに
タイトル「楽しい!ブログ作成」
カテゴリーを「ニュース」
記事内容を「ブログ作成を始めましょう!」
と入力して送信を押してください。
'{"title":"\\u9762\\u767d\\u3044\\uff01\\uff8c\\uff9e\\uff9b \\uff78\\uff9e\\u4f5c\\u6210\\uff01","category":"\\u30cb\\u30e5\\u30fc \\u30b9","comment":"\\u30d6\\u30ed\\u30b0\\u4f5c\\u6210\\u3092\\u59cb \\u3081\\u307e\\u3057\\u3087\\u3046\\uff01"}'
このような結果になったと思います。日本語は自動的にUnicode文字に変換されます。
でも日本語で確認したいですね。
そういった場合は、マニュアルに書いていますが、
オプションに「JSON_UNESCAPED_UNICODE」を指定するとOKです。
次のようにコードを書き換えてください。
<?php
$title = htmlentities($_POST['title'], ENT_QUOTES);
$category = htmlentities($_POST['category'], ENT_QUOTES);
$comment = htmlentities($_POST['comment'], ENT_QUOTES);
if( empty($title) || empty($comment) ){
header('Location: index.html');
exit;
}
$title = str_replace("楽しい", "面白い", $title);
#全角カナから半角カナに変える
$title = mb_convert_kana($title, "k");
$blog_content = [
"title" => $title,
"category" => $category,
"comment" => $comment,
];
var_export($blog_content);
$json_blog_content = json_encode($blog_content, JSON_UNESCAPED_UNICODE);
var_export($json_blog_content);
?>
localhost:8000開いて先ほどと同じ内容を投稿してみてください。
{"title":"面白い!ブログ作成","category":"ニュース", "comment":"ブログ作成を始めましょう!"}
日本語になりましたね。このまま日本語で保存します。
「blog.json」という名前のJSONファイルを作成します。ターミナルを開いて次のコマンドを実行して下さい。
cd /Users/<自分のユーザー名>/Documents/blog
touch blog.json
PHPは、ファイル保存も1つの関数でできます。
file_put_contents(保存ファイル名、保存するデータ)
PHP: file_put_contents – Manual
<?php
$title = htmlentities($_POST['title'], ENT_QUOTES);
$category = htmlentities($_POST['category'], ENT_QUOTES);
$comment = htmlentities($_POST['comment'], ENT_QUOTES);
if( empty($title) || empty($comment) ){
header('Location: index.html');
exit;
}
$title = str_replace("楽しい", "面白い", $title);
#全角カナから半角カナに変える
$title = mb_convert_kana($title, "k");
$blog_content = [
"title" => $title,
"category" => $category,
"comment" => $comment,
];
$json_blog_content = json_encode($blog_content, JSON_UNESCAPED_UNICODE);
$file = "blog.json";
file_put_contents($file, $json_blog_content);
?>
これで投稿データが、JSONに保存されました。
「blog.json」の中を確認してみます。ターミナルを開いてコマンド実行してみてください。
cd /Users/<自分のユーザー名>/Documents/blog
cat blog.json
{"title":"面白い!ブログ作成","category":"ニュース", "comment":"ブログ作成を始めましょう!"}
投稿データが保存されました。
今回は以上です。
本格的にPHP学びたいという場合は、スクール受講おすすめします。今回の内容だとはじめてのプログラミングコース とかです。
今回は、JSONを中心にデータ保存方法を解説しました。
複雑そうと思っていたけど、PHPの強力な関数のおかげで、簡単にできました。
JSONは、よくAPIの出力結果で使います。構造的に記述できるので、データベースの内容を出力してJSON形式で受け渡すとかよくやってます。
次回は、JSONファイルからの読み込みを解説します。
最後までお読みいただき、ありがとうございました!
Photo by Banner vector created by vectorjuice – www.freepik.com