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

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

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

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

phpMyAdmin

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

PHP

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

Q&A

解決済

1回答

3174閲覧

PHP : 新規登録の際にフォームからデータを受け取り、データベースに保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

phpMyAdmin

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

PHP

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

1グッド

1クリップ

投稿2017/06/24 07:51

編集2017/06/24 13:09

signup.php

PHP

1<?php 2 session_start(); 3 $name=$email=$username=$password=''; 4 if (isset($_SESSION['users'])){ 5 $name=$_SESSION['users']['name']; 6 $email=$_SESSION['users']['email']; 7 $username=$_SESSION['users']['username']; 8 $password=$_SESSION['users']['password']; 9 } 10 $pdo=new PDO('mysql:host=localhost;dbname=admin;charset=utf8','root'); 11 echo '<form class="singup" action="signup-out.php" method="post">'; 12 echo '<p>名前</p>'; 13 echo '<input type="text" name="name" value="'.$name.'"><br>'; 14 echo '<p>ユーザー名</p>'; 15 echo '<input type="text" name="username" value="'.$username.'"><br>'; 16 echo '<p>メールアドレス</p>'; 17 echo '<input type="text" name="email" value="'.$email.'"><br>'; 18 echo '<p>パスワード</p>'; 19 echo '<input type="password" name="password" value="'.$password.'"><br>'; 20 foreach ($pdo->query('select * from college') as $row) { 21 echo '<p>学校名</p>'; 22 echo '<select name="college">'; 23 echo '<option value="0">学校名を選択してください</option>'; 24 echo '<option value="'.$row['college_id'].'">'.$row['name'].'</option>'; 25 echo '</select>'; 26 } 27 echo '<br>'; 28 echo '<input type="submit" value="SingUp">'; 29 echo '</form>'; 30 ?>
echo '<select name="college">'; echo '<option value="0">学校名を選択してください</option>'; //ここでは、データベースのcollegeから大学名を取り出しています。// echo '<option value="'.$row['college_id'].'">'.$row['name'].'</option>'; echo '</select>';

Database
college table

