【发布时间】:2016-11-14 21:27:47
【问题描述】:
好吧..我卡住了。我在这里尝试了几个主题中的代码,但仍然不适合我,所以我需要一些帮助。
如果用户第一次登录,我想登录,如果用户返回,我想更新相同的记录。更新部分有效,但是当我的函数第一次执行时,它会插入一条空白记录和一条包含变量提供的所有数据的记录。 last_login 列对于第一次访问为 NULL,并且很好地更新了上次登录。
但我不明白为什么第一次登录会创建这些额外的记录。
这是我创建的功能代码:
function log_users($userId, $username, $achternaam, $district, $gemeente, $ipaddress)
{
global $connection;
$sql = mysqli_query($connection, "SELECT * FROM logfile_sap WHERE user_id = '{$userId}'");
if(mysqli_num_rows($sql) > 0)
{
$sql = "UPDATE logfile_sap SET last_login = NOW() WHERE user_id = '{$userId}'";
$query = mysqli_query($connection, $sql);
}
else
{
$sql = "INSERT INTO logfile_sap
(user_id, username, achternaam, district, gemeente, ipaddress, first_login)
VALUES
('{$userId}', '{$username}', '{$achternaam}', '{$district}', '{$gemeente}', '{$ipaddress}', NOW())";
$query = mysqli_query($connection, $sql);
}
}
如您所见,我正在检查用户是否已经存在于 logfile_sap 表中,如果它不存在,我想插入用户(可以使用但有额外的行),如果用户已经存在,则记录是更新了。
这是我在页面顶部使用的代码,需要检查并添加表格中的数据:
<?php log_users($userId, $username, $achternaam, $district, $gemeente, $ipaddress); ?>
我希望有人比我有更聪明的想法;-)
++++++++++++++++++++++++++++++++++++++++++++++++
问题已解决。我顿悟了!!!
我在 if(isset($_SESSION['id'])) 语句之外调用了我的函数。
在我把它放在 if(isset($_SESSION['id'])) 语句中后,表中只插入了一条记录!
【问题讨论】:
-
我觉得你的功能看起来不错。
-
仅供参考,您可以使用
INSERT ... ON DUPLICATE KEY UPDATE ...组合这两个查询 -
INSERT查询集first_login,但不是last_login。 -
我怀疑你调用了两次函数,其中一个有空参数。这个函数不可能自己创建两行。
-
@Barmar:这是更新的(它应该)并且没有插入。这完美无缺。您的“INSERT ... ON DUPLICATE KEY UPDATE”听起来很有趣。会试一试。谢谢。