HTML
1<?php 2 3require_once("model.php"); 4session_start(); 5$error = false; 6$errormessage = ''; 7 8if ($_SERVER['REQUEST_METHOD'] == 'POST') { 9 echo 0; 10 if (isset($_POST['login'])) { 11 echo 0.5; 12 $studentId = postvalue('studentid'); 13 $pass = postvalue('pass'); 14 var_dump($studentId); 15 var_dump($pass); 16 17 try { 18 $db = connectdb($errors); 19 echo 1; 20 $stmt = $db ->prepare("SELECT * FROM students WHERE `student_id` = ? AND pass = ?"); 21 echo 2; 22 $stmt ->bindParam(1, $studentId, PDO::PARAM_STR); 23 $stmt ->bindParam(2, $pass, PDO::PARAM_STR); 24 $stmt ->execute(); 25 $result = $stmt ->fetch(); 26 27 if ($result == 0) { 28 echo 3; 29 $errormessage = "IDかPASSが違います"; 30 $error = true; 31 } else { 32 echo 4; 33 $studentId = $result['student_id']; 34 $studentName = $result['name']; 35 } 36 } catch (PDOException $e) { 37 echo "エラー:" . $e ->getMessage(); 38 } 39 } 40 41 if ($error == false) { 42 echo 5; 43 $_SESSION['studentId'] = $studentId; 44 $_SESSION['studentName'] = $studentName; 45 header("Location: applyclasses.php"); 46 exit(); 47 } 48} 49 50?> 51 52<html lang="1" dir="ltr"> 53 54<head> 55 <meta charset="utf-8"> 56 <title>MainPage</title> 57</head> 58 59<body> 60 61 <div class="main"> 62 <h2>ログイン</h2> 63 <p>IDとPASSを入力して下さい</p> 64 </div> 65 66 <div class="formwrap"> 67 <form method="POST"> 68 <p>ID <input name="studentid" type="text"></p> 69 <p>PASS<input name="pass" type="password"></p> 70 <p><input name="login" type="submit" value="ログイン"></p> 71 </form> 72 </div> 73<?php echo var_dump($_SESSION);?> 74 <div class="errorwrap"> 75 <p style="color:#f08080;"><?php echo $errormessage; ?></p> 76 </div> 77 78</body> 79 80</html>
SQL
1CREATE TABLE `students` ( 2 `student_id` varchar(6) NOT NULL, 3 `name` varchar(100) NOT NULL, 4 `pass` varchar(100) NOT NULL, 5 `major` enum('AD01','EC01','ED01','EL01','EL02','IS01','LA01') DEFAULT NULL 6) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 8-- 9-- テーブルのデータのダンプ `students` 10-- 11 12INSERT INTO `students` (`student_id`, `name`, `pass`, `major`) VALUES 13('AD0001', 'Frank', 'temp', 'AD01'), 14('AD0002', 'Fox', 'temp', 'AD01'), 15('AD0003', 'Ross', 'temp', 'AD01'), 16('AD0004', '井上建', 'temp', 'AD01'), 17('AD0005', 'Bob', 'temp', 'AD01'), 18('ED0001', 'Emilly', 'temp', 'ED01'), 19('ED0002', 'Fan', 'temp', 'ED01'), 20('ED0003', 'Hanks', 'temp', 'ED01'), 21('ED0004', 'Ellen', 'temp', 'ED01'), 22('ED0005', 'Tom', 'temp', 'ED01'), 23('EL0001', '浜田省吾', 'temp', 'EL01'), 24('EL0002', 'David', 'temp', 'EL01'), 25('EL0003', 'Rora', 'temp', 'EL01'), 26('EL0004', 'Tim', 'temp', 'EL01'), 27('EL0005', 'Ron', 'temp', 'EL01'), 28('EL2001', '野村祐輔', 'temp', 'EL02'), 29('EL2002', 'Tobby', 'temp', 'EL02'), 30('EL2003', 'Nancy', 'temp', 'EL02'), 31('EL2004', 'Lisa', 'temp', 'EL02'), 32('EL2005', 'Serena', 'temp', 'EL02'), 33('IS0001', 'Chandler', 'temp', 'IS01'), 34('IS0002', '中井悠太', 'temp', 'IS01'), 35('IS0003', 'Mike', 'temp', 'IS01'), 36('IS0004', '王建民\r\n', 'temp', 'IS01'), 37('IS0005', 'Monica', 'temp', 'IS01'), 38('LA0001', 'Joye', 'temp', 'LA01'), 39('LA0002', 'Rachel', 'temp', 'LA01'), 40('LA0003', 'Ken', 'temp', 'LA01'), 41('LA0004', 'Tag', 'temp', 'LA01'), 42('LA0005', 'Carol', 'temp', 'LA01'); 43 44-- 45-- Indexes for dumped tables 46-- 47 48-- 49-- Indexes for table `students` 50-- 51ALTER TABLE `students` 52 ADD PRIMARY KEY (`student_id`); 53
フォームからデータを取り出しているのはこのSQLです。
適用なデータを打ち込むと散りばめたechoがエラーの動き通り動きます。
しかし、このSQLの存在する実際の値(例、('IS0001','temp'))をうつとechoはどこも通らないですが、
array(2) { ["studentId"]=> string(6) "IS0001" ["studentName"]=> string(8) "Chandler" }
解決法をよろしくお願いします。
【追記❶】
$studentId = postvalue('studentid');
$pass = postvalue('pass');
は独自メソッドです。やっていることはissetの確認と同じです。
現在の挙動でおかしいのが
header("Location: applyclasses.php");
exit();
をコメントアウトするとecho0,0.5,1,2,4,5が表示され動きとしては問題ありません。
しかしこれを復活させると、<?php echo var_dump($_SESSION);?>の中にはデータベースの値がきちんとあるのにも関わらず、
echoが何も表示されません。echo 5に通っていないと<?php echo var_dump($_SESSION);?>は出ないはずなのですが、
回答1件
あなたの回答
tips
プレビュー