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();
まとめ
ウェブ制作を行っているとデータベースへのデータの登録を行うケースはよく遭遇します。
また、応用でさまざまなケースへも対応ができるため覚えておいて損はない機能です。





