PHPで学習塾のホームページを作成しております。
- ログインIDで生徒か先生か判別した上でそれぞれトップページに導くログイン機能を実装したいと考えています。しかし、MySQLを用いてteacher, studentのいずれのテーブルにも存在するカラムであるID, passwordの一致を調べる関数がうまく動作しません。複数テーブルから検索はどのような記述になるでしょうか。初歩的な質問で申し訳ございません。
php
1function select_teacher_member($dbh, $id, $password) { 2 $sql = 'SELECT * FROM teacher WHERE id = :id LIMIT 1'; 3 //ここのFROMの中を変更する? 4 $stmt = $dbh->prepare($sql); 5 $stmt->bindValue(':id', $id, PDO::PARAM_STR); 6 $stmt->execute(); 7 if($stmt->rowCount() > 0 ){ 8 $data = $stmt->fetch(PDO::FETCH_ASSOC); 9 if($password == $data['password']){ 10 return $data; 11 }else{ 12 return FALSE; 13 } 14 }else{ 15 return FALSE; 16 } 17}
- 生徒のログイン後、先生を絞り込み検索したいと考えております。そもそも、生徒と先生のテーブルを分けた方がいいでしょうか。分けた場合、IDが重複する可能性があります。分けなかった場合、先生と生徒を判別するカラムを追加する必要があります。先生の絞り込み検索やログイン後のトップページを分けることも見越した場合、いずれの方がより簡便にコード設計できるでしょうか。
よろしくお願いいたします。
sql
1CREATE TABLE `teacher` ( 2 `id` varchar(20) NOT NULL, 3 `password` varchar(255) NOT NULL, 4 `name1` varchar(20) NOT NULL, 5 `name2` varchar(20) NOT NULL, 6 `gender` tinyint(1) NOT NULL, 7 `birthday` date NOT NULL, 8 `entry` date NOT NULL, 9 `subject` int(3) NOT NULL, 10 `email` varchar(100) NOT NULL, 11 `message` varchar(200) DEFAULT NULL, 12 `photo` mediumblob 13) ENGINE=InnoDB DEFAULT CHARSET=utf8; 14 15INSERT INTO `teacher` (`id`, `password`, `name1`, `name2`, `gender`, `birthday`, `entry`, `subject`, `email`, `message`, `photo`) VALUES 16('honda', 'honda', '本田圭佑', 'ほんだけいすけ', 1, '1986-06-13', '2018-09-01', 120, 'honda@gmail.com', NULL, NULL), 17('ichihara', 'ichihara', '市原悦子', 'いちはらえつこ', 2, '1936-01-24', '1960-01-01', 127, 'ichihara@gmail.com', NULL, NULL); 18 19CREATE TABLE `student` ( 20 `id` varchar(20) NOT NULL, 21 `password` varchar(255) NOT NULL, 22 `name1` varchar(20) NOT NULL, 23 `name2` varchar(20) NOT NULL, 24 `gender` tinyint(4) NOT NULL, 25 `birthday` date NOT NULL, 26 `email` varchar(100) NOT NULL 27) ENGINE=InnoDB DEFAULT CHARSET=utf8; 28 29INSERT INTO `student` (`id`, `password`, `name1`, `name2`, `gender`, `birthday`, `email`) VALUES 30('ashida', 'ashida', '芦田愛菜', 'あしだまな', 2, '2004-06-23', 'ahida@gmail.com'), 31('suzuki', 'suzuki', '鈴木福', 'すずきふく', 1, '2004-06-14', 'suzuki@gamail.com'); 32
回答3件
あなたの回答
tips
プレビュー