Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
1

Аудит за пользователем

14.11.2016, 18:24. Просмотров 657. Ответов 30
Метки нет (Все метки)

Здравствуйте. Есть бд на postgresql:
Аудит за пользователем

Есть форма входа на php, после того, как пользователь зашел в свой кабинет, он в кабинете может редактировать свой пароль и логин. Мне надо сделать, чтобы в таблице записывалось старое значение имени, новое значение имени, название базы данных(из которое данные) и дату изменения. как мне можно это сделать?
Код:
Модель:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
**
     * Редактирование данных пользователя
     * @param integer $id <p>id пользователя</p>
     * @param string $name <p>Имя</p>
     * @param string $password <p>Пароль</p>
     * @return boolean <p>Результат выполнения метода</p>
     */
    public static function edit($id, $name, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
 
        // Текст запроса к БД
        $sql = "UPDATE logs
            SET name = :name, password = :password
            WHERE id = :id";
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':id', $id, PDO::PARAM_INT);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':password', $password, PDO::PARAM_STR);
        return $result->execute();
    }
Контроллер:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
/**
 * Контроллер CabinetController
 * Кабинет пользователя
 */
class CabinetController{
 
    public function actionIndex(){
 
        $categories = array();
        $categories = Category::getCategoriesList();
 
        $userId = User::checkLogged();
 
        // Получаем информацию о пользователе из БД
        $user = User::getUserById($userId);
 
        // Заполняем переменные для полей формы
        $name = $user['name'];
        $password = $user['password'];
 
        // Флаг результата
        $result = false;
 
        // Обработка формы
        if (isset($_POST['submit'])) {
            // Если форма отправлена
            // Получаем данные из формы редактирования
            $name = $_POST['name'];
            $password = $_POST['password'];
 
            // Флаг ошибок
            $errors = false;
 
            // Валидируем значения
            if (!User::checkName($name)) {
                $errors[] = 'Имя не должно быть короче 2-х символов';
            }
            if (!User::checkPassword($password)) {
                $errors[] = 'Пароль не должен быть короче 6-ти символов';
            }
 
            if ($errors == false) {
                // Если ошибок нет, сохраняет изменения профиля
                $result = User::edit($userId, $name, $password);
            }
        }
 
        require_once(ROOT. '/views/cabinet/index.php');
 
        return true;
    }
 
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2016, 18:24
Ответы с готовыми решениями:

Аудит php-кода
Есть ли добрые люди которые на добровольных началах проведут аудит моего php кода,и напишут фидбэк...

Аудит ИБ
В чем разница между экспертным аудитом ИБ и аудитом на соответствие стандартам ИБ.

Аудит сайта
minona-school.su

Аудит сайта
Хотелось бы в полной мере иметь представление по техническому аудиту сайта (все что входит в данный...

Аудит в Оракле
Господа, подскажите пожалуйста, как включить аудит, чтобы я знал, кто, что, откуда и когда делал с...

30
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
14.11.2016, 19:10 2
Цитата Сообщение от artem55555p Посмотреть сообщение
Мне надо сделать, чтобы в таблице записывалось старое значение имени, новое значение имени, название базы данных(из которое данные) и дату изменения.
создайте таблицу для этих данных и пишите. в чем проблема?
а зачем название базы записывать, у вас несколько баз?
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
14.11.2016, 19:11  [ТС] 3
как мне сохранить старое и новое значение? название бд надо, т.к. в будущем будет несколько их
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
14.11.2016, 19:13 4
Цитата Сообщение от artem55555p Посмотреть сообщение
как мне сохранить старое и новое значение?
старое берете из базы, новое из формы
0
14.11.2016, 19:13
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
14.11.2016, 19:14  [ТС] 5
т.к. перед тем, как менять, брать с базы старое и вставлять в новую табл, а новое значение в новую и старую, да?
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
14.11.2016, 19:15 6
ну да
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 09:41  [ТС] 7
у меня вопрос, а как объеденить 2 запроса?
PHP
1
2
3
4
5
6
        $sql = "UPDATE log
            SET name = :name, password = :password
            WHERE id = :id";
 
        $sql2 = "INSERT INTO logg (email)
            VALUES (:email)";
обновление в одной таблице и вставку в другую таблицу

Добавлено через 3 минуты
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static function edit($id, $name, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
 
        // Текст запроса к БД
        $sql = "UPDATE log
            SET name = :name, password = :password
            WHERE id = :id";
 
        $sql2 = "INSERT INTO logg (name)
            VALUES (:name)";
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':id', $id, PDO::PARAM_INT);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':password', $password, PDO::PARAM_STR);
 
 
 
        return $result->execute();
    }

