🕛 2021.1.22 23:04

誰でも苦労せずにPHPが使えるよ。第3回 JSONを簡易データーベースにするとたった2つの関数で完了!

前回の続きです。JSONを簡易データベースとして使用します。投稿データを連想配列から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です。

JOSNに保存

連想配列をJSON形式に変換して保存します。PHPは便利ですね。たったひとつの関数でJSON形式に変換できます。

PHP: json_encode – Manual

「 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

プロフィール

プログラマー歴20年の管理人がプログラミング、ブロックチェーンなどの話題に書いていきます。>>続く

目次Toggle Table of Content