WEB制作、マーケティングに関する情報をお届けします。ホームページ制作会社、テラのブログ

PHPでフォームの入力内容をデータベースに登録する方法

タグ:

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();

まとめ

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

テラ合同会社(東京都)

テラは2014年に東京都でスタートアップしたホームページ制作会社です。ホームページ制作以外にも広告運用、マーケティング、ブランディング、印刷物など幅広い領域をサポートしています。
コーポレートサイトはこちらをご覧ください。