form.php
に入力した値をDBに保存するための準備
● 以前に作成した、form.php の $pageFlag === 2
セクションにDB接続及びDB保存処理を実装するための準備をする
※ フォーム入力なのでDB保存には prepare
, bind
, execute
を使う
しかし、 form.php
の入力項目は全て文字列なので execute(配列(全て文字列))
というように処理ができるので、bind
は不要になる。
● DB接続には以前に作成した db_connection.php を読み込ませるようにする
insert.php
ファイルを作成及び編集
- まずはテストしてみる
insert.php
<?php
// DB接続 PDO
require 'db_connection.php';
// 入力 DB保存 prepare, execute(配列(全て文字列))
$params = [
'id' => null,
'name' => 'test',
'email' => 'test@test.com',
'gender' => '1',
'age' => '3',
'contact' => 'testです',
'created_at' => null,
];
$count = 0;
$columns = '';
$values = '';
foreach (array_keys($params) as $key) {
if ($count++ > 0) {
$columns .= ',';
$values .= ',';
}
$columns .= $key;
$values .= ':' . $key;
}
// 入力なので insert文
$sql = 'insert into contacts (' . $columns . ')values(' . $values')';
var_dump($sql);
-
insert.php
にアクセスすると下記のようになる
接続成功string(133) "insert into contacts (id,name,email,url,gender,age,contact,created_at)values(:id,:name,:email,:url,:gender,:age,:contact,:created_at)"
DBに保存できるようにする
-
insert.php
を編集
insert.php
<?php
require 'db_connection.php';
$params = [
'id' => null,
'name' => 'test4',
'email' => 'test4@test.com',
'url' => 'http://test4.com',
'gender' => '1',
'age' => '4',
'contact' => 'test4です',
'created_at' => null,
];
$count = 0;
$columns = '';
$values = '';
foreach (array_keys($params) as $key) {
if ($count++ > 0) {
$columns .= ',';
$values .= ',';
}
$columns .= $key;
$values .= ':' . $key;
}
$sql = 'insert into contacts (' . $columns . ')values(' . $values . ')';
$stmt = $pdo->prepare($sql); // プリペアードステートメント
$stmt->execute($params); // queryを実行
-
insert.php
にアクセスするとDB
に保存される
入力フォームからの送信・DB保存処理
-
form.php
の$pageFlag === 2
のセクションにinsert.php
を読み込む - 関数名は何でも良いが、
inputContact()
という関数を作成し、引数にPOST送信で入る値($_POST)
を入れる
form.php
を編集
form.php
// 省略
<?php if ($pageFlag === 2) : ?>
<?php if ($_POST['csrf'] === $_SESSION['csrfToken']) : ?>
<?php
require 'insert.php'; // insert.phpを読み込む
insertContact($_POST); // insertContact関数の実行 $_POSTに入力値が入ってくる
?>
送信が完了しました。
<!-- sessionトークンの削除 -->
<?php unset($_SESSION['csrfToken']); ?>
<?php else : ?>
<p>不正なアクセスです。</p>
<?php unset($_SESSION['csrfToken']); ?>
<?php endif; ?>
<?php endif; ?>
// 以下省略
-
insert.php
をinputContact
関数で囲み引数は$_POST
を入れなくてはならないので$request
としておく
insert.php
を編集
insert.php
<?php
function insertContact($request) // $requestに $_POSTが入ってくる
{
// DB接続 PDO
require 'db_connection.php';
// 入力 DB保存 prepare, execute(配列(全て文字列))
$params = [
'id' => null,
'name' => $request['name'],
'email' => $request['email'],
'url' => $request['url'],
'gender' => $request['gender'],
'age' => $request['age'],
'contact' => $request['contact'],
'created_at' => null,
];
$count = 0;
$columns = '';
$values = '';
foreach (array_keys($params) as $key) {
if ($count++ > 0) {
$columns .= ',';
$values .= ',';
}
$columns .= $key;
$values .= ':' . $key;
}
$sql = 'insert into contacts (' . $columns . ')values(' . $values . ')';
$stmt = $pdo->prepare($sql); // プリペアードステートメント
$stmt->execute($params); // queryを実行
}
form.php
にアクセスしてフォーム入力を完了させるとDBに保存される。
以上です。