🗂

phpで会員登録制の掲示板作ろうや

2024/02/17に公開

index.php(joinのやつ)

<?php

session_start();
require('../library.php');

// フォームの初期化
$form = [
'name' => '',
'email' => '',
'password' => '',
];
$error = [];

// フォームの内容をチェック
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$form['name'] = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
if ($form['name'] === '') {
$error['name'] = 'blank';
}

$form['email'] = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if ($form['email'] === '') {
    $error['email'] = 'blank';
} else {
    // データベース接続
    $db = dbconnect();

    // プリペアドステートメント作成
    $stmt = $db->prepare('SELECT count(*) FROM members WHERE email = ?');
    if (!$stmt) {
        die($db->error);
    }

    // パラメータをバインド
    $stmt->bind_param('s', $form['email']);

    // クエリの実行
    $success = $stmt->execute();
    if (!$success) {
        die($db->error);
    }

    // 結果を取得
    $stmt->bind_result($cnt);
    $stmt->fetch();
    
    // 重複チェック
    if ($cnt > 0) {
        $error['email'] = 'duplicate';
    }
    
    // ステートメントを閉じる
    $stmt->close();
}

$form['password'] = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
if ($form['password'] === '') {
    $error['password'] = 'blank';
} else if (strlen($form['password']) < 4) {
    $error['password'] = 'length';
}

// 画像のチェック
$image = $_FILES['image'];
if ($image['name'] !== '' && $image['error'] === 0) {
    $type = mime_content_type($image['tmp_name']);
    if ($type !== 'image/png' && $type !== 'image/jpeg') {
        $error['image'] = 'type';
    }
}

if (empty($error)) {
    $_SESSION['form'] = $form;

    // 画像のアップロード
    if ($image['name'] !== '') {
        $filename = date('YmdHis') . '_' . $image['name'];
        if (!move_uploaded_file($image['tmp_name'], '../member_picture/' . $filename)) {
            die('ファイルのアップロードに失敗しました');
        }
        $_SESSION['form']['image'] = $filename;
    } else {
        $_SESSION['form']['image'] = '';
    }

    header('Location: check.php');
    exit();
}

}

?>
<!DOCTYPE html>
<html lang="ja">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>会員登録</title>
<link rel="stylesheet" href="../style.css"/>
</head>

<body>
<div id="wrap">
<div id="head">
<h1>会員登録</h1>
</div>

<div id="content">
    <p>次のフォームに必要事項をご記入ください。</p>
    <form action="" method="post" enctype="multipart/form-data">
        <dl>
            <dt>ニックネーム<span class="required">必須</span></dt>
            <dd>
                <input type="text" name="name" size="35" maxlength="255" value="<?php echo h($form['name']); ?>"/>
                <?php if (isset($error['name']) && $error['name'] === 'blank'): ?>
                    <p class="error">* ニックネームを入力してください</p>
                <?php endif; ?>
            </dd>
            <dt>メールアドレス<span class="required">必須</span></dt>
            <dd>
                <input type="text" name="email" size="35" maxlength="255" value="<?php echo h($form['email']); ?>"/>
                <?php if (isset($error['email']) && $error['email'] === 'blank'): ?>
                    <p class="error">* メールアドレスを入力してください</p>
                <?php endif; ?>
                <?php if (isset($error['email']) && $error['email'] === 'duplicate'): ?>
                    <p class="error">* 指定されたメールアドレスはすでに登録されています</p>
                <?php endif; ?>
            </dd>
            <dt>パスワード<span class="required">必須</span></dt>
            <dd>
                <input type="password" name="password" size="10" maxlength="20" value="<?php echo h($form['password']); ?>"/>
                <?php if (isset($error['password']) && $error['password'] === 'blank'): ?>
                    <p class="error">* パスワードを入力してください</p>
                <?php endif; ?>
                <?php if (isset($error['password']) && $error['password'] === 'length'): ?>
                    <p class="error">* パスワードは4文字以上で入力してください</p>
                <?php endif; ?>
            </dd>
            <dt>写真など</dt>
            <dd>
                <input type="file" name="image" size="35" value=""/>
                <?php if (isset($error['image']) && $error['image'] === 'type'): ?>
                    <p class="error">* 写真などは「.png」または「.jpg」の画像を指定してください</p>
                <?php endif; ?>
                <?php if (isset($error['image']) && $error['image'] === 'upload'): ?>
                    <p class="error">* 恐れ入りますが、画像を改めて指定してください</p>
                <?php endif; ?>
            </dd>
        </dl>
        <div><input type="submit" value="入力内容を確認する"/></div>
    </form>
</div>

</body>

</html>

Discussion