【问题标题】:How to insert time of user's logout in database?如何在数据库中插入用户注销的时间?
【发布时间】:2013-09-10 21:50:08
【问题描述】:

我成功制作了登录代码...当用户登录时,登录时间写入数据库。

session_start();
    $query = mysql_query("SELECT * FROM users");
    $result = mysql_fetch_array($query);


    if(!empty($_POST['username']) && !empty($_POST['password'])){           
        $username = ($_POST['username']);
        $password = ($_POST['password']);           
        $username = stripslashes($username);
        $password = stripslashes($password);            
        $username = mysql_real_escape_string($username);
        $password = mysql_real_escape_string($password);            
        $_SESSION['username'] = $username;
        $_SESSION['password'] = $password;

$result = mysql_query("SELECT * FROM users WHERE username = '$username' AND status = '1'"); 
 if(mysql_num_rows($result) == 1) {
                mysql_query("INSERT INTO entry(id, username_id, entry_time) VALUES ('', 'bkrpan', NOW()) "); 
                header("Location: admin.php"); 
                exit; }

        $result = mysql_query("SELECT username FROM users WHERE username = '$username' AND password = '$password'");
            if(mysql_num_rows($result) == 1) {
                mysql_query("INSERT INTO entry(id, username_id, entry_time) VALUES ('', '$username', NOW()) "); 
            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;
            header("Location: users.php");
            exit; }
            echo "Login failed! You will be redirected.";
            echo "<meta http-equiv=\"refresh\" content=\"2;URL=index.php\">";
            } 

    else {
        echo "Login failed! You will be redirected.";
        echo "<meta http-equiv=\"refresh\" content=\"2;URL=index.php\">";
    }

     session_destroy();

但是...现在我不知道如何制作注销代码。 这是我做的,但它不起作用。

 <?php
 mysql_connect("localhost", "root", "") or die("cannot connect"); 
 mysql_select_db("zavrsni_rad") or die("cannot select DB");
 session_start();
 $username = $_SESSION['username'];
 $sql = "SELECT * FROM users WHERE username = ".$username." AND password = ".$password;
 $result = mysql_query($sql); 
 if(mysql_num_rows($result) == 1) {
$sql_2 = "INSERT INTO entry(username_id, entry_time) VALUES (".$username.", NOW()        )";
mysql_query($sql_2); 
 }
session_destroy();
 header("location: index.php");
 ?>

【问题讨论】:

  • it's not working 是什么意思?你有白屏吗?错误信息?什么都没加?添加了错误的数据?正确的数据,到了错误的地方?
  • 表示数据库为空...时间没有添加到数据库中...(我被重定向到index.php,这很好)

标签: php mysql


【解决方案1】:

您忘记了查询中的单引号,并且您没有获得 $password 的值

$sql = "SELECT * FROM users WHERE username = '".$username."' AND password = '".$password."'";

$sql_2 = "INSERT INTO entry(username_id, entry_time) VALUES ('".$username."', NOW())";

为清晰起见更新

<?php
session_start();

// check that the session exists first
if(isset($_SESSION['username'])) {

    // you should put your db connection in a config.php file and use mysqli or PDO - what you're using is depreciated
    mysql_connect("localhost", "root", "") or die("cannot connect"); 
    mysql_select_db("zavrsni_rad") or die("cannot select DB");

    // don't think I'd store password in a session...
    // also, is username UNIQUE in your database?
    // also, also, ALWAYS escape (sanitize) your database input to prevent agains SQL injection

    $sql = "SELECT username, password 
    FROM 
        users 
    WHERE 
        username = '".mysql_real_escape_string($_SESSION['username'])."' 
    AND 
        password = '".mysql_real_escape_string($_SESSION['password'])."'";
    $result = mysql_query($sql) or die('sql: '.mysql_error()); 

    if(mysql_num_rows($result) > 0) {
        $sql_2 = "INSERT INTO entry(username_id, entry_time) VALUES ('".mysql_real_escape_string($_SESSION['username'])."', NOW())";
        mysql_query($sql_2) or die('sql2: '.mysql_error()); 

        session_destroy();
        header("location: index.php");
    } else {
        echo 'There was an error. You have not been logged out.';
    }
}

【讨论】:

  • “首先检查会话是否存在” - 它存在于 login.php 中----- “另外,您的数据库中的用户名是唯一的吗?” - 它是-----我复制了你的代码......它和以前一样......我没有得到用db写的时间
  • 检查会话的存在是无害的,并且可以避免问题——在做任何重要的事情之前做这件事是个好主意。密码设置了吗?尝试将 mysql_error() 添加到您的两个查询中,看看您的错误是什么: mysql_query($sql_2) 或 die(mysql_error());
  • 哦,会话是在 login.php 中设置的,这并不意味着它会存在于其他脚本中。如果用户退出浏览器然后返回 logout.php,则不会设置会话,但您将运行代码。这就是您检查会话是否已设置的原因。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多