inspp Ответов: 1

Пароль обновляется даже тогда, когда пользователь обновляет или редактирует другие данные, а не пароль


Даже когда пользователь редактирует другие сведения, поле пароля обновляется. Он должен обновляться только тогда, когда пользователь редактирует его.

Что я уже пробовал:

opjojokojniknjkjnkhkjkhkjhl

Richard Deeming

Редактирование вашего вопроса, чтобы удалить детали после того, как на него был дан ответ, чрезвычайно грубо.

И ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Посмотрите на то, что делает ваш код:

public function updateUserDetails($userid,$email,$first_name,$last_name,$password,$orderseriesno,$role_id) {
    $result = $this->db->query("SELECT username FROM tbluser WHERE user_id='".$userid."' ");
    $is_user = $result->fetchAllArray();
    $update_at=date("Y-m-d H:i:s");
    if (count($is_user) != 0) {
        $update_user = $this->db->query("UPDATE tbluser SET first_name ='".$first_name."', last_name ='".$last_name."' , email ='".$email."' , password ='".$password."' , role_id = ".$role_id." , updated_at ='".$update_at."' WHERE user_id='".$userid."'");
        $username = $is_user[0]['username'];
        if ($userUpdateData !== false) {
            if ($orderseriesno != '') {
                $add_orderseriesno = $this->db->query("UPDATE tbluserorderseries SET orderseriesno=$orderseriesno , updated_at ='".$update_at."' where username='$username'");
            } 
            return true;
        }
    }
    else {
        return false;
    }
}

Вы обновляете каждое поле в записи, даже если пользователь не поместил значение в текстовое поле для этого поля. Вы можете изменить это, извлекая существующую запись пользователя из базы данных, затем просматривая каждое поле, проверяя, было ли что-то введено в это поле или нет, обновляя данные, которые у вас есть локально, и когда вы закончите с этим, затем выполните инструкцию UPDATE обратно в базу данных.


inspp

@dave Да, я это знаю.. Я даже пытаюсь сохранить свой старый пароль в переменной, а затем сохранить запись пользователя в другой переменной и сравнить ее со старой,если изменение найдено, то обновить базу данных, но безуспешно. Я знаю, что не правильно спрашивать вас об этом, но не могли бы вы отредактировать мой ответ и предоставить мне правильное решение в этом коде. Спасибо.

Dave Kreskowiak

Нет, потому что я не занимаюсь PHP.

Код, который вы опубликовали, противоречит тому, что вы только что сказали.

Лучшее, что я могу сделать, это:

    Execute query to load user record.
    Put user record fields into appropriate variables.
    If password has changed, replace password variable with new content.
    If email has changed, replace email variable with new content.
    .
    .
    .
    Update user record in database with the data in the variables above.

inspp

Хорошо. Спасибо. Я буду стараться делать это.