前提・実現したいこと
最終ログイン日時を取得したい。
発生している問題・エラーメッセージ
私の現在のコードだと日時アップデートqueryを実行する前に
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
ここのfetchの日時を取得しています。
query実行後に、
ログイン日時をセッションに格納したいのですが、どのように修正すれば宜しいでしょうか?
該当のソースコード
php
1<?php 2session_start(); 3 4if (isset($_SESSION["NAME"])) { 5header("Location: my.php"); 6exit; 7} 8 9$db['host'] = "hoge"; 10$db['user'] = "hoge"; 11$db['pass'] = "hoge"; 12$db['dbname'] = "hoge"; 13$date = date('Y-m-d H:i:s'); 14 15$errorMessage = ""; 16$errorMessage_2 = ""; 17 18require_once 'hasu_test.php'; 19 20if (isset($_POST["login"])) { 21if (empty($_POST["mail"])) { 22$errorMessage = '※空やでやで'; 23} else if (empty($_POST["password"])) { 24$errorMessage_2 = '※空やで。'; 25} else if (!preg_match('/^[!-~]+@[!-~]+$/', $_POST["mail"])){ 26$errorMessage = '※正規表現外mail'; 27} else if (!preg_match("/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i", $_POST["password"])){ 28$errorMessage_2 = '※正規表現外pass'; 29} else if (!preg_match("/^.{4,32}$/",$_POST["mail"])){ 30$errorMessage = '※桁数上mail'; 31} else if (!preg_match("/^.{4,32}$/",$_POST["password"])){ 32$errorMessage_2 = '※桁数上pass'; 33 34}else{ 35 36if (!empty($_POST["mail"]) && !empty($_POST["password"])) { 37$mail = $_POST["mail"]; 38 39$dsn = sprintf('mysql:host=%s; dbname=%s; charset=utf8;unix_socket=/tmp/mysql.sock', $db['host'], $db['dbname']); 40 41try { 42$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 43$stmt = $pdo->prepare('SELECT * FROM member WHERE mail = ?'); 44$stmt->execute(array($mail)); 45$password = $_POST["password"]; 46 47if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 48if (password_verify($password, $row['password'])) { 49session_regenerate_id(true); 50 51$id = $row['id']; 52$sql = "SELECT * FROM member WHERE id = $id"; //入力したIDからユーザー名を取得 53$stmt = $pdo->query($sql); 54foreach ($stmt as $row) { 55$row['mail']; 56} 57 58$stmt = $pdo->prepare('SELECT * FROM member WHERE sdate = ?'); 59$stmt->execute(array($date)); 60$sql = "UPDATE member SET sdate='$date' WHERE id='$id'"; 61$result = $pdo->query($sql); 62 63 64 65$_SESSION["sdate"] = $row['sdate']; 66$_SESSION["mail"] = $row['mail']; 67header("location: my.php"); 68exit(); 69 70 71} else { 72$errorMessage = '※mailまたはPasswordが間違っています。'; 73} 74} else { 75$errorMessage = '※該当データなしmailまたはPasswordが間違っています。'; 76} 77} catch (PDOException $e) { 78$errorMessage = header("Location: 500.php"); 79} 80} 81} 82} 83 84?>
インデントがめちゃくちゃですのでお手元のコードのインデントを調整して、提示しなおしてください。
※できれば手で直すのではなくフォーマット機能のあるエディタか、整形サービスを利用してください。
というか全角スペースだらけですね。このコードそもそもエラーで動かないですよ。
ifも閉じてないし、try書いてるのにcatchがないし、かなり滅茶苦茶です。コードはきちんと書いて、元のコードにエラーがないのでしたら提示するのもエラーのないコードにしてください。
でないとまともに再現確認できません。
前後にコードあるんだろうけど、未定義の変数をいきなり入れていたり、いきなりこの質問から見た人には何も優しくないです。
どんなに簡単な問題でもコードが滅茶苦茶だと回答者の読む気力を奪ってしまい、回答が得られなくなります。(要件以外のことに気が散ります)
失礼いたしました。
修正いたします
全角スペースだいぶ残ってますけども。
回答2件
あなたの回答
tips
プレビュー