Próbuję dowiedzieć się, czy można zarejestrować akcję w wyszukiwaniu PHP.
Mam 3 proste strony:
- Zaloguj się, aby uwierzytelnić mojego użytkownika
- funkcja wyszukiwania
- stronę, na której zostanie wyświetlony mój formularz wyszukiwania i wynik
Chcę wiedzieć, kto co wyszukiwał (na przykład użytkownik „Bob” wyszukał o 11:22 adres e-mail „Jan”)
Włączyłem dzienniki MySQL, które nie pozwalają mi uzyskać tego typu informacji. Czy mogę to zrobić w PHP?
Oto funkcja wyszukiwania:
<?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);
}
?>
I stronę wyników
<?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>
Strona logowania nie jest zbyt interesująca.
1 odpowiedź
To byłoby możliwe w każdym języku. Musisz tylko przechowywać wyszukiwania w tabeli DB.
W najprostszym przypadku utwórz tabelę z 3 kolumnami - user_name
, search_term
, search_time
.
Dodaj ten kod przed lub po sekcji //SEARCH
.
//STORE SEARCH
$stmt = $pdo->prepare("INSERT INTO `Searches_Table` (user_name, search_term, search_time) VALUES (?, ?, NOW())");
$stmt->execute([$_SESSION['username'], $_POST['search']]);
Możesz oczywiście dodać dodatkowe sprawdzanie błędów. Sugeruję również użycie user_id
, ale nie widziałem go w Twoim kodzie. Jeśli jeszcze tego nie zrobiłeś, zapisz user_id
w $_SESSION
i INSERT
to zamiast. W ten sposób, jeśli user_name
kiedykolwiek się zmieni, nadal możesz łatwo połączyć go z użytkownikiem.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.
error_log
z$message_type=3
który będzie logował komunikaty do pliku określonego przez użytkownika