我正在尝试找出是否可以在 PHP 搜索上记录操作。
我有 3 个简单的页面:
- 登录以验证我的用户
- 搜索功能
- 显示我的搜索表单和结果的页面
我想知道谁搜索了哪些内容(例如用户“Bob”在 11:22 搜索了“John”的电子邮件地址)
我启用了 MySQL 日志,但不允许我获取此类信息。 我可以在 PHP 中执行此操作吗?
这是搜索功能:
<?php
//DB Connect
define('DB_HOST', 'xxxx');
define('DB_NAME', 'xxxx');
define('DB_CHARSET', 'utf8');
define('DB_USER', 'xxxx');
define('DB_PASSWORD', 'xxxx');
try {
$pdo = new PDO(
"mysql:host=" . DB_HOST . ";charset=" . DB_CHARSET . ";dbname=" . DB_NAME,
DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false ]
);
} catch (Exception $ex) {
die($ex->getMessage());
}
Echo "Hi ".$_SESSION['username'];
// SEARCH
$stmt = $pdo->prepare("SELECT * FROM `Users` WHERE `user_name` LIKE ? OR `user_mail` LIKE ?");
$stmt->execute(["%" . $_POST['search'] . "%", "%" . $_POST['search'] . "%"]);
$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) {
echo json_encode($results);
}
?>
和结果页面
<?php
// Initialize the session
session_start();
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>
<?php
/* [SEARCH FOR USERS] */
if (isset($_POST['search'])) {
require "search.php";
}
/* [DISPLAY HTML] */ ?>
<!DOCTYPE html>
<html>
<body>
<!-- [SEARCH FORM] -->
<form method="post">
<h1>
Search user email from username
</h1>
<h1>
</h1>
<input type="text" name="search" required/>
<input type="submit" value="Search"/>
</form>
<!-- [SEARCH RESULTS] -->
<?php
if (isset($_POST['search'])) {
if (count($results) > 0) {
foreach ($results as $r) {
printf("<br> Username : %s <br> eMail : %s</div>", $r['user_name'], $r['user_mail']);
}
} else {
echo "No results found";
}
}
?>
</body>
</html>
登录页面并不是很有趣。
最佳答案
这在任何语言中都是可能的。您只需将搜索存储在数据库表中即可。
最简单的是,创建一个包含 3 列的表 - user_name
、search_term
、search_time
。
将此代码添加到 //SEARCH
部分之前或之后。
//STORE SEARCH
$stmt = $pdo->prepare("INSERT INTO `Searches_Table` (user_name, search_term, search_time) VALUES (?, ?, NOW())");
$stmt->execute([$_SESSION['username'], $_POST['search']]);
您当然可以添加一些额外的错误检查。我还建议使用 user_id
但我在您的代码中没有看到它。如果您还没有,请将 user_id
存储在 $_SESSION
中,然后INSERT
将其存储起来。这样,如果 user_name
发生变化,您仍然可以轻松地将其链接到用户。
关于php - 记录正在搜索的人员和内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944166/