php 中的登录次数计数器

问题描述 投票:0回答:3

我有一个数据库,我正在尝试使用 php 计算登录次数,这是我的代码:

$GetLoginTimes = "Select Login_Times from usertable where email = '$email'";
$GetLoginTimes2 = mysqli_fetch_array($GetLoginTimes);
$LoginTimesEdited = $GetLoginTimes2 + 1;
$UpdateLastLogin = "UPDATE usertable SET Login_Times = '$LoginTimesEdited' WHERE email = '$email'";
mysqli_query($con, $UpdateLastLogin);

当我登录时,login_times 设置为 1,但当我再次登录时,它保持不变 蒂亚!

php database mysqli
3个回答
2
投票

您无需在更新登录计数之前检索登录计数,只需在一个请求中更新即可:

$UpdateLastLogin = "UPDATE usertable SET login_times = login_times + 1 where email  = '$email'";
mysqli_query($con, $UpdateLastLogin);

2
投票

你的代码中的问题是你没有以正确的方式使用$result,

mysqli_query()
在哪里?

$GetLoginTimes = "Select Login_Times from usertable where email = '$email'";
$GetLoginTimes2 = mysqli_fetch_array($GetLoginTimes);

应该是这样的:

$GetLoginTimes = "Select Login_Times from usertable where email = '$email'";
$result = mysqli_query($con, $GetLoginTimes);
$GetLoginTimes2 = mysqli_fetch_array($result);

第二个问题是,当您检索行时,您没有使用

Login_Times
$LoginTimesEdited[0]
列与行分开,因此以下代码:

$LoginTimesEdited = $GetLoginTimes2 + 1;
$UpdateLastLogin = "UPDATE usertable SET Login_Times = '$LoginTimesEdited' WHERE email = '$email'";
mysqli_query($con, $UpdateLastLogin);

应该是这样的:

$LoginTimesEdited = $GetLoginTimes2 + 1;
$first_element = $LoginTimesEdited[0];
$UpdateLastLogin = "UPDATE usertable SET Login_Times = '$first_element' WHERE email = '$email'";
mysqli_query($con, $UpdateLastLogin);

为了防止

SQL injection
,您应该使用
prepare statement
这是您使用
prepare statement
的示例:

$email = "[email protected]";
$stmt = $conn->prepare("UPDATE usertable SET Login_Times= Login_Times + 1 where email=?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->close();
$conn->close();

阅读本文以了解如何使用

mysql

https://www.w3schools.com/php/php_mysql_select.asp


0
投票
$Update = "UPDATE Users SET Last_Login = '$Date', Login_Times = Login_Times + 1 WHERE Users.Email = '$Email'";
$stmt = $db->execute_query($Update);

我相信这是实现它的最佳方法,因为它结合了两个查询并且可以安全地防止 SQL 注入!

© www.soinside.com 2019 - 2024. All rights reserved.