---
# System prepended metadata

title: PHPコードexample

---

# コード例

## ins_item.php
```
<?php
$user = 'root'; // データベースユーザ
$password = 'root';
$dbName = 'festival'; // 利用するデータベース
// MySQLサーバ
$host = 'localhost';
$port = 3306; // ポート番号を指定
// MySQLのDSN文字列
$dsn = "mysql:host={$host};port={$port};dbname={$dbName};charset=utf8";
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>商品登録</title>
</head>
<body>
    <div>
        <h2>商品登録</h2>
        <?php
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            // POST データの受け取り
            $itemName = $_POST['itemName'];
            $itemPrice = $_POST['itemPrice'];

            try {
                // MySQLデータベースに接続する
                $pdo = new PDO($dsn, $user, $password);
                // プリペアドステートメントのエミュレーションを無効にする
                $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                // 例外がスローされる設定にする
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                // 商品をデータベースに挿入
                $sql = "INSERT INTO item (i_name, i_price) VALUES (:itemName, :itemPrice)";
                $stm = $pdo->prepare($sql);
                $stm->bindParam(':itemName', $itemName, PDO::PARAM_STR);
                $stm->bindParam(':itemPrice', $itemPrice, PDO::PARAM_INT);
                $stm->execute();

                echo "商品が正常に登録されました。";
            } catch (Exception $e) {
                echo '<span class="error">エラーがありました。</span><br>';
                echo $e->getMessage();
            } finally {
                // 例外に関係なく実行される処理
                $pdo = null; // db close
            }
        }
        ?>
        <br>
        <a href="dsp_item.php">商品一覧に戻る</a>
    </div>
</body>
</html>

?>
```

## dsp_item.php
```
<?php
$user = 'root';// データベースユーザ
$password = 'root';
$dbName = 'festival';// 利用するデータベース
// MySQLサーバ
$host = 'localhost:3306';
// MySQLのDSN文字列
$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8";
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>商品一覧</title>
    <!-- Bootstrapのスタイルシートを読み込む -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
</head>
<body>
<div class="container mt-4">
    <h2>商品一覧</h2>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th scope="col">商品ID</th>
                <th scope="col">商品名</th>
                <th scope="col">定価</th>
            </tr>
        </thead>
        <tbody>
            <?php
            //MySQLデータベースに接続する
            try {
                $pdo = new PDO($dsn, $user, $password);
                $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = "SELECT * FROM item";
                $stm = $pdo->prepare($sql);
                $stm->execute();
                // 結果の取得（連想配列で受け取る）
                $result = $stm->fetchAll(PDO::FETCH_ASSOC);
                
                // 値を取り出して行に表示する
                foreach ($result as $row){
                    // １行ずつテーブルに入れる
                    echo "<tr>";
                    echo "<td>", $row['i_id'], "</td>";
                    echo "<td>", $row['i_name'], "</td>";
                    echo "<td>", $row['i_price'], "</td>";
                    echo "</tr>";
                }
            } catch (Exception $e) {
                echo '<span class="error">エラーがありました。</span><br>';
                echo $e->getMessage();
                exit();
            } finally {
                //例外に関係なく実行される処理
                $pdo = null;//db close
            }
            ?>
        </tbody>
    </table>
</div>
<br>
<a href="ins_sales.php" class="btn btn-primary">売上登録</a>
<a href="dsp_sales.php" class="btn btn-primary">売上一覧</a>
<a href="ins_item.html" class="btn btn-primary">商品登録</a>

<!-- BootstrapのJavaScriptを読み込む -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>


```

## ins_item.html
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
<title>商品登録</title>
</head>
<body>
	<div class="container col-3 justify-content-center mt-5">
	<h1 class="m-3 text-center">商品登録画面</h1>
	<hr>
	<form action="../php/ins_item.php" method="post">
		<div class="p-2 mb-3">
		<label for="itemName" class="form-label">商品名：</label>
		<input type = "text" class="form-control" name="itemName" required>
		</div>
		
		<div class="p-2 mb-3">
		<label for="itemPrice" class="form-label">定価：</label>
		<input type = "number" class="form-control" name="itemPrice" min="0" step="5" required>
		</div>
		<div class="d-flex justify-center col-12">
			<div class="row">
				<div class="col-auto">
					<input type = "submit" class="btn btn-primary" value="登録する">
				</div>
				<div class="col-auto">
					<a href = "../php/dsp_item.php"class="btn btn-primary">商品一覧へ</a>
				</div>
			</div>
		</div>
	</form>
	</div>
	
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
```

## dsp_sales.php
```
<!-- DB -->
<?php
$user = 'root'; // データベースユーザ
$password = 'root';
$dbName = 'festival'; // 利用するデータベース
// MySQLサーバ
$host = 'localhost:3306';
// MySQLのDSN文字列
$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8";
?>

