我正在开发一个让用户互相交流的网站。当用户登录我的数据库时,有一个代码将字段login_status
设置为联机。这很好。
当用户注销时出现问题我将相同的字段设置为离线,并在字段last_login
中添加注销时间。
以下是我的 logout.php
session_name("_user");session_start();
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$id = $_COOKIE['_d']; //this cookie has the user id of the user
// set user offline
$query = "UPDATE details SET login_status = 'offline' WHERE user_id = '$id";
$update = mysqli_query($conn, $query); //not working
// set last login
$time = date("h:i:sa");
$date = date("d-m-Y");
$last = "on ". $date." at". $time;
$query = "UPDATE details SET last_login = '$last' WHERE user_id = '$id";
$update = mysqli_query($conn, $query); // not working
// Unset all session values
$_SESSION = array();
// get session parameters
$params = session_get_cookie_params();
// Delete the actual cookie.
setcookie(session_name(),'', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
$past = time() - 100;
setcookie('_d', 'deleted', $past);
setcookie('_user', 'deleted', $past);
setcookie('uid', 'deleted', $past);
setcookie('_vip', 'deleted', $past);
setcookie('_status', 'deleted', $past);
setcookie('_edit', 'deleted', $past);
// Destroy session
session_destroy();
header("Location: login?status=logout%20sucessful");
这两个查询都不起作用,并且不会更新我的表格详细信息。我犯的错误是什么。
答案 0 :(得分:2)
首先,不要手动将SQL查询与不受信任的输入连接起来。这是不好的做法。
我们把它放在一边。我发现您的查询无效。
UPDATE details SET login_status = 'offline' WHERE user_id = '$id
^
there is opening single
quote without closing
quote.
答案 1 :(得分:2)
您有拼写错误
$query = "UPDATE details SET login_status = 'offline' WHERE user_id = '$id";
在上面的一个中,你错过了'after $ id。将其更改为
$query = "UPDATE details SET login_status = 'offline' WHERE user_id = '$id'";
两个查询中的
答案 2 :(得分:1)
您的query
似乎有语法错误,因此请将您的查询修改为
$query = "UPDATE details SET login_status = 'offline' WHERE user_id = '$id'"; // modify single quote from $id
而不是
$query = "UPDATE details SET login_status = 'offline' WHERE user_id = '$id";
第二次更新查询中的相同更正。
答案 3 :(得分:0)
我会将DATETIME
数据类型用于数据库以存储lastlogin。没有意义保存" on"和"在",只需在打印消息时添加