仅在每次注销时更新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?的主要内容,如果未能解决你的问题,请参考以下文章