<!-- HTML -->
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>売上一覧</title>
</head>
<body>
    <div>
        <h2>売上一覧</h2>
        <table border="1">
            <tr>
                <th>売上ID</th>
                <th>日時</th>
                <th>商品名</th>
                <th>数量</th>
                <th>単価</th>
            </tr>
            <?php
            try {
                $pdo = new PDO($dsn, $user, $password);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                $sql = "SELECT sales.s_id, s_date, i_name, num, price
                        FROM sales
                        JOIN detail ON sales.s_id = detail.s_id
                        JOIN item ON detail.i_id = item.i_id";
                $stm = $pdo->prepare($sql);
                $stm->execute();
                $salesData = $stm->fetchAll(PDO::FETCH_ASSOC);

                foreach ($salesData as $data) {
                    echo "<tr>";
                    echo "<td>{$data['s_id']}</td>";
                    echo "<td>{$data['s_date']}</td>";
                    echo "<td>{$data['i_name']}</td>";
                    echo "<td>{$data['num']}</td>";
                    echo "<td>{$data['price']}</td>";
                    echo "</tr>";
                }
            } catch (Exception $e) {
                echo '<span class="error">エラーがありました。</span><br>';
                echo $e->getMessage();
            } finally {
                $pdo = null;
            }
            ?>
        </table>
        <br>
        <a href="dsp_item.php">商品一覧に戻る</a>
        <a href="ins_sales.php">売上登録</a>
        <a href="ins_item.html">商品登録</a>
    </div>
</body>
</html>


```
## ins_sales.php

```
<!-- DB -->
<?php
$user = 'root'; // データベースユーザ
$password = 'root';
$dbName = 'festival'; // 利用するデータベース
// MySQLサーバ
$host = 'localhost:3306';
// MySQLのDSN文字列
$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8";
?>


<!-- HTML  -->
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>売上登録</title>
    <!-- Add Bootstrap CDN -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbs5v0AB0/pG4jgW0UcPKJcGgSFnFuAg5qEXvRA+eJqFb4lXnft9Icmf1vEdwDw" crossorigin="anonymous">
    <link rel="stylesheet" href="../css/ins_sales.css">
</head>
<body>
    <div class="container col-12">
        <h2 class="text-center mb-4">売上登録</h2>
        <form action="../php/add_sales.php" method="post">
            <table class="table">
                <thead>
                    <tr>
                        <th>商品名</th>
                        <th>数量</th>
                        <th>単価</th>
                    </tr>
                </thead>
                <tbody>
                    <?php for ($i = 1; $i <= 4; $i++): ?>
                        <tr>
                            <td>
                                <select class="form-select" name="salesData[<?= $i ?>][itemName]">
                                    <option value="" selected disabled hidden>選択してください</option>
                                    <?php
                                    // 商品一覧を取得
                                    try {
                                        $pdo = new PDO($dsn, $user, $password);
                                        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                        $sql = "SELECT i_name FROM item";
                                        $stm = $pdo->prepare($sql);
                                        $stm->execute();
                                        $items = $stm->fetchAll(PDO::FETCH_ASSOC);
                                        foreach ($items as $item) {
                                            echo "<option value=\"{$item['i_name']}\">{$item['i_name']}</option>";
                                        }
                                    } catch (Exception $e) {
                                        echo '<option value="">エラーが発生しました</option>';
                                    } finally {
                                        $pdo = null;
                                    }
                                    ?>
                                </select>
                            </td>
                            <td><input type="number" class="form-control" name="salesData[<?= $i ?>][quantity]" min="1" required></td>
                            <td><input type="number" class="form-control" name="salesData[<?= $i ?>][price]" min="0" required></td>
                        </tr>
                    <?php endfor; ?>
                </tbody>
            </table>
            <div class="button-group">
                <button type="submit" class="btn btn-primary">登録する</button>
            </div>
        </form>
        <div class="button-group">
            	<a href="dsp_sales.php" class="btn btn-secondary">売上一覧に戻る</a>
            	<a href="dsp_item.php" class="btn btn-secondary">商品一覧</a>
            	<a href="../html/ins_item.html" class="btn btn-secondary">商品登録</a>
        </div>
    </div>

    <!-- Add Bootstrap JS and Popper.js CDN -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-lPjxcmJVA2AaTaYNYErs77sI9vM/Ld5IdNUFZMlYUAfx2ofakx8p9eP2LZt/Z9S" crossorigin="anonymous"></script>
