表題の件、簡単な会員登録の機能を作っています。
しかし、会員登録がうまく行きません。
言語:PHP
データベースに値を入れるのがうまくいっていないようです。
ページも遷移しません。
デザインはこんな感じです。
DBには2回接続していて、どちらかを外すと機能するみたいです。
phpmyadminのほうの問題なのかもしれませんが、エラーが表示されないのでよくわかりません。
phpMyAdminではデータを閲覧したり、データを追加したりできます。
common.php <?php function dbconnect(){ $db = new mysqli('localhost:8889', 'root', 'root', 'bbs2'); if (! $db){ die($db->error); } return $db; } ?>
index.php <?php require('../common.php'); $db = dbconnect(); $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接続1回目 $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'; } } $form['password'] = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING); if ( $form['password'] == ''){ $error['password'] = 'blank'; }elseif ( strlen($form['password']) < 8 ){ $error['password'] = 'length'; } if ( empty($error)){ // DB接続2回目 $stmt = $db->prepare('INSERT INTO members(name, email, password) VALUES(?, ?, ?) '); if (! $stmt){ die($db->error); } $hash = password_hash( $form['password'], PASSWORD_DEFAULT); $stmt->bind_param('sss', $form['name'], $form['email'], $hash ); $success = $stmt->execute(); if (! $success){ die($db->error); } unset($_SESSION['form']); header('Location: ../login.php'); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="../style.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <title>Document</title> </head> <body> <header></header> <div class="main-wrapper"> <h3>会員登録</h3> <form action="" method="post"> <div class="mb-3"> <label for="exampleFormControlInput1" class="form-label">ニックネーム</label> <input type="text" class="form-control" id="exampleFormControlInput1" name="name" value="<?php echo h($form['name']) ?>" placeholder=""> <?php if ( isset($error['name']) && $error['name'] == 'blank') :?> <p class="error">ニックネームを入力してください</p> <?php endif ?> </div> <div class="mb-3"> <label for="exampleFormControlInput1" class="form-label">メールアドレス</label> <input type="email" class="form-control" id="exampleFormControlInput1" name="email" value="<?php echo h($form['email']) ?>" placeholder="name@example.com"> <?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 ?> </div> <div class="mb-3"> <label for="exampleFormControlInput1" class="form-label">パスワード</label> <input type="password" class="form-control" id="exampleFormControlInput1" name="password" 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">パスワードは8文字以上で入力してください</p> <?php endif ?> </div> <button type="submit" class="btn btn-primary">送信</button> </form> </div> </body> </html>
MySQLのポート番号が3306ではなく8889である理由。
→MAMPのMySQL情報が見れるところにそう書いてありました。
最後まで見ていただきありがとうございます。
もしお気づきの点がありましたら教えていただけると大変幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー