仅在每次注销时更新time_out字段到数据库中用户的最后插入ID?

Posted

技术标签:

【中文标题】仅在每次注销时更新time_out字段到数据库中用户的最后插入ID?【英文标题】:update time_out field only on on everylogout to the last inserted id of a user in db? 【发布时间】:2016-07-30 04:32:45 【问题描述】:

所以我将用户 time_in 和 time_out 存储在小时表中,当用户登录时,我将日期和时间插入 time_in 字段并且 time_out 值仍然是 000:00:00:00 现在我如何在注销时更新 time_out 字段仅在最后插入的 id 上更新日期和时间?

无论有多少次注销,它都应该仅在小时表中最后插入的用户 ID 上更新 time_out,但是如果输入了新的登录 ID,那么它会更改为新的登录 ID,我尝试过类似这样的操作

$dt = date("Y-m-d h:i:s");

UPDATE hours SET time_out = '".$dt."' WHERE member_id = '".$_SESSION['MEMBER_ID']."'

小时表中的字段是

hours_id
member_id
member_name
team
time_in
time_out

我不知道如何实现其余的。非常感谢您的帮助

好的,这是我的 logout.php

<?php
include('config.php');
    //Start session
session_start();
if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) 
        header("location: index.php");
        exit();
   
date_default_timezone_set('America/New_York');
$dt = date('Y-m-d h:i:s');      
$sql = "UPDATE hours SET time_out = '".$dt."' WHERE member_id IN (SELECT MAX(hours_id) FROM hours WHERE member_id = '".$_SESSION['MEMBER_ID']."'";
mysql_query($sql) or die(mysql_error());


    //Unset the variables stored in session
    unset($_SESSION['MEMBER_ID']);
    unset($_SESSION['LOGIN_NAME']);
    unset($_SESSION['PASS']);
    unset($_SESSION['TEAM']);   
?>

【问题讨论】:

数据库中是否有自动增量 id 字段,您可以先查询该用户的 MAX(id)。 SELECT max(id) as LastId FROM hours WHERE member_id = :member_id 顺便说一下,不要假设会话变量可以安全地注入到您的 sql 中。 【参考方案1】:

使用该用户条目的最大 id 过滤:

$max = mysql_query("SELECT MAX(hours_id) FROM hours WHERE member_id = '".$_SESSION['MEMBER_ID']."'");

$row = mysql_fetch_row($max);

那么,您的原始查询将是:

UPDATE hours SET time_out = '".$dt."' WHERE hours_id = '".$row[0]."'

【讨论】:

非常感谢你,我正在尝试但对 time_out 字段没有影响,它保持 00:00:00:00 检查 $dt 和 $_SESSION['MEMBER_ID'] 在查询声明之前是否已定义(非空) 我尝试回显它们确实会以相同的方式显示结果,如果我在几小时内插入它是从 logout.php 插入的,但为什么它不会更新 架构是这样的 hours_id int(11) NOT NULL AUTO_INCREMENT, member_id int(11) NOT NULL, member_name varchar(32) NOT NULL, team varchar(32 ) NOT NULL, time_in datetime NOT NULL, time_out datetime DEFAULT NULL, dated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (hours_id) 收到此错误消息 Erreur de syntaxe près de '' à la ligne 1

以上是关于仅在每次注销时更新time_out字段到数据库中用户的最后插入ID?的主要内容,如果未能解决你的问题,请参考以下文章

仅在刷新页面时令牌过期时注销?为啥?

MySQL 仅在条件为真时更新主字段

注销 mvc 中打开的页面

Spring security logout - 仅在登录用户触发注销时添加消息

是否可以仅在数据发生更改时更新 mysql 视图?

仅在重新渲染组件时才反应状态更新