PHPのチュートリアルに最適!簡単なシステムを作って学習しよう!

PHPの機能を一通り学ぶにはどうすればいいかな。
PHPの入門に適したチュートリアルってどんなものかな。

こんにちは。HTMLやPHPの開発歴8年の著者が、PHP入門者のためのおすすめの学習方法とチュートリアルをご紹介します。

PHPを始めようと思っても、何から手を付ければいいのか分からないということはありませんか?PHPを学ぼうと思って、闇雲にネット情報を探してもなかなかうまくいきません。

では、どのようにすればPHPを効率よく学ぶことができるのでしょうか?それは、PHPの機能を一通り使ったシステムを作ることが一番適しています。

筆者の経験的には、OJTでPHPを学ぶことが一番直接的に身につく方法だと思います。OJTとは、On-the-Job Trainingの略で、実際に仕事をすることで学習する方法です。

ですが、これから学習を始めようとしている方が仕事の一環としてPHPを取り扱いながら学習するのも難しいと思います。そこで、この記事ではPHP入門者のチュートリアルとして適したシステムを提案してみましょう。

目次

PHP入門者に適したチュートリアルとは

PHPを効率よく学ぶには、PHPの一通りの機能を使ったシステムを作ることだと申しましたが、具体的にはどんな機能を使ったシステムがいいのでしょうか。PHPの習得に必要な知識を簡単に紹介し、そこからPHPのチュートリアルに適したシステムを考えていきたいと思います。

PHPの習得に必要な知識

