質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

会員登録の機能が実装できません。

shuma_h
shuma_h

総合スコア1

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0評価

0クリップ

411閲覧

投稿2022/04/07 02:02

編集2022/04/07 20:13

表題の件、簡単な会員登録の機能を作っています。
しかし、会員登録がうまく行きません。
言語: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情報が見れるところにそう書いてありました。

最後まで見ていただきありがとうございます。
もしお気づきの点がありましたら教えていただけると大変幸いです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

miyabi-sun

2022/04/07 09:56 編集

> phpmyadminのほうの問題なのかもしれません そのphpMyAdminは数あるMySQLクライアントの選択肢の中の一つです。 つまり、MySQLサーバが稼働しているか、使えるかを「確認する目的」に使えるツールではありますが、 MySQLサーバそのものとは何の相関もありません。 phpMyAdminでMySQLのデータ部分にアクセス出来るなら「質問文のコードが悪かったね」という事で 改めて問題の切り分けが出来て質問文のコードに集中できますし、 phpMyAdminで閲覧出来ないのであれば、そもそもMySQLサーバの準備すら出来ていない可能性などがあり、質問文の大部分が関係ないノイズになってしまうわけです。 その辺のニュアンスが「phpmyadminのほうの問題なのかもしれませんが……」では読み取れず「知らんがな」としか返せません。 一度phpMyAdmin越しにあれこれ触ってみて、値を閲覧したり登録出来るか試してみてください。 そしてそれが可能か、不可能かを「編集」機能を用いて回答者達に知らせてください。 > `$db = new mysqli('localhost:8889', 'root', 'root', 'bbs2');` 何故MySQLのポート番号が3306ではなく8889なんですか? これに関しての言及もほしいとこですね。 例えば利用しているレンタルサーバの設定がそうなってますとかで大丈夫です。 phpMyAdmin等でこのポート番号で動作する事を確認しました等の情報が添えてあると完璧です。 > `?>\n\n<!DOCTYPE html>` HTMLはファイルの先頭1文字目がDOCTYPE宣言である必要があります。 今回のコードではこの箇所で改行2個挟んでいる為、不正なHTMLファイルになってしまっています。 これ理解しているエンジニアであってもうっかり改行の罠があるため、 PHPのコードしか記述しないケースでは`?>`の記述を省略するというテクニックがありまして、 このテクニックを公式が推奨していたりします。 https://www.php.net/manual/ja/language.basic-syntax.phptags.php
miyabi-sun

2022/04/07 10:10

追記ありがとうございます。 なるほど、MAMPで環境構築したんですね。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。