php - 记录正在搜索的人员和内容?

标签 php mysql

我正在尝试找出是否可以在 PHP 搜索上记录操作。

我有 3 个简单的页面:

  1. 登录以验证我的用户
  2. 搜索功能
  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_namesearch_termsearch_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/

相关文章:

php - 违反完整性约束-子记录发现异常

mysql - 货币兑换数据库模式

php - 将 mysql_fetch_assoc 中的值插入表单输入

php - MySQL 中的希腊字符搜索功能

php - 检查 Yii 中是否存在文件

php - 使用 docker 和 laravel 的 GitLab CI 无法连接到数据库

php - 将两个表中的数据插入到另一个表中

MySql Group by 和 Pivot

MySql auto_increment 值不正确

php - 未使用Supervisor D在Docker容器中填充Apache访问/错误日志