読者です 読者をやめる 読者になる 読者になる

フォームデータをデータベースに登録します

データベースの準備

MySQLにてデータベース名:mydb、テーブル:formを作成します。

 

formテーブルのカラムデータを作成

1 id int(11) AUTO_INCREMENT PRIMARYキー

2 name VERCHAR(20)

3 email VERCHAR(50)

4 blood VERCHAR(10)

5 message VERCHAR(400)

 

ここまで準備したら、実際にデータを登録するプログラムを作成します。

以下がそのソースファイルです。

 

ソースファイル

======================
フォームへの入力 input.php
======================

<!DOCTYPE HTML>
<html lang ="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム</title>
<style>
h1 {
  margin-left: 50px;
}
th {
  width: 200px;
  margin: 10px 0;
}
input#send {
  margin-left: 100px;
  margin-top: 30px;
}
</style>
</head>

<body>
<h1>ユーザー登録フォーム</h1>
<form action="confirm.php" method="post">
<table>
<tr><th>お名前</th>
<td><input type="text" name="name" size="20" maxlength="10" placeholder="山田太郎" required></td></tr>
<tr><th>メールアドレス</th><td><input type="email" name="email" size="50" maxlength="50" required></td></tr>
<tr><th>血液型</th>
<td>
<input type="radio" name="kata" value="O型" id="o" checked><label for="o">O型</label>
<input type="radio" name="kata" value="A型" id="a"><label for="a">A型</label>
<input type="radio" name="kata" value="B型" id="b"><label for="b">B型</label>
<input type="radio" name="kata" value="AB型" id="ab"><label for="ab">AB型</label>
</td></tr>
<tr><th>お問い合わせ</th><td><textarea name="message" cols="50" rows="4"></textarea></td></tr>
</table>
<input id="send" type="submit" value="送信する">
</form>

</body>
</html>

 

=======================
入力内容の確認 confirm.php
=======================

<?php
// セッションの開始
session_start();

$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
$blood = $_POST['kata'];
$message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');

// 入力値をセッション変数に格納
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['blood'] = $blood;
$_SESSION['message'] = $message;
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム(confirm)</title>
<style>
h1 {
  margin-left: 50px;
}
th {
  width: 200px;
  margin: 10px 0;
}
input#send {
  margin-left: 100px;
  margin-top: 30px;
}
</style>
</head>

<body>
<h1>ユーザー登録フォーム(confirm)</h1>
<form action="submit.php" method="post">
<table>
<tr><th>お名前:</th><td><?php echo $name; ?></td></tr>
<tr><th>メールアドレス:</th><td><?php echo $email; ?></td></tr>
<tr><th>血液型:</th><td><?php echo $blood; ?></td></tr>
<tr><th>お問い合わせ:</th><td><?php echo $message; ?></td></tr>
</table>
<input id="send" type="submit" value="登録">
</form>
</body>
</html>

 

===========================
データベースへの登録 submit.php
===========================

<?php

// セッションの開始
session_start();

$name = htmlspecialchars($_SESSION['name'], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($_SESSION['email'], ENT_QUOTES, 'UTF-8');
$blood = $_SESSION['blood'];
$message = htmlspecialchars($_SESSION['message'], ENT_QUOTES, 'UTF-8');

// 接続設定
$user = 'root';
$pass = '';

// データベースに接続
$dsn = 'mysql:host=localhost;dbname=mydb;charset=utf8';
$conn = new PDO($dsn, $user, $pass); //「$conn」は、任意のオブジェクト名

// データの追加
$sql = 'INSERT INTO form(name, email, blood, message) VALUES("'.$name.'","'.$email.'","'.$blood.'","'.$message.'")';
$stmt = $conn -> prepare($sql);
$stmt -> execute();
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム・登録ページ</title>
<style>
p {
  margin-left: 50px;
}
</style>
</head>

<body>
<p>ご登録ありがとうございました。</p>
<p><a href="input.php">入力画面に戻る</a></p>
</body>
</html>

 

実行画面

======================
フォームへの入力 input.php
======================

f:id:develog:20161221193502p:plain

 

=======================
入力内容の確認 confirm.php
======================= 

f:id:develog:20161221193508p:plain

 

===========================
データベースへの登録 submit.php
===========================

f:id:develog:20161221193512p:plain

データベースへの登録を確認

テーブルformの最後の行に、

id:18 name:山田太郎 email:taro@gmail.com blood:O型 message:はじめまして。よろしくおねがいします。

と登録されていることが確認できます。

f:id:develog:20161221193517p:plain

 

 

セッションとは?

サーバー側に一時的にデータを保存する仕組みのことです。

クッキーと似ていますが、クッキーはブラウザ側、セッションはサーバー側にデータを保存します。

 

PHP Data Object(PDO)とは?

MySQLPostgreSQLSQLiteなどのデータベースの違いを吸収して、共通の関数で複数のデータベースを操作することができます。