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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

961閲覧

PHPとphpmyadmin連携 ユーザー登録

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/02/12 13:22

編集2021/02/12 13:23

現在、PHPでユーザー登録を実装中なのですが、DBとの連携の部分で詰まっています。

DBはPhpmyadminを使用しています。

Phpmyadminで作成したデータベースはaaaでその中にusersテーブルを以下のように作成しました。

以下で不足している部分、や間違っている部分でユーザー登録を阻んでいる部分があれば教えていただきたいです。

Name Type Collation Null Default Extra 1 idPrimary bigint(20) No None AUTO_INCREMENT 2 name varchar(255) utf8mb4_unicode_ci Yes NULL 3 email varchar(255) utf8mb4_unicode_ci Yes NULL 4 password varchar(255) utf8mb4_unicode_ci Yes NULL 5 created_at datetime Yes CURRENT_TIMESTAMP 6 updated_at datetime Yes CURRENT_TIMESTAMP

以下がコードになります。

//users/register.php <?php require('../common/head_info.php'); ?> <?php require('../common/database.php'); //POST送信された場合 if(!empty($_POST)) { debug('POSTの中身:'.print_r($_POST, true)); //変数にユーザー情報を格納 $name = $_POST['name']; $email = $_POST['email']; $pass = $_POST['pass']; $pass_re = $_POST['pass_re']; //例外処理 try { //DBへ接続 $dbh = getDatabaseConnection(); //SQL文作成 $sql = $dbh->query('INSERT INTO users (name, email, password) VALUES (:name, :email, :password)'); $data = array(':name' => $name, ':email' => $email, ':password' => password_hash($pass, PASSWORD_DEFAULT), ':login_time' => date('Y-m-d H:i:s')); //クエリ実行 $stmt = queryPost($dbh, $sql, $data); // // //クエリ実行 // // $stmt = queryPost($dbh, $sql, $data); //クエリ成功の場合 if($stmt) { //ログイン有効期限(デフォルトを1時間とする) $sessionLimit = 60*60; //最終ログイン日時を現在日時に $_SESSION['login_date'] = time(); $_SESSION['login_limit'] = $sessionLimit; //ユーザーIDを格納 $_SESSION['user_id'] = $dbh->lastInsertId(); // $_SESSION['msg_success'] = SUC01; // // debug('セッションの中身:'.print_r($_SESSION, true)); header('Location:login.php'); //マイページへ // // } else { // // error_log('クエリに失敗しました。'); // // $err_msg['common'] = MSG08; } } catch(Exception $e) { error_log('エラー発生:' . $e -> getMessage()); $err_msg['common'] = MSG08; } } ?> <?php require('../common/header.php'); ?> <div class='main-top'> <div class='form-register'> <div class="form-register-list"> <h2><i class="fas fa-user-plus"></i>ユーザー登録</h2> <form action="" method='post' class='form'> <p> <label> <input type="text" name='name' placeholder="ニックネーム" value="<?php print(htmlspecialchars($_POST['name'],ENT_QUOTES));?>"> </label> </p> <p> <label> <input type="text" name='email' placeholder="メールアドレス" value="<?php print(htmlspecialchars($_POST['email'],ENT_QUOTES));?>"> </label> </p> <p> <label> <input type="password" name='pass' placeholder="パスワード" value="<?php print(htmlspecialchars($_POST['pass'],ENT_QUOTES));?>"></br> <span class='form-rule'>※英数字8文字以上</span> </label> </p> <p> <label> <input type="password" name='pass_re' placeholder="パスワード確認" value="<?php print(htmlspecialchars($_POST['pass_re'],ENT_QUOTES));?>"></br> <span class='form-rule'>※英数字8文字以上</span> </label> </p> <div class='button-container'> <input type="submit" value='登録する'> </div> </form> </div> </div> </div> <?php require('../common/footer.php'); ?>
//common/head_info.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> <link rel="stylesheet" href="../public/css/style.css"> </head> <body> <script src='https://code.jquery.com/jquery-3.4.1.min.js'></script> </body>
//common/database.php <?php /** * PDOを使ってデータベースに接続する * @return PDO */ function getDatabaseConnection() { //DBへの接続準備 $dsn = 'mysql:host=db;dbname=aaa;charset=utf8mb4'; $user = 'root'; $password = 'secret'; $options = array( //SQL実行失敗時にはエラーコードのみ設定 PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, //デフォルトフェッチモードを連想配列形式に設定 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //バッファードクエリを使う(一度結果をセットを全て取得し、サーバー負荷を軽減) //SELECTで得た結果に対してもrowCountメソッドを使えるようにする PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); try { $database_handler = new PDO($dsn, $user, $password, $options); } catch (PDOException $e) { echo "DB接続に失敗しました。<br />"; echo $e->getMessage(); exit; } return $database_handler; } function queryPost($dbh, $sql, $data) { //クエリー作成 $stmt = $dbh->prepare($sql); //プレースホルダーに値をセットし、SQL文を実行 if(!$stmt->execute($data)){ debug('クエリに失敗しました。'); debug('失敗したSQL:'.print_r($stmt, true)); // $err_msg['common'] = MSG08; return 0; } debug('クエリに成功しました。'); return $stmt; }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/12 20:57

PhpmyadminはDBではなくMySQLもしくはMariaDBを操作するためのツールです。 SQLにてselect version();を実行した結果を提示してください。
m.ts10806

2021/02/12 21:00

あとテーブル定義はCREATE TABLE文の形式で提示してください。 phpMyAdminであればエクスポート機能で得られるはずです。 また「詰まっています」と書かれていますが、何に詰まっているか明記されていません。 「ユーザー登録」の仕方は要件によって星の数ほどありますし、同じ要件であっても全く同じ実装になるとは限りません。 「全部見てほしい」なら要件をすべて記載されないと何とも言えないし、 赤の他人ですので、丸投げ状態で全部見ようとは思いません。 「質問内容含めて全部やり直し」くらいが今言えることです。質問は編集できます。
退会済みユーザー

退会済みユーザー

2021/02/13 05:04

そのusersなるテーブルにどういう機能や性能を求めて設計したのでしょうか。設計してあれば、それを満たすものを作れば良いと考えるのですが、あとさきが逆になってますよね。まず要件定義して設計するのが先。なにを目指して作っているのか、よく考えて文章化してみてください。その上で、何が足りないと考えているのかも表明してもらわないと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問