PHPでフォームの入力内容をデータベースに登録する方法
カテゴリ:WEB制作
WordPressなどでサイトの構築をしていると商品情報やデータの集計などをフォームから行ってデータベースに登録したいといったことが稀に発生します。
そこで今回は「フォームの入力内容をデータベースに登録する方法」を紹介します。
目次
入力用のフォーム
<form action="" method="post"> <table> <tbody> <tr> <th>商品名</th> <td><input type="text" name="product_name" placeholder="商品名を入力"></td> </tr> <tr> <th>ディスプレイサイズ</th> <td><input type="text" name="display_size" placeholder="ディスプレイサイズを入力"></td> </tr> <tr> <th>CPU</th> <td><input type="text" name="cpu" placeholder="CPUを入力"></td> </tr> <tr> <th>バッテリー</th> <td><input type="text" name="bat" placeholder="バッテリーを入力"></td> </tr> </tbody> </table> <button type="submit">データベースに登録</button> </form>
※WordPressを使用している場合はpage-○○○.phpなどのテンプレートなどに直書きしてください。
PHP側の処理
入力フォームのあるPHPファイルに以下を記入します。
<?php // POSTリクエストが送信されたかを確認 if ($_SERVER["REQUEST_METHOD"] == "POST") { // データベース接続情報を設定 $servername = "データベースサーバー名"; $username = "データベースユーザー名"; $password = "データベースパスワード"; $dbname = "データベース名"; // MySQL接続の作成 $conn = new mysqli($servername, $username, $password, $dbname); // 接続確認 if ($conn->connect_error) { // 接続に失敗した場合の処理 die("接続失敗: " . $conn->connect_error); } // テーブルが存在するかを確認し、存在しない場合は作成する $table_check_query = "SHOW TABLES LIKE 'products'"; // テーブルの存在を確認するSQLクエリ $result = $conn->query($table_check_query); if ($result->num_rows == 0) { // テーブルが存在しない場合、テーブルを作成するSQLクエリを定義 $create_table_query = "CREATE TABLE products ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(255) NOT NULL, display_size VARCHAR(255) NOT NULL, cpu VARCHAR(255) NOT NULL, bat VARCHAR(255) NOT NULL )"; // テーブル作成クエリを実行 if ($conn->query($create_table_query) === TRUE) { // テーブル作成に成功した場合のメッセージ echo "テーブル 'products' が正常に作成されました。"; } else { // テーブル作成に失敗した場合のエラーメッセージ echo "テーブル作成エラー: " . $conn->error; } } // フォームから送信されたデータを取得 $product_name = $_POST["product_name"]; // 商品名 $display_size = $_POST["display_size"]; // ディスプレイサイズ $cpu = $_POST["cpu"]; // CPU $bat = $_POST["bat"]; // バッテリー // データベースにデータを挿入するためのSQLクエリを作成 $sql = "INSERT INTO products (product_name, display_size, cpu, bat) VALUES ('$product_name', '$display_size', '$cpu', '$bat')"; // クエリを実行してデータを挿入 if ($conn->query($sql) === TRUE) { // データ挿入に成功した場合のメッセージ echo "新しいレコードが正常に作成されました"; } else { // データ挿入に失敗した場合のエラーメッセージ echo "エラー: " . $sql . "<br>" . $conn->error; } // データベース接続を閉じる $conn->close(); } ?>
※WordPressを使用している場合はpage-○○○.phpなどのテンプレートなどに直書きしてください。
コードの解説
HTMLソースに関しては単純なものなので割愛します。
データベースへの接続
まずは以下でデータベースの接続情報を設定し、『mysqli()』でデータベースに接続します。
$servername = "データベースサーバー名"; $username = "データベースユーザー名"; $password = "データベースパスワード"; $dbname = "データベース名"; $conn = new mysqli($servername, $username, $password, $dbname);
接続の確認
『$conn->connect_error』プロパティを使用すると接続エラーが起きた際にエラーコードを返してくれます。
if ($conn->connect_error) { // 接続に失敗した場合の処理 die("接続失敗: " . $conn->connect_error); }
データベース内のテーブル確認
『SHOW TABLES LIKE ‘products’』でデータベースからテーブルを取得し、『$conn->query()』でテーブルがない場合は『0』が返ってきます。
$table_check_query = "SHOW TABLES LIKE 'products'"; $result = $conn->query($table_check_query);
テーブルがない場合は作成する
『if ($result->num_rows == 0) {}』でファイルがない場合は『CREATE TABLE products ()』でテーブルを作成します。
テーブル作成時の型などは説明を割愛します。
『if ($conn->query($create_table_query) === TRUE) {}』で正常にテーブルが作成できた場合とできなかった場合で処理を分けています。
if ($result->num_rows == 0) { $create_table_query = "CREATE TABLE products ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(255) NOT NULL, display_size VARCHAR(255) NOT NULL, cpu VARCHAR(255) NOT NULL, bat VARCHAR(255) NOT NULL )"; if ($conn->query($create_table_query) === TRUE) { echo "テーブル 'products' が正常に作成されました。"; } else { echo "テーブル作成エラー: " . $conn->error; } }
入力データを取得・データベースへ挿入
『$_POST[“product_name”]』で入力フォームのnameの値で入力内容を取得します。
『INSERT INTO products (product_name, display_size, cpu, bat)』で登録したい値をカンマ区切りで並べます。
その下の『VALUES (‘$product_name’, ‘$display_size’, ‘$cpu’, ‘$bat’)』で入力フォームの値をデータベースへと挿入しています。
『if ($conn->query($sql) === TRUE) {}』でレコードが正常に登録されたか確認をしています。
『$conn->close();』でデータベースとの接続を閉じます。
$product_name = $_POST["product_name"]; // 商品名 $display_size = $_POST["display_size"]; // ディスプレイサイズ $cpu = $_POST["cpu"]; // CPU $bat = $_POST["bat"]; // バッテリー $sql = "INSERT INTO products (product_name, display_size, cpu, bat) VALUES ('$product_name', '$display_size', '$cpu', '$bat')"; if ($conn->query($sql) === TRUE) { echo "新しいレコードが正常に作成されました"; } else { echo "エラー: " . $sql . "<br>" . $conn->error; } $conn->close();
まとめ
ウェブ制作を行っているとデータベースへのデータの登録を行うケースはよく遭遇します。
また、応用でさまざまなケースへも対応ができるため覚えておいて損はない機能です。