【初学者からの脱出】PHPでデータベースに入力フォーム内容を登録する

今この記事を見ている方は、HTMLとPHPを使用してフォームを作成し終えているでしょう。

結論として、この記事では、

フォーム内容をデータベースに登録していきます。

ここができれば、webアプリ作成の基本の「き」を覚えたも同然です。

一緒に身につけていきましょう。

ちなみに、【初学者が楽しく作る】PHPのフォーム確認画面を簡単に作成しようでPHPのフォーム作成を紹介しています。

興味のある方は覗いてみてください。

今日の記事は、

  • ユーザーから入力された値をDBに保存したい
  • PHPとMYSQLの接続を復習したい
  • これからPHPでwebアプリを作成していく予定

こんな方におすすめの記事です。

それでは、やっていきましょう。

フォーム内容を登録しよう

登録できるようになるまでを3ステップでみていきます。

1. HTMLでフォームを用意する

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="form.php" method="POST">
    <label for="name">名前を入力してください</label>
    <p>
      <input type="text" name="name" id="name">
    </p>
    <label for="name">自己紹介を入力してください</label>
    <p>
      <textarea name="profile" id="profile" cols="30" rows="10"></textarea>
    </p>
    <button type="submit">登録する</button>
  </form>
</body>
</html>

簡単にフォームを用意します。

2. データベースを用意する

> create database profile;
> use profile;
> create table profiles (id int primary key auto_increment,
                         name text,
                         profile text
);

MySQLサーバーにアクセスして、上記コマンド入力してください。

詳しくは、【webアプリ初学者必見】MYSQLでデータベースを作成するをご参考ください。

3. データベースに登録する

ここが今日の本題です。

<?php
  try {
    $db = new PDO('mysql:dbname=profile;host=localhost;charset=utf8;unix_socket=/tmp/mysql.sock', 'root', '');
    $statement = $db->prepare('insert into profiles set name=?, profile=?');
    $statement->bindParam(1, $_POST['name']);
    $statement->bindParam(2, $_POST['profile']);
    $statement->execute();
    echo 'メッセージが登録されました';
  } catch(PDOException $e) {
    echo $e->getMessage();
  }
?>

ちょっと複雑なので以下で解説します。

prepareとbindParamを解説

prepareメソッドについて

$db->prepare('insert into profiles set name=?, profile=?');

【PHP初学者必須】PHPとMySQLを連携するの記事で紹介していますが、SQLを実行すると記述が冗長になります。

prepareメソッドは、ユーザーから入力がある値に「?」を使用するだけなので記述がシンプルになります。

記述をシンプルにすることは、可読性が高まるので意識できるといいですね。

bindParamメソッドについて

$statement->bindParam(1, $_POST['name']);

引数が2つあるので、少し難しく感じるでしょうか。

結論は以下です。

  • 第一引数は、prepareメソッドの引数にある「?」が何番目のものか
  • 第二引数は、ユーザーが送ってきた登録したいパラーメータ

bindParamメソッドは、prepareメソッドとセットにして使用するメソッドです。

とても便利ですし、わかりやすいです。

第二引数に関しては、今回はHTTPリクエストがPOSTになっているので、$_POSTを使用しています。

その他のHTTPリクエストの場合は、PHPリファレンスを参考にすると良いでしょう。

まとめ

$db->prepare('insert into テーブル名 set カラム名=?, カラム名=?, .....');
  • ユーザーが入力してくる値の部分は「?」を使用する
$statement->bindParam(何番目の「?」か, ユーザーが送ってきた登録したいパラメータ);
  • $_GET、$_POST、$_REQUESTを使用することが多い
  • 記述がシンプルにできるので、可読性が上がる

今日は、webアプリに必須なユーザー起点のDB登録を学習しました。

ユーザーがいてこそのwebアプリです。

ここでしっかり学習していきましょう。

参考:

PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門