###前提
■会員登録
DB:MYSQL ver5.6.43
php: ver5.4.55
仮会員登録→完了→本会員登録→完了→ログイン画面→マイページ
本会員登録画面にて、
本登録時に、テーブルにpasswordを外部ファイル(下記URL)を利用して、ハッシュ化し登録しています。
https://github.com/ircmaxell/password_compat/blob/master/lib/password.php
###起きている事象
ログインはできているが、一列目しか見ていない。
そのためid2以降の登録ユーザーではログインできない。
id | pass | |
---|---|---|
1 | hoge@.co.jp | test1 |
2 | hoge2@.co.jp | test2 |
###質問点 |
すみませんが下記の修正をお教えいただきたいです。
ご指摘等何でも構いませんのでよろしくお願いいたします。
php
1 if (isset($_POST["login"])) { 2 // 1. ユーザIDの入力チェック 3 if (empty($_POST["mail"])) { // emptyは値が空のとき 4 $errorMessage = '※kuuhaku'; 5 } else if (empty($_POST["password"])) { 6 $errorMessage = '※mailまたはPasswordが間違っています。'; 7 } else if (!preg_match('/^[!-~]+@[!-~]+$/', $_POST["mail"])){ 8 $errorMessage = '※正規表現外'; 9 } else if (!preg_match("/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i", $_POST["password"])){ 10 $errorMessage = '※oi'; 11 } else if (!preg_match("/^.{4,32}$/",$_POST["mail"])){ 12 $errorMessage = '※桁数上'; 13 } else if (!preg_match("/^.{4,32}$/",$_POST["password"])){ 14 $errorMessage = '※桁数上'; 15 16 17 }else{ 18 19 20 if (!empty($_POST["mail"]) && !empty($_POST["password"])) { 21 // 入力したユーザIDを格納 22 $mail = $_POST["mail"]; 23 24 25 26 27 // 2. ユーザIDとパスワードが入力されていたら認証する 28 $dsn = sprintf('mysql:host=%s; dbname=%s; charset=utf8;unix_socket=/tmp/mysql.sock', $db['host'], $db['dbname']); 29 // 3. エラー処理 30 try { 31 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 32 33 34 $stmt = $pdo->prepare('SELECT * FROM member WHERE mail = ?'); 35 $stmt->execute(array($mail)); 36 37 $password = $_POST["password"]; 38 39 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 40 // if (password_verify($password, $row['password'])) { 41 if ( $password == $row['password']) { 42 43 44 45 session_regenerate_id(true); 46 47 //正常に叩かれた場合、SQL実施 48 $sql = "UPDATE member SET sdate='$date' WHERE id='1'"; 49 $result = $pdo->query($sql); 50 51 52 // 入力したIDのユーザー名を取得 53 $id = $row['id']; 54 $sql = "SELECT * FROM member WHERE id = $id"; //入力したIDからユーザー名を取得 55 $stmt = $pdo->query($sql); 56 foreach ($stmt as $row) { 57 $row['mail']; // ユーザー名 58 } 59 $_SESSION["mail"] = $row['mail']; 60 header("location: my.php"); 61 exit(); // 処理終了 62 } else { 63 // 認証失敗 64 $errorMessage = '※mailまたはPasswordが間違っています。'; 65 } 66 } else { 67 // 4. 認証成功なら、セッションIDを新規に発行する 68 // 該当データなし 69 $errorMessage = '※該当データなしmailまたはPasswordが間違っています。'; 70 } 71 } catch (PDOException $e) { 72 73 $errorMessage = header("Location: 500.php"); 74 75 } 76 } 77 78 } 79 var_dump($errorMessage); 80 } 81 82?>
回答1件
あなたの回答
tips
プレビュー