Как регистрировать конкретные выполненные пользователем запросы - PullRequest
0 голосов
/ 18 марта 2019

Я хочу сохранить в журнале таблицы историю выполненных запросов MySQLI и регистрировать конкретного пользователя, который выполнил запрос, а также дату и время выполнения запроса - на любой (всех) моих страницах PHP.

Каков наилучший и самый простой способ добиться этого?

PHP

session_start();


if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }

$connection = mysqli_connect("****", "****", "****", "****");
    if (!$connection) {
        die("Database connection failed: " . mysqli_connect_error());
    }

if(isset($_POST['update'])) {
    $accountNo = $_GET['ID'];
    $firstname = $_POST['firstname'];
    $surname = $_POST['surname'];
    $dob = $_POST['dob'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $address = $_POST['address'];
    $town = $_POST['town'];
    $postcode = $_POST['postcode'];

Рекомендация пользователя SO:

Однако в этом предложении есть ошибки ... многие.

    $query = "UPDATE usertable set firstname = '".$firstname."', surname='".$surname."', dob='".$dob."', email='".$email."', phone='".$phone."', address='".$address."', town='".$town."', postcode='".$postcode."' where accountNo='".$accountNo."'";

    $log_action = mysqli_query($connection,$query);
$result = mysqli_query($connection,$query);

if($result) {

define("LOG_FILE", "https://www.*******.com/logfile.txt");
function log_action($action, $data) {
    $time = date('Y-m-d h:i:s');
    $user = isset($_SESSION['username']) ? $_SESSION['username'] : '';
    $message = "$time\tuser=$user\taction=$action\tdata=$data\n";
    file_put_contents(LOG_FILE, $message, FILE_APPEND);
}

1 Ответ

2 голосов
/ 18 марта 2019

Напишите библиотеку-обертку, которая регистрирует все вызовы mysqli, которые вы хотите записать, например,

function my_mysqli_query($link, $query, $resultmode = MYSQLI_STORE_RESULT) {
    log_action('mysqli_query', $query);
    return mysqli_query($link, $query, $resultmode);
}
function my_mysqli_prepare($link, $query) {
    log_action('mysqli_prepare', $query);
    return mysqli_prepare($link, $query);
}
...
define("LOG_FILE", "/path/to/logfile.txt");
function log_action($action, $data) {
    $time = date('Y-m-d h:i:s');
    $user = isset($_SESSION['username']) ? $_SESSION['username'] : '';
    message = "$time\tuser=$user\taction=$action\tdata=$data\n";
    file_put_contents(LOG_FILE, $message, FILE_APPEND);
}

Я написал ее для записи в файл.Вместо этого вы можете войти в таблицу базы данных, это просто больше кода в log_action().

Затем выполнить глобальную замену во всех других ваших скриптах, заменив mysqli_query на my_mysqli_query, mysqli_prepare на my_mysqli_prepare, и так далее.Ваш код будет выглядеть так:

if(isset($_POST['update'])) {
    $accountNo = $_GET['ID'];
    $firstname = $_POST['firstname'];
    $surname = $_POST['surname'];
    $dob = $_POST['dob'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $address = $_POST['address'];
    $town = $_POST['town'];
    $postcode = $_POST['postcode'];

    $query = "UPDATE usertable set firstname = '".$firstname."', surname='".$surname."', dob='".$dob."', email='".$email."', phone='".$phone."', address='".$address."', town='".$town."', postcode='".$postcode."' where accountNo='".$accountNo."'";

    $result = my_mysqli_query($connection,$query);
    if ($result) {
        echo "Update successful";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...