前提・実現したいこと
現在PHPでログイン機能を作っています。
php
1$rec = $stmt->fetch(PDO::FETCH_ASSOC);
上記のコードがうまく動作しないため、$recが空っぽにのままで、ログイン機能をうまく作れません。
###試したこと
そもそも、データがないのかと思い、具体的な数字を記述したところ、ログインできました。(「code=?」ではなく、「code=8」と具体な数を入れたときはうまくいきました。具体的な数とは、データベースに存在する会員一人一人に割り当てた、コード番号のことです。今回の場合は、1~8のうち8を使いました。)
さらに、データベースを見たところ、ログインする際に使ったログイン名とパスワードは、指定したデータベースの正しいテーブルにしっかりありました。
≪うまくいったときのコード≫
php
1$sql = 'SELECT name FROM mst_staff WHERE code=8'; //このように具体的な数を入れた 2 $stmt = $dbh->prepare($sql); 3 $data[] = $staff_code; 4 // $data[] = $staff_pass; 5 $stmt -> execute($data);
該当のソースコード
php
1// $stmtから1レコード取り出している 2 $rec = $stmt->fetch(PDO::FETCH_ASSOC);
ソースコード全部
※どこまで実行できたか確かめるため、要所要所print
を差し込んでいます。
php
1<?php 2 3// try 4// { 5 6 $staff_code = $_POST['code']; 7 $staff_pass = $_POST['pass']; 8 9print $staff_code.'<br />'; 10print $staff_pass.'<br />'; 11 12 $staff_code = htmlspecialchars($staff_code, ENT_QUOTES, 'UTF-8'); 13 $staff_pass = htmlspecialchars($staff_pass, ENT_QUOTES, 'UTF-8'); 14 15print $staff_code.'<br />'; 16print $staff_pass.'<br />'; 17 18 $staff_pass = md5($staff_pass); 19 20 $dsn = 'mysql:dbname=shop;host=127.0.0.1;charset=utf8'; 21 $user = '--省略--'; 22 $password = '--省略--'; 23 $dbh = new PDO($dsn, $user, $password); // データベースに接続する 24 $dbh -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//エラーの通知とその種類 25 26print 'ここまでOK 1 <br />'; 27 28 $sql = 'SELECT name FROM mst_staff WHERE code=? AND password=?'; 29 $stmt = $dbh->prepare($sql); 30 $data[] = $staff_code; 31 $data[] = $staff_pass; 32 $stmt -> execute($data); 33 34 //データベース切断 35 $dbh = null; 36 37 // $stmtから1レコード取り出している 38 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 39 40print 'ここまでOK 2 <br />'; 41 42//$recの中身の有無の確認 43print '$rec = '.$rec.'<br />'; 44 45 if( $rec == false ) //もしデータがなければ 46 { 47 print'<br />'; 48 print'スタッフコードかパスワードが間違っています。<br />'; 49 print'<a href="staff_login.html">戻る</a>'; 50 } 51 else 52 { 53 header('Location: staff_top.php'); 54 exit(); 55 } 56 57//} 58// catch(Exception $e) 59// { 60// print'ただいま障害により大変ご迷惑をお掛けしています。'; 61// exit(); 62// } 63 64?> 65
出力画面
タユ aaaaaaaa タユ aaaaaaaa ここまでOK 1 ここまでOK 2 $rec = //← こんな感じで空っぽ スタッフコードかパスワードが間違っています。
回答2件
あなたの回答
tips
プレビュー