我有这个PHP更新上次登录和登录计数我是它工作时,我只更新上次登录时间,但如果我添加登录计数,它将显示错误。 我希望每当用户注销它将在当前计数中添加+ 1示例最后一次登录计数为3,当注销时它将添加1并更改为4
<?php session_start(); $db_host = "localhost"; $db_user = "root"; $db_pass = "thhdfhhfh"; $db_name = "users"; try { $time = date('Y-m-d h:i:s'); $username = $_SESSION['username']; $db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass); $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = :logincount + :add WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':add', 1); $stmt->execute(); session_destroy(); header('location:index.php'); } catch(PDOException $e) { echo "Error:" . $e->getMessage(); } $db_conn = null; ?>I have this php to update last login and count of login I'm it is working when i update only last login time but if i add the count of login it will show error. I want whenever the user logout it will add + 1 in the current count Example last login count is 3 when logout it will add 1 and change to 4
<?php session_start(); $db_host = "localhost"; $db_user = "root"; $db_pass = "thhdfhhfh"; $db_name = "users"; try { $time = date('Y-m-d h:i:s'); $username = $_SESSION['username']; $db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass); $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = :logincount + :add WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':add', 1); $stmt->execute(); session_destroy(); header('location:index.php'); } catch(PDOException $e) { echo "Error:" . $e->getMessage(); } $db_conn = null; ?>最满意答案
你的问题是这样的:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = :logincount + :add WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':add', 1);您的查询中有3个参数: lastlogin , logincount和add 。 虽然您只是初始化lastlogin并add 。
因此, logincount永远不会被初始化。
由于您总是将计数增加1,请尝试以下方法:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = logincount + 1 WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time);作为旁注:当您使用username = '$username'将用户名直接解析到查询中时,您有点想要使用预准备语句。
你还应该使用一个参数:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = logincount + 1 WHERE username = :username"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':username', $username);Your problem is this:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = :logincount + :add WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':add', 1);You have 3 parameters in your query: lastlogin, logincount and add. While you are only initializing lastlogin and add.
So, logincount is never initialized.
Since you are always increment your count by 1, try this:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = logincount + 1 WHERE username = '$username'"); $stmt->bindParam(':lastlogin', $time);As a side note: you are kind of killing the idea of using prepared statements when you parse your username directly into the query with username = '$username'.
You should also use a parameter for that:
$stmt = $db_conn->prepare("UPDATE users SET lastlogin = :lastlogin, logincount = logincount + 1 WHERE username = :username"); $stmt->bindParam(':lastlogin', $time); $stmt->bindParam(':username', $username);更多推荐
发布评论