PHPのプログラミングを習得するために必要な知識は、簡単には次の3つです。

  • 環境構築
  • PHP基本構文
  • データベース
  •  
    まず最初に必要な知識は環境構築で、サーバーを用意したりOSやソフトをインストールする作業です。PHPの環境構築にはXAMPPという便利なツールがありますので、後でご紹介します。

    次に必要な知識はPHP基本構文で、チュートリアルに適した基本構文を選んで学習することで、効率的にPHPを習得できるでしょう。今回はecho, if, foreachといった命令文や、変数・配列を使えるようなることを目標にしたいと思います。

    最後のデータベースです。これはPHPだけに限らず様々なプログラミング言語で必要となる知識で、データベースを自由自在に扱えるようになると高度なシステム設計が可能となります。

    入門者がPHPを学習するには

    ということで、PHP入門者に適切なチュートリアルとは、「環境構築」「PHP基本構文」「データベース」を一通り学べるシステムを作成することだと言えます。では早速、次の章でそのようなシステムを作成してみましょう!

    PHPを使って簡単なシステムを作成しよう

    PHPに必要な3つの知識、「環境構築」「PHP基本構文」「データベース」を使ったシステムとは、どのようなものが考えられるでしょうか。いくつか適したシステムはあると思いますが、今回はPHPで「メモ帳」機能を作成してみましょう。

    今から作成する「メモ帳」には次の機能を有することとします。

  • メモ一覧の表示
  • 新規メモの登録
  • メモの編集
  • メモの削除
  •  
    この機能を実装することで、echo, if, foreachといった命令文や、変数・配列が使えるようなります!

    PHPの環境構築について

    まずは、PHPの環境構築です。PHPには非常に便利な環境構築ツールとして、XAMPPというものがあります。

    XAMPPを使うと、Apache、PHP、MySQLといったPHPに必要な環境が非常に簡単に用意できます。次の記事を参考にして、XAMPPをインストールしてみましょう!

    これで、PHPを使う環境を構築できました。

    データベースでテーブルを作成しよう

    PHPでメモ帳機能を作成する前に、データベースにテーブルを作成しておく必要があります。データベースを作成する場合は、XAMPPをインストールしていればphpMyAdminというツールを使用することができます。

    phpMyAdminを使用するには、ブラウザからhttp://localhost/phpmyadmin/へ接続します。


    phpMyAdminの画面

    左ペインから新規作成ボタンをクリックして、php_toolsというデータベースを作成します。すると、テーブルの作成画面に移るので、memoというテーブルを以下の画像を参考に作成します。

    データベースの作成


    テーブルの作成


    テーブル項目(カラム)の作成


    IDはインデックスをPRIMARYにして、A_Iにチェックを入れます


    テーブル完成

    今作成したテーブルには、カラム名をTitleとContentsとして、メモのタイトル内容を格納する項目を作りました。PHPを使ってこの項目にデータを追加したり取り出したり、色々なことができるようになります。
    なお、phpMyAdminの詳細は、次の記事も参考にしてもらえればと思います。

    PHPプログラムを作成しよう

    さて、さっそくPHPでメモ帳機能を実装してみましょう!memo.phpを作成しして、次のようにメモ帳画面の骨子を作成しましょう。

    <html>
        <head>
            <title>memo</title>
            <!-- その他 head の内容は省略します -->
        </head>
        <body>
            <!-- メモの新規作成フォーム -->
            新規作成<br>
            <form action="memo.php" method="post">
                Title<br>
                <input type="text" name="title" size="20"></input><br>
                Contents<br>
                <textarea name="contents" style="width:300px; height:100px;"></textarea><br>
                <input type="submit" name="create" value="追加">
            </form>
        </body>
    </html>


    memo.php 新規作成フォームのみ作成

    メモの新規作成フォームだけ作りました。動きとしては、追加ボタンをクリックすると、TitleとContentsの入力値がmemo.php(自分自身)にpost送信されるようになっています。

    今はまだ簡単なコードですが、これからさらにPHPのコードを埋め込んでいくことで、メモ帳機能を実装していきます。まずは、追加ボタンがクリックされて情報がpost送信された後、TitleとContentsの内容がデータベースに登録されるようなPHPコードを追加してみましょう。

    一番上に、次のようにコードを追加します。

    <?php
        //まずはデータベースへ接続します
        $dsn = "mysql:dbname=php_tools;host=localhost;charset=utf8mb4";
        $username = "root";
        $password = "";
        $options = [];
        $pdo = new PDO($dsn, $username, $password, $options);
        //追加ボタンが押された時の処理を記述します。
        if (null !== @$_POST["create"]) { //追加ボタンが押され方どうかを確認
            if(@$_POST["title"] != "" OR @$_POST["contents"] != ""){ //メモが入力されているかを確認
                //メモの内容を追加するSQL文を作成し、executeで実行します。
                $stmt = $pdo->prepare("INSERT INTO memo(title,contents) VALUE (:title,:contents)"); //SQL文の骨子を準備
                $stmt->bindvalue(":title", @$_POST["title"]); //:titleをpost送信されたtitleの内容に置換
                $stmt->bindvalue(":contents", @$_POST["contents"]); //:contentsをpost送信されたcontentsの内容に置換
                $stmt->execute(); //SQL文を実行
            }
        }
    ?>
    <html>
        <head>
            <meta charset="utf-8">
            <title>memo</title>
            <!-- その他 head の内容は省略します -->
        </head>
        <body>
            <!-- メモの新規作成フォーム -->
            新規作成<br>
            <form action="memo.php" method="post">
                Title<br>
                <input type="text" name="title" size="20"></input><br>
                Contents<br>
                <textarea name="contents" style="width:300px; height:100px;"></textarea><br>
                <input type="submit" name="create" value="追加">
            </form>
        </body>
    </html>

    これで、メモの新規追加機能が実装されました。memo.phpの一番上の部分で、データベースの接続と追加登録処理を行なっています。

    このように、PHPではHTML文より前の段階で様々な処理を行うことがよくあります。データの取得などは先に済ましておき、後でそれを利用するという形です。

    実際にデータを登録して、phpMyAdminで確認すると、確かにデータが登録されていることがわかると思います。


    メモの登録


    phpMyAdminで登録を確認

    では、次に登録されたメモの一覧を表示する機能を実装しましょう。新規作成フォームの下に、次のようにコードを追加します。

    <?php
        //まずはデータベースへ接続します
        $dsn = "mysql:dbname=php_tools;host=localhost;charset=utf8mb4";
        $username = "root";
        $password = "";
        $options = [];
        $pdo = new PDO($dsn, $username, $password, $options);
        //追加ボタンが押された時の処理を記述します。
        if (null !== @$_POST["create"]) { //追加ボタンが押され方どうかを確認
            if(@$_POST["title"] != "" OR @$_POST["contents"] != ""){ //メモが入力されているかを確認
                //メモの内容を追加するSQL文を作成し、executeで実行します。
                $stmt = $pdo->prepare("INSERT INTO memo(title,contents) VALUE (:title,:contents)"); //SQL文の骨子を準備
                $stmt->bindvalue(":title", @$_POST["title"]); //:titleをpost送信されたtitleの内容に置換
                $stmt->bindvalue(":contents", @$_POST["contents"]); //:contentsをpost送信されたcontentsの内容に置換
                $stmt->execute(); //SQL文を実行
            }
        }
    ?>
    <html>
        <head>
            <meta charset="utf-8">
            <title>memo</title>
            <!-- その他 head の内容は省略します -->
        </head>
        <body>
            <!-- メモの新規作成フォーム -->
            新規作成<br>
            <form action="memo.php" method="post">
                Title<br>
                <input type="text" name="title" size="20"></input><br>
                Contents<br>
                <textarea name="contents" style="width:300px; height:100px;"></textarea><br>
                <input type="submit" name="create" value="追加">
            </form>
            <!-- 以下にメモ一覧を追加 -->
            メモ一覧
            <?php
                //memoテーブルからデータを取得
                $stmt = $pdo->query("SELECT * FROM memo");
                //foreachを使ってデータを1つずつ順番に処理していく
                foreach ($stmt as $row):
            ?>
                <form action="memo.php" method="post">
                    <input type="hidden" name="id" value="<?php echo $row[0]?>"></input>
                    Title<br>
                    <input type="text" name="title" size="20" value="<?php echo $row[1]?>"></input><br>
                    Contents<br>
                    <textarea name="contents" style="width:300px; height:100px;"><?php echo $row[2]?></textarea><br>
                    <input type="submit" name="update" value="変更">
                    <input type="submit" name="delete" value="削除">
                </form>
            <?php endforeach; ?>
        </body>
    </html>


    メモ一覧を追加

    このように、新規作成フォームの下にメモ一覧を追加しました。処理の概要としては、まず SELECT * FROM memo のSQL文を実行して、memoテーブルのデータを全て取得します。

    次に、foreach文を使用して先ほど取得したmemoテーブルのデータを1行ずつ処理します。そのデータを$rowという配列として扱います。

    $rowという配列には、memoテーブルのid、title、contentsの内容が順番に、row[0]、row[1]、row[2]に格納されています。そしてecho文を使って、各入力項目にid、title、contentsの内容を表示しています。

    そしてまた変更ボタンと削除ボタンを用意して、新規追加時と同じようにmemo.phpへメモの内容をpost送信できるようになっています。

    では最後に、メモの変更と削除機能を追加して完了です!

    <?php
        //まずはデータベースへ接続します
        $dsn = "mysql:dbname=php_tools;host=localhost;charset=utf8mb4";
        $username = "root";
        $password = "";
        $options = [];
        $pdo = new PDO($dsn, $username, $password, $options);
        //追加ボタンが押された時の処理を記述します。
        if (null !== @$_POST["create"]) { //追加ボタンが押され方どうかを確認
            if(@$_POST["title"] != "" OR @$_POST["contents"] != ""){ //メモが入力されているかを確認
                //メモの内容を追加するSQL文を作成し、executeで実行します。
                $stmt = $pdo->prepare("INSERT INTO memo(title,contents) VALUE (:title,:contents)"); //SQL文の骨子を準備
                $stmt->bindvalue(":title", @$_POST["title"]); //:titleをpost送信されたtitleの内容に置換
                $stmt->bindvalue(":contents", @$_POST["contents"]); //:contentsをpost送信されたcontentsの内容に置換
                $stmt->execute(); //SQL文を実行
            }
        }
        //変更ボタンが押された時の処理を記述します。
        if (null !== @$_POST["update"]) { //変更ボタンが押され方どうかを確認
            $stmt = $pdo->prepare("UPDATE memo SET title=:title, contents=:contents WHERE ID=:id");
            $stmt->bindvalue(":title", @$_POST["title"]);
            $stmt->bindvalue(":contents", @$_POST["contents"]);
            $stmt->bindvalue(":id", @$_POST["id"]);
            $stmt->execute();
        }
        //削除ボタンが押された時の処理を記述します。
        if (null !== @$_POST["delete"]) { //削除ボタンが押され方どうかを確認
            $stmt = $pdo->prepare("DELETE FROM memo WHERE ID=:id");
            $stmt->bindvalue(":id", @$_POST["id"]);
            $stmt->execute();
        }
    ?>
    <html>
        <head>
            <meta charset="utf-8">
            <title>memo</title>
            <!-- その他 head の内容は省略します -->
        </head>
        <body>
            <!-- メモの新規作成フォーム -->
            新規作成<br>
            <form action="memo.php" method="post">
                Title<br>
                <input type="text" name="title" size="20"></input><br>
                Contents<br>
                <textarea name="contents" style="width:300px; height:100px;"></textarea><br>
                <input type="submit" name="create" value="追加">
            </form>
            <!-- 以下にメモ一覧を追加 -->
            メモ一覧
            <?php
                //memoテーブルからデータを取得
                $stmt = $pdo->query("SELECT * FROM memo");
                //foreachを使ってデータを1つずつ順番に処理していく
                foreach ($stmt as $row):
            ?>
                <form action="memo.php" method="post">
                    <input type="hidden" name="id" value="<?php echo $row[0]?>"></input>
                    Title<br>
                    <input type="text" name="title" size="20" value="<?php echo $row[1]?>"></input><br>
                    Contents<br>
                    <textarea name="contents" style="width:300px; height:100px;"><?php echo $row[2]?></textarea><br>
                    <input type="submit" name="update" value="変更">
                    <input type="submit" name="delete" value="削除">
                </form>
            <?php endforeach; ?>
        </body>
    </html>

    新規追加と同じように、HTML文よりも前の段階で、post送信されたデータを使って変更処理や削除処理を行います。変更ボタンと削除ボタンのそれぞれでif文を使って条件分岐して、SQL文を実行しています。

    実際に動作を確認してみましょう。例えば、次のように変更するとphpMyAdminでもちゃんと変更されているのが確認できると思います。


    メモ内容をaaaからbbbに変更


    phpMyAdminで確認

    ちゃんと変更されていますね!是非、削除の動作も確認してみてください。

    少し長くなりましたが、以上でメモ帳機能の実装が完了しました!このチュートリアルで、実は最初に述べたPHPの基本構文であるecho, if, foreachといった命令文や、変数・配列が網羅されています。

    このように実際にPHPを使ってシステムを構築してみることで、その使い方をより深く理解することができたのではないでしょうか。また他の機能についてのアイデアも浮かんでくると思います。

    その他のチュートリアルサイトについて

    チュートリアルを一つやっただけでは、なかなかPHPのスキルが身につくものではありません。ですので、他のチュートリアルサイトなどを利用するのは大変有効です。

    しかし、本当にたくさんあってどれが適しているのか心配になるでしょう。そこで、こちらの記事にチュートリアルサイトについてまとまっていますので、これらを参考にしてさらに学習を進めていただければと思います。

    まとめ

    今回はPHPのチュートリアルということで、簡単にメモ帳機能を実装してみました。何でもそうだと思いますが、学習で大切なことは実際に手を動かしてみることだと思います。

    今回のこのチュートリアルについても、是非、実際に自分でコードを書いて実行してみてください。思わぬ落とし穴があったり、難しいと思っていたことが意外と簡単だったり、色々な経験が知識や技術に結びつきます。

    上記のチュートリアルサイトも参考にしていただいて、これからのPHPの学習が楽しく順調に進むことを願います!

    この記事を書いた人

    プログラム歴10年のシステムエンジニアです。
    経験のある言語はHTML,JavaScript,PHP,VB,VBAなど。
    WEB系の開発が得意です。

    目次