ユーザー登録(登録)


check.php では,entry.php からセッションで受け取った入力値を使い,ユーザー名またはメールアドレスの重複を確認してから登録します。

source_dbconnect/check.php

<?php
// check.php: ユーザー登録(登録)
session_start();
require_once __DIR__ . '/dbconnect.php';
function h($value): string
{
    return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}


if (!isset($_SESSION['join'])) {
    header('Location: entry.php');
    exit();
}

$sql = 'SELECT COUNT(*) AS cnt FROM member WHERE name = :name OR mail = :mail';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':name', $_SESSION['join']['name'], PDO::PARAM_STR);
$stmt->bindValue(':mail', $_SESSION['join']['mail'], PDO::PARAM_STR);
$stmt->execute();
$count = (int)$stmt->fetch()['cnt'];

if ($count === 0) {
    $hash = password_hash($_SESSION['join']['pass_word'], PASSWORD_DEFAULT);
    $sql = 'INSERT INTO member (name, pass_word, mail) VALUES (:name, :pass_word, :mail)';
    $stmt = $dbh->prepare($sql);
    $stmt->bindValue(':name', $_SESSION['join']['name'], PDO::PARAM_STR);
    $stmt->bindValue(':pass_word', $hash, PDO::PARAM_STR);
    $stmt->bindValue(':mail', $_SESSION['join']['mail'], PDO::PARAM_STR);
    $stmt->execute();
    unset($_SESSION['join']);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>登録結果</title></head>
<body>
<?php if ($count === 0): ?>
<h1>登録完了</h1><p>ユーザー登録が完了しました。</p><p><a href="index.php">ログイン画面へ</a></p>
<?php else: ?>
<h1>登録エラー</h1><p>同じユーザー名またはメールアドレスが登録済みです。</p><p><a href="entry.php">戻る</a></p>
<?php endif; ?>
</body>
</html>

登録時には password_hash() を使い,パスワードのハッシュ値を保存します。ログイン時には password_verify() で照合します。

重複確認と登録処理のどちらも prepare()bindValue() を使ったPDO版にしています。


Copyright (c) 2014-2026 T.Kouya Laboratory @ Otemon Gakuin University. All rights reserved.