所以我正在使用PHP和mySQL构建一个简单的帐户系统。出于某种原因,当用户注销时,我无法获得要记录到数据库中的当前时间戳。
这是我的注销脚本:
<?php require 'connections.php'; ?>
<?php
session_start();
//Setting Last Online Time
$QueryLO = "UPDATE account SET A_LastOnline = date() WHERE AID='".$row['AID']."'";
$con->query($QueryLO);
unset($_SESSION["AID"]);
unset($_SESSION["A_UserLevel"]);
unset($_SESSION["A_Username"]);
unset($_SESSION["A_Screenname"]);
unset($_SESSION["A_FirstLogin"]);
session_destroy();
header('Location: index.php');
exit();
?>
A_LastOnline的格式为DateTime。
非常感谢您的帮助!
编辑:这是我登录页面php部分的查询。
<?php require 'connections.php'; ?>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
$UN = $_POST['Username'];
$PW = $_POST['Password'];
$result = $con->query("select * from account where A_Username='$UN' AND A_Password='$PW'");
$row = $result->fetch_array(MYSQLI_BOTH);
session_start();
$_SESSION["AID"] = $row['AID'];
$_SESSION["A_UserLevel"] = $row['A_UserLevel'];
$_SESSION["A_Username"] = $row['A_Username'];
$_SESSION["A_Screenname"] = $row['A_Screenname'];
$_SESSION["A_FirstLogin"] = $row['A_FirstLogin'];
$_SESSION["A_RegisteredIP"] = $row['A_RegisteredIP'];
$_SESSION["A_LatestIP"] = $row['A_LatestIP'];
$_SESSION["A_LastOnline"] = $row['A_LastOnline'];
echo $QueryLO = "UPDATE account SET A_LastOnline = NOW() WHERE AID='".$row['AID']."'";
$con->query($QueryLO);
}
?>
编辑:所以我的最终解决方案是:
$QueryLO = "UPDATE account SET A_LastOnline = date() WHERE AID='".$row['AID']."'";
必须更改为:
echo $QueryLO = "UPDATE account SET A_LastOnline = NOW() WHERE AID='".$_SESSION["AID"]."'";
考虑到会话变量,因为我的$行没有在这个特定的页面上设置。
1st:将查询中的date()
替换为NOW()
(如果您不关心一天中的特定时间,则替换CURDATE()
)
第二步:通过将查询行更改为来确认查询已成功运行
if(!$con->query($QueryLO)){/*handle error here*/}
else{/*success: confinue to logout*/}
- 检查数据库字段的定义方式:A_LastOnline=日期或日期时间或时间戳
如果是date,则格式为yyy-mm-dd。例如:$date=日期('Y-m-d')
如果是日期时间或时间戳,则格式为yyy-mm-dd。例如:$date=日期('Y-m-d H:i:s');
-
然后将代码中的查询更改为以下内容:
//Setting Last Online Time $date = date('Y-m-d H:i:s');//or $date = date('Y-m-d'); $QueryLO = "UPDATE account SET A_LastOnline = $date WHERE AID='".$row['AID']."'"; $con->query($QueryLO); ?>