php - 如何在 mysql PHP 中插入用户登录日期时间

标签 php mysql

我是 PHP 初学者,我想将用户登录时间存储在另一个名为 LoginHistory 的表中,我不知道如何编写查询。你能帮我吗?

<?php
include_once "conn.php";

if (!isset($_SESSION)) {
session_start();
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (empty($_POST["mobile_no"]) && empty($_POST["log_password"])) {
echo '<script>alert("Both Fields are required") </script>';
}
$sql = "select * from Users where Mobile='" . $_POST['mobile_no'] . "' and 
Password='" . md5($_POST['log_password']) . "'";
if ($result = mysqli_query($conn, $sql)) {
$rowcount = mysqli_num_rows($result);
}
if ($rowcount > 0) {
$row = $result->fetch_assoc();
$_SESSION["userId"] = $row['Id'];
$_SESSION["ConstituencyId"] = $row['ConstituencyId'];
$succmsg = "Login Success";
header("location:user-login-welcome.php");
} else {
$errmsg = "Invalid Username / Password..";
}
}
?>

最佳答案

我不知道你对数据库连接有多了解,但假设你知道如何创建 PDO 连接(如果不知道的话请查看: http://php.net/manual/en/book.pdo.php )并且你有一个可用的数据库,其中包含一个包含用户名(VARCHAR)的 LoginHistory 表)和时间戳(DATETIME)列,写起来并不难。

假设您的连接存储在 $pdo 变量中。您唯一需要做的就是编写一条插入语句,将用户名和当前时间戳插入数据库。插入语句可以这样写:

INSERT INTO LoginHistory (username, timestamp) VALUES (:username, :timestamp)

如果您想使用 PDO 执行此语句,代码可能如下所示:

$stmt = $pdo->prepare('INSERT INTO LoginHistory (username, timestamp) VALUES (:username, :timestamp)');
$stmt->bindValue(':username', $username);
$stmt->bindValue(':timestamp', date('Y-m-d H:i:s'));
$stmt->execute();

如果您的数据库中还没有用于此目的的表,我建议您查看以下语句:

CREATE TABLE LoginHistory
(
    id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username varchar(255) NOT NULL,
    timestamp datetime NOT NULL
);

您可能还想查看当前的语句以获取用户。通过使用串联将变量插入到您的查询中,用户可以通过设置发布值来更改您的查询,如果我使用此值作为 mobile_no 提交登录表单(期望 mobile_no 是用户名),我应该登录:

a_username_that_does_not_exist' OR Mobile='mobile of admin'; --

如果您想防止这种情况,可以使用准备好的语句,请参阅插入示例和 PDO 文档以获取更多信息。

编写陈述的安全方式应该是这样的:

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=db_name;charset=UTF8;','root','password');
$stmt = $pdo->prepare('SELECT * FROM Users WHERE Mobile=:mobile AND Password=:password');
$stmt->bindValue(':mobile', $_POST['mobile_no']);
$stmt->bindValue(':password', md5($_POST['log_password']));
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if ($user) {
    // User is logged in
}

我希望这有帮助;)

关于php - 如何在 mysql PHP 中插入用户登录日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752808/

相关文章:

php ssh 回显 $!不显示真实的 pid

php - 无法将图片链接存储到数据库中

php - F3 (Fat-Free PHP framework) 并向其添加 MVC/OOP 结构

PHP DateTime 解析时间而不是日期

php - MySQL将双空格 ""存储为问号 "?"

mysql - debezium 0.8.0 mysql连接器解析binlog失败,table.columnWithName返回null,为什么会这样?

带有图像的 php 电子邮件()

php - 似乎无法通过 id 编辑/修改我的 php 表

mysql - 使用 GROUP BY 优化查询以删除 Using Temporary;使用文件排序

mysql - Sakila 数据库的条件查询