college_idname
1○○○○○○○○大学
2○○○○○○○○大学
3○○○○○○○○大学
4○○○○○○○○大学
```ここに言語を入力
Create table college( college_id int auto_increment primary key, name varchar(100) not null );
**signup-out.php** ```PHP session_start(); $pdo=new PDO('mysql:host=localhost;dbname=admin;charset=utf8','root'); if (isset($_SESSION['users'])){ $user_id=$_SESSION['users']['user_id']; $sql=$pdo->prepare('select * from users where user_id!=? and username=?'); $sql->execute([$user_id,$_REQUEST['username']]); }else{ $sql=$pdo->prepare('select * from users where username=?'); $sql->execute([$_REQUEST['username']]); } if (empty($sql->fetchAll())) { if (isset($_SESSION['users'])){ $sql=$pdo->prepare('update users set name=?, email=?, username=?, password=? college_name=? where user_id=?'); $sql->execute([ $_REQUEST['name'], $_REQUEST['email'], $_REQUEST['username'],$_REQUEST['password'],$_REQUEST['college'], $user_id]); $_SESSION['users']=[ 'user_id'=>$user_id, 'name'=>$_REQUEST['name'], 'email'=>$_REQUEST['email'],'username'=>$_REQUEST['username'], 'password'=>$_REQUEST['password'],'college_name'=>$_REQUEST['college'] ]; echo '<p>アカウントを更新しました。</p>'; }else { $sql=$pdo->prepare('insert into users valuse(null,?,?,?,?,?)'); $sql->execute([ $_REQUEST['name'],$_REQUEST['email'],$_REQUEST['username'], //ここの$row['college_id'],$row['name']で、signup.phpの学校名をデータベースに保存したいのですが、その方法が分かりません。// $_REQUEST['password'],$row['college_id'],$row['name']]); echo '<p>アカウントを登録しました。</p>'; } }else { echo '<p>ログイン名がすでに使われていますので、変更してください。</p>'; } ?>

Database
users table
user_id|name|username|email|password|college_id|college_name|
|:--|:--:|--:|
|1|admin|admin|admin@gamil.com|*******|1|○○○○○○○○大学|

Create table users ( user_id int auto_increment primary key, name varchar(50) not null, username varchar(30) not null unique, email varchar(35) not null, password varchar(50) not null, college_id int not null, college_name text not null );

という形で、保存をしたいのですが、その方法が分かりません。

###したいこと
・新規登録の際に、大学名と大学idをユーザーテーブルに保存をしたい。

どうぞご教授の方よろしくお願いします。

shimane👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/06/24 12:02

collage, users のテーブル定義をcreate 文で提示してください。
退会済みユーザー

退会済みユーザー

2017/06/24 12:52

Databaseの下に追加いたしました。よろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/06/24 12:54

create 文で提示してください。
退会済みユーザー

退会済みユーザー

2017/06/24 13:09

申し訳ございません。今度こそ追加いたしました。
guest

回答1

0

ベストアンサー

php

1<?php 2// エラー表示 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6require_once 'mysql.php'; 7 8function h($string) 9{ 10 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 11} 12 13// 全学校取得 14$colleges = get_colleges(); 15 16// 登録 17$last_insert_id = regist_data(); 18 19$new_user = get_user_one($last_insert_id); 20?> 21<!DOCTYPE HTML> 22<html lang="ja"> 23 <head> 24 <meta charset="UTF-8"> 25 <title></title> 26 </head> 27 <body> 28 <form action="" method="post"> 29 <?php if (!is_null($last_insert_id) && $last_insert_id > 0) : ?> 30 <p>登録しました。</p> 31 <?php endif; ?> 32 <p> 33 <input type="text" name="name" /> 34 </p> 35 <p> 36 <input type="text" name="username" /> 37 </p> 38 <p> 39 <input type="text" name="email" /> 40 </p> 41 <p> 42 <input type="text" name="password" /> 43 </p> 44 <select name="college_id"> 45 <?php foreach ($colleges as $college) : ?> 46 <option value="<?= $college['college_id']; ?>"><?= $college['name']; ?></option> 47 <?php endforeach; ?> 48 </select> 49 <button>登録する</button> 50 </form> 51 <div> 52 <?php if (!is_null($new_user)): ?> 53 <p><?= h($new_user['user_id']); ?></p> 54 <p><?= h($new_user['name']); ?></p> 55 <p><?= h($new_user['username']); ?></p> 56 <p><?= h($new_user['email']); ?></p> 57 <p><?= h($new_user['password']); ?></p> 58 <p><?= h($new_user['college_id']); ?></p> 59 <p><?= h($new_user['college_name']); ?></p> 60 <?php endif; ?> 61 </div> 62 </body> 63</html>

php

1<?php 2 3/** 4 * mysql.php 5 */ 6 7/** 8 * 接続情報取得 9 * @return \PDO 10 */ 11function db_connect() 12{ 13 $dsn = "mysql:host=localhost;dbname=sample;carset=utf8"; 14 $username = 'root'; 15 $password = 'password'; 16 $options = [ 17 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 18 ]; 19 return new PDO($dsn, $username, $password, $options); 20} 21 22/** 23 * 学校を取得する 24 * @return type 25 */ 26function get_colleges() 27{ 28 $sql = 'SELECT * FROM college;'; 29 $pdo = db_connect(); 30 $stmt = $pdo->prepare($sql); 31 $stmt->execute(); 32 return $stmt->fetchAll(PDO::FETCH_ASSOC); 33} 34 35/** 36 * データを登録する 37 * @return type 38 */ 39function regist_data() 40{ 41 if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') { 42 return; 43 } 44 45 $sql = "INSERT INTO `users` ("; 46 $sql .= " user_id, name, username, email, password, college_id"; 47 $sql .= ") VALUES ("; 48 $sql .= " null, :name, :username, :email, :password, :college_id"; 49 $sql .= ")"; 50 51 $pdo = db_connect(); 52 $stmt = $pdo->prepare($sql); 53 $arr = []; 54 55 $raw_password = filter_input(INPUT_POST, 'password'); 56 $hash_password = password_hash($raw_password, PASSWORD_DEFAULT); 57 58 $arr[':name'] = filter_input(INPUT_POST, 'name'); 59 $arr[':username'] = filter_input(INPUT_POST, 'username'); 60 $arr[':email'] = filter_input(INPUT_POST, 'email'); 61 $arr[':password'] = $hash_password; 62 $arr[':college_id'] = filter_input(INPUT_POST, 'college_id'); 63 $stmt->execute($arr); 64 65 return $pdo->lastInsertId(); 66} 67 68/** 69 * 70 */ 71function get_user_one($id) 72{ 73 if (is_null($id)) { 74 return; 75 } 76 77 $sql = "SELECT "; 78 $sql .= "`user_id`,"; 79 $sql .= "u.`name`,"; 80 $sql .= "`username`,"; 81 $sql .= "`email`,"; 82 $sql .= "`password`,"; 83 $sql .= "u.`college_id`,"; 84 $sql .= "c.`name` AS `college_name` "; 85 $sql .= "FROM `users` u "; 86 $sql .= "INNER JOIN `college` c "; 87 $sql .= "ON u.`college_id` = c.`college_id` "; 88 $sql .= "WHERE u.`user_id` = :user_id"; 89 $pdo = db_connect(); 90 $stmt = $pdo->prepare($sql); 91 $arr = []; 92 $arr['user_id'] = $id; 93 $stmt->execute($arr); 94 return $stmt->fetch(); 95}

結論から言うと、college_name を users に入れる必要がありません。

sql

1CREATE TABLE `users` ( 2 `user_id` int(11) NOT NULL AUTO_INCREMENT, 3 `name` varchar(50) NOT NULL, 4 `username` varchar(30) NOT NULL, 5 `email` varchar(128) NOT NULL, 6 `password` varchar(255) NOT NULL, 7 `college_id` int(11) NOT NULL, 8 PRIMARY KEY (`user_id`), 9 UNIQUE KEY `username` (`username`) 10) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

sql

1CREATE TABLE `college` ( 2 `college_id` int(11) NOT NULL AUTO_INCREMENT, 3 `name` varchar(100) NOT NULL, 4 PRIMARY KEY (`college_id`) 5) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

投稿2017/06/24 14:07

編集2017/06/24 14:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/06/24 14:28

全て、書き直していただき、ありがとうございました。 お陰様でうまく実行することができました。 本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2017/06/24 14:30

ソースを提供することが目的ではありませんから、しっかり処理や記述を見て学習してください。
退会済みユーザー

退会済みユーザー

2017/06/24 14:55

オブジェクトで、こんなに多様にできるとは分かりませんでした。もう少し勉強します。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問