</body>
</html>
```

## add_sales.php
```
<?php
$user = 'root'; // データベースユーザ
$password = 'root';
$dbName = 'festival'; // 利用するデータベース
// MySQLサーバ
$host = 'localhost:3306';
// MySQLのDSN文字列
$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8";
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>売上登録</title>
</head>
<body>
    <div>
        <h2>売上登録</h2>
        <?php
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $salesData = $_POST['salesData'];

            try {
                // MySQLデータベースに接続する
                $pdo = new PDO($dsn, $user, $password);
                // プリペアドステートメントのエミュレーションを無効にする
                $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                // 例外がスローされる設定にする
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                // トランザクションの開始
                $pdo->beginTransaction();

                // salesテーブルに新しい売上データを挿入
                $sql = "INSERT INTO sales (s_date) VALUES (NOW())";
                $stm = $pdo->prepare($sql);
                $stm->execute();

                // 直前のINSERTで生成された売上IDを取得
                $sale_id = $pdo->lastInsertId();

                // 売上明細を登録
                $sql = "INSERT INTO detail (s_id, i_id, num, price) VALUES (:s_id, :i_id, :num, :price)";
                $stm = $pdo->prepare($sql);

                foreach ($salesData as $data) {
                    $itemName = $data['itemName'];
                    $quantity = $data['quantity'];
                    $price = $data['price'];

                    // 商品名から商品IDを取得
                    $sqlItem = "SELECT i_id FROM item WHERE i_name = :itemName";
                    $stmItem = $pdo->prepare($sqlItem);
                    $stmItem->bindParam(':itemName', $itemName, PDO::PARAM_STR);
                    $stmItem->execute();
                    $item = $stmItem->fetch(PDO::FETCH_ASSOC);

                    if ($item) {
                        $item_id = $item['i_id'];

                        // 売上明細を登録
                        $stm->bindParam(':s_id', $sale_id, PDO::PARAM_INT);
                        $stm->bindParam(':i_id', $item_id, PDO::PARAM_INT);
                        $stm->bindParam(':num', $quantity, PDO::PARAM_INT);
                        $stm->bindParam(':price', $price, PDO::PARAM_INT);
                        $stm->execute();
                    }
                }

                 // トランザクションのコミット
        $pdo->commit();

        echo "売上が正常に登録されました。最後に挿入された行のIDは {$sale_id} です。";
    } catch (Exception $e) {
        // トランザクションのロールバック
        $pdo->rollBack();

        echo '<span class="error">エラーがありました。</span><br>';
        echo $e->getMessage();
    } finally {
        // 例外に関係なく実行される処理
        $pdo = null; // db close
    }
}
?>
    </div>
</body>
</html>
```

## ins_sales.css
```
@charset "UTF-8";

body {
            font-family: 'Arial', sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 0;
        }

        .container {
            max-width: 1000px;
            margin: 50px auto;
            background-color: #ffffff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        h2 {
            text-align: center;
            color: #333333;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }

        table, th, td {
            border: 1px solid #dddddd;
        }

        th, td {
            padding: 12px;
            text-align: left;
        }

        select, input {
            width: 100%;
            padding: 8px;
            margin: 4px 0;
            display: inline-block;
            border: 1px solid #ccc;
            box-sizing: border-box;
            border-radius: 4px;
        }

        button {
            background-color: #007bff;
            color: #ffffff;
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        button:hover {
            background-color: #0056b3;
        }

        .button-group {
            text-align: center;
            margin-top: 20px;
        }

        a {
            text-decoration: none;
            color: #333333;
        }
```

## ins_item.css

```
body {
    font-family: 'Arial', sans-serif;
    background-color: #f0f0f0;
    margin: 0;
    padding: 0;
}

.container {
    max-width: 800px;
    margin: 50px auto;
    background-color: #ffffff;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

h2 {
    text-align: center;
    color: #333333;
}

table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 20px;
}

table, th, td {
    border: 1px solid #dddddd;
}

th, td {
    padding: 12px;
    text-align: left;
}

select, input {
    width: calc(100% - 16px); /* 100%幅から左右のパディングを引いたサイズに設定 */
    padding: 8px;
    margin: 4px 0;
    display: inline-block;
    border: 1px solid #ccc;
    box-sizing: border-box;
    border-radius: 4px;
}
body {
    background-color: #f8f9fa;
}

.container {
    margin-top: 50px;
}

h1 {
    color: #007bff;
}

form {
    margin-top: 20px;
}

label {
    font-weight: bold;
}

.form-control {
    width: 100%;
}

.btn {
    margin-top: 10px;
}

.btn-primary {
    background-color: #007bff;
    color: #fff;
    border: none;
}

.btn-primary:hover {
    background-color: #0056b3;
}

/* Optional: Add styling for responsiveness */
@media (max-width: 576px) {
    .container {
        max-width: 100%;
    }
}
```