メンバー登録(PHP × MySQL)
イメージ
- フォームで入力
- POSTで値を送信
- PHPで受け取る
- バリデーション
- DBにINSERT
- 結果を表示
フォーム側
フォームタグを用意。メソッドはPOST。データをHTTPボディに入れて送信(URLに表示されない)。
ここで送られたデータは$_POST['name']で取得できる。
actionで送り先を明示、add.phpとする。
<form method="post" action="add.php">
その中にinputタグを必要分準備。例えば
<input type="text" name="name">
<input type="password" name="pass">
<input type="submit" value="送信">
これでPOSTのセッションの中にname,passという情報を付与できる。
↓次の登録作業を行うファイルへ遷移
登録作業を行うファイル:add.php
POSTの中身を変数に入れる
$staff_name = trim($_POST['name'] ?? '');
$staff_pass = $_POST['pass'] ?? '';
$staff_pass = password_hash($staff_pass, PASSWORD_DEFAULT);
- ?? ''で、nameが存在すればその値、存在しなければ空文字。
-
password_hashはパスワードを安全なハッシュ値にする。 - trim()で、前後の空白を削除する。
- ハッシュとは:元の文字列から一方向の計算をして元に戻せない別の文字列にすること
- 第一引数は生のパスワード、PASSWORD_DEFAULTは変換アルゴリズム。これでいいらしい。
このあとif文で空欄チェックなどしてもよし。
DB接続
人によるので、しらべる。私の場合VPSサーバーで開発しているので殊更ややこしい。
$dsn = "DSNしらべて";
$user = "DSNユーザー名しらべて";
$password = "DSNパスワードしらべて";
$dbh = new PDO($dsn, $user, $password);
$dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- dbhに新しいPDO(PHP Data Object)というクラスを作る。
- 引数に、DSN名、ユーザー名、パスワードを入れる。
- dbhのオブジェクトに、setAttributeという、エラーが起きたら投げるものを用意
- 第一引数:エラーモード
- 第二引数:例外モード。
SQL操作
$sql = 'INSERT INTO mst_staff(name,password) VALUES (?,?)'; //前半かっこはカラム名
$stmt = $dbh->prepare($sql);
$stmt->execute($data);
$dbh = null;
- ??で要素を後から入れ込む。SQLインジェクション対策。
-
$stmtはstatementの略。dbhの状態をsql準備状態にする。 - 再びstmtをexecute(実行)の状態にする。
- nullで終える。
終わり
echo htmlspecialchars($name,ENT_QUOTES,'UTF-8') . "さんを追加しました";
- htmlspecialcharsは<>など表示に影響を与える記号を変換してくれる。
- ENT_QUOTESはシングルクォートとダブルクォートの両方を変換するということ
- UTF-8は日本語環境のデフォルト文字コード。文字化け防止。