PHP初心者向けのTODOアプリの作り方①MySQLに接続する設定
1616 回閲覧されました
みなさんこんにちは、jonioです。
MAMPのMySQLを使ったPHPのTODOアプリの作り方を知ったのですが説明を追加してアウトプットの記事を残します。
これからPHPの学習をしたい人も参考になると思います。
勉強した内容を他の場面でも使いたいので忘れないための自分へのメモとして作り方の解説を書きます。
目次
開発環境とパソコン
私はMAMPを使っていますが他の環境がある方はそれでやって問題ないです。
パソコンはMacを使っています。
今回のアプリに必要なファイル
todoフォルダの中に下記の画像のファイルを作成します。
ログイン画面や編集画面で画像を使うのですが画像に関しては素材サイトで取ってください。
今回必要なファイルとフォルダは下記になります。
- create.php
- edit.php
- edit_done.php
- delete.php
- cssフォルダ
- imgフォルダ
- login.php
- db_connect.php
- main.php
このファイルとフォルダを使って今回のアプリを作成します。
MySQLに接続してテーブルに情報の追加
アプリを作るにあたり自分が登録するTODOを保存する所がネット上に必要になります。
それがデータベースです。
本番だとサーバー用のデータベースを使いますが今回は練習用なのでMAMPのMySQLにターミナルから接続してテーブルに情報を追加します。
接続方法が分からない方は下記の記事で解説していますのでそれを見て下さい。
ターミナルでMySQLに接続したら下記のSQLを入力します。
SQLの簡単な説明をします。
SQLの説明
1行目の「DROP DATABASE IF EXISTS todo;」は「todoテーブルが既に存在していたら消す」という意味です。
「CREATE DATABASE todo CHARACTER SET utf8;」は「todoテーブルの文字コードをutf8で作る」という意味です。
文字コードをutf8にしないとテーブルで表示される文字が文字化けします。
「USE todo;」は「todoテーブルを使う」という意味です。
2行目の「id int」は「idカラムの値をint型」という意味で「NOT NULL」は「必ず値が入る」という意味で「AUTO_INCREMENT」は「レコードを追加する度に自動的に値が1ずつ増える」という意味で「PRIMARY KEY」は「同じ値は許可しない」という意味で「name varchar(16)」は「nameカラムは16字以下の文字が入る」という意味です。
3行目の「time TIMESTAMP」は「日時を設定する」という意味です。
4行目は「nameカラムに田中太郎を入れてpasswordカラムにtaroを入れる」という意味です。
そしてターミナルで「show databases;」と入力するとデータベースの一覧が表示されて「todo」があるのでそれを使うためにターミナルで「use todo;」と入力するとtodoデータベースを使う状態になります。
テーブルの中身が入っているかの確認
ここまでができたらpostsテーブルとusersテーブルの中身 を見るために下記のSQLをターミナルで入力します。
そうするとターミナルで↓の表示がされるはずです。
上記の赤枠が表示されれば上手くいってます。
phpのファイルからデータベースに接続する為の設定
データベースに接続してpostsテーブルとusersテーブルのカラムの中に何が入っているかをターミナルで見ましたがこれをパソコンの画面から見ることができるようにします。
その為にはphpのファイルからデータベースに接続できるようにすればいいです。
まず大元のphpのファイルをデータベースに接続できるようにして他のphpのファイルは大元のファイルの情報を使うことができるようにします。
大元のファイルはdb_connect.phpですがそれに記述します。
データベースに接続するためのコードと説明
db_connect.phpのコードを↓にします。
このファイルはWEB上のページは必要ないのでHTMLを含んでいません。
データベースにファイルから接続するためのコードは↓です。
これはdb_connect.phpのコードの9行目になります。(「try」や「catch」などありますが後で説明します)
9行目の「new PDO(DSN,DB_USERNAME,DB_PASSWORD);」と3行目〜5行目が対応しているのですが対応は下記となります。
- 9行目のDB_USERNAME:3行目
- 9行目のDB_PASSWORD:4行目
- 9行目のDSN:5行目
3行目〜5行目を9行目のDB_USERNAME・DB_PASSWORD・DSNに代入しているのですが2行目〜5行目の説明をします。
2行目の「todo」はデータベース名です。
ターミナルでデータベースを作成した時に下記のSQL文を入力したはずです。
この時にtodoデータベースを作っています(上記のSQL文の1行目)がそれです。
3行目はユーザー名を「root」にして4行目はパスワードを「root」にしているということですがデフォルトだとrootになっています。
パスワードが分からない場合MAMP上で確認する方法は下記で説明します。(パスワードが分かっている場合はこの部分の説明は見なくていいです)
MAMP上でのパスワードの調べ方
MAMPを起動した状態で↓の赤枠をクリックします。
すると↓のページになりますがページの下の方にある赤枠をクリックします。
するとユーザー名(赤枠)とパスワード(青枠)が表示されますのでユーザー名とパスワードを確認してください。
コードの2行目・3行目・4行目ですが「todo」・「root」以外の部分はそのまま書いて大丈夫です。
5行目の「‘mysql:host=localhost;charset=utf8;dbname=’.DB_DATABASE」ですがこういう意味です。
- mysql:host=localhost:データベースはMySQLでlocalhostを使う
- charset=utf8:文字コードはutf8を使う、これで日本語の文字化けを防げる
- dbname=’.DB_DATABASE:コードの2行目にあるtodoデータベースを使う
5行目の「define(‘DSN’,‘mysql:host=localhost;charset=utf8;dbname=’.DB_DATABASE);」は「‘mysql:host=localhost;charset=utf8;dbname=’.DB_DATABASE」の内容をDSNに代入するという意味です。
これでデータベースにファイルから接続できますがプログラムを実行中に何らかの不具合が出た場合はアプリが止まってしまいこれはまずいので不具合が出た時の処理をしてアプリが止まらないようにします。(これを例外処理といいいます)
例外処理の書き方
例外が起きそうな部分を「try」と「catch」で挟み例外が起きた時の処理をcatchの後に書きます。
ざっくりコードにすると↓になります。
db_connect.phpのコードの説明に戻りますが例外処理は8行目〜14行目です。
7行目のdb_connect関数の中に入っていますが他のファイルで使うためです。
9行目はデータベースに接続するための記述です。
10行目はこれがあるとエラーが見やすくなるので書いていてこんなもんと思っていいです。
11行目で「return」を使っていますがこれは他のファイルで使うためです。
12行目の「PDOException $e」は例外処理のオプションでエラーに関する情報を取り出す為に書いています。
13行目の「$e -> getMessage()」はエラーの内容を生成するための記述です。
14行目は例外の処理を終了するための記述です。
これでファイルからデータベースに接続するための設定ができました。
今のままではデータベースの内容をページに表示することはまだできませんが今回はデータベースに接続する為の設定をしたと思って下さい。
次の実装内容
次はログインページ(login.php)の説明をします。