и как сделать два запроса в одной функции?
0
Виталюска
489 / 474 / 232
Регистрация: 26.09.2010
Сообщений: 2,418
15.11.2016, 09:44 8
Цитата Сообщение от artem55555p Посмотреть сообщение
у меня вопрос, а как объеденить 2 запроса?
эти два запроса не объеденишь
можно поставить проверку если выполнился один запрос выполнить следующий или использовать транзакции
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 09:55  [ТС] 9
а как это сделать?

Добавлено через 2 минуты
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public static function edit($id, $name, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
 
        // Текст запроса к БД
        $sql = "UPDATE log
            SET name = :name, password = :password
            WHERE id = :id";
 
        $sql = "INSERT INTO logg (id, name, password)
            VALUES (:id, :name, :password)";
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':id', $id, PDO::PARAM_INT);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':password', $password, PDO::PARAM_STR);
 
 
 
        return $result->execute();
    }

я щас сделал так и это работает

Добавлено через 5 минут
хотя нет, оно вставляет новые данные в таблицу logg, но не обновляет в таблице log
0
Виталюска
489 / 474 / 232
Регистрация: 26.09.2010
Сообщений: 2,418
15.11.2016, 10:02 10
Цитата Сообщение от artem55555p Посмотреть сообщение
хотя нет, оно вставляет новые данные в таблицу logg, но не обновляет в таблице log
т.к. у Вас подтотовленые выражения стоят после
Цитата Сообщение от artem55555p Посмотреть сообщение
$sql = "INSERT INTO logg (id, name, password)
* * * * * *VALUES (:id, :name, assword)";
Это надо написать к каждому запрсу отдельно
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 10:03  [ТС] 11
можете скинуть пример из этих двух запросов?
0
Виталюска
489 / 474 / 232
Регистрация: 26.09.2010
Сообщений: 2,418
15.11.2016, 12:52 12
Цитата Сообщение от artem55555p Посмотреть сообщение
можете скинуть пример из этих двух запросов?
так пример выше, а в чем проблема я написал
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 15:16  [ТС] 13
о где там обновления update?
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
15.11.2016, 15:18 14
Цитата Сообщение от artem55555p Посмотреть сообщение
о где там обновления update?
а это что?
Цитата Сообщение от artem55555p Посмотреть сообщение
$sql = "UPDATE log SET name = :name, password = assword WHERE id = :id";
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 15:25  [ТС] 15
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static function edit($id, $name, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
 
        // Текст запроса к БД
 
 
 
 
        $sql = "INSERT INTO logg (id, name, password) VALUES (:id, :name, :password)";
        $sql = "UPDATE log SET name = :name, password = :password WHERE id = :id";
 
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':id', $id, PDO::PARAM_INT);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':password', $password, PDO::PARAM_STR);
 
 
 
        return $result->execute();
    }

так чтоли?
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
15.11.2016, 15:35 16
Цитата Сообщение от artem55555p Посмотреть сообщение
так чтоли?
нет. каждый запрос нужно подготовить и выполнить отдельно
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 15:39  [ТС] 17
так я и спрашиваю ,как?)

Добавлено через 11 секунд
что в return писать?

Добавлено через 3 минуты
я еще думал как две разные функции сделать и там свой запрос и вызывать их по очереди
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
15.11.2016, 16:11 18
Цитата Сообщение от artem55555p Посмотреть сообщение
так я и спрашиваю ,как?)
прикольно конечно. Используете классы, типа MVC, а элементарный запрос sql написать не можете.
и что-то не понятно с вашими таблицами
в таблице log - id, name, password(может еще что)
в таблице logg -id, name, password
объясните, одинаковые данные в двух таблицах(нафига)
если в таблице logg, старые данные, то где связь к какому пользователю они относятся
0
artem55555p
23 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 231
15.11.2016, 22:54  [ТС] 19
У меня такое задание:
Создать в базе данных таблицу «Log», в которой должна храниться информация обо всех действиях пользователя. А именно информация о том, какие значения полей были добавлены, удалены или изменены, с указанием даты изменения, старого значения, нового значения, таблицы и имени пользователя.

Добавлено через 6 часов 41 минуту
есть варианты?
0
fanatikus
1249 / 1190 / 562
Регистрация: 17.11.2012
Сообщений: 5,338
15.11.2016, 23:32 20
Цитата Сообщение от artem55555p Посмотреть сообщение
есть варианты?
варианты чего? выполнения за вас задания?
0
15.11.2016, 23:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2016, 23:32

Аудит сайта
Хочу структуризировать для себя данный вопрос. Что должно быть включено в отчет по аудиту сайта...

Аудит событий
Добрый день. Подскажите, пожалуйста, как включить в Windows Server журнал аудита за изменениями в...

Протабулировать заданную функцию на интервале, задаваемом пользователем, и с шагом, задаваемым пользователем
написать программу на C# Протабулировать заданную функцию на интервале, задаваемом пользователем,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.