Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Почему происходит обновление информации о пользователе в БД, не указанной в SQL запросе UPDATE?

Почему происходит обновление информации о пользователе в БД, не указанной в SQL запросе UPDATE?


     25.11.2015    Общие вопросы по PHP, Хаки    1352

вопрос
Как мы знаем, изменение информации о пользователе происходит на странице:
index.php?subaction=userinfo&user=username
Я решил сделать возможность изменения e-mail адреса (а за одно и настройки получения писем) не только на этой странице но и дополнительно на другой:
index.php?subaction=userinfo&user=username&a=settings

Соответственно, в PHP файле engine/modules/profile.php я внёс такие изменения:
Вместо:
if( strlen( $password1 ) > 0 ) {

    $db->query( "UPDATE " . USERPREFIX . "_social_login SET password='" . md5( $password1 ) . "' WHERE uid='{$id}'" );
    $password1 = md5( md5( $password1 ) );
    $sql_user = "UPDATE " . USERPREFIX . "_users SET fullname='$fullname', land='$land',{$mailchange} info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip', timezone='$timezone' WHERE user_id = '{$id}'";
        
} else {
            
    $sql_user = "UPDATE " . USERPREFIX . "_users SET fullname='$fullname', land='$land',{$mailchange} info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip', timezone='$timezone' WHERE user_id = '{$id}'";
        
}
Идёт это:
if ($_REQUEST['a'] == 'settings' ) {

    $sql_user = "UPDATE " . USERPREFIX . "_users SET {$mailchange} allow_mail='$allow_mail' WHERE user_id = '{$id}'";

} else {

    if( strlen( $password1 ) > 0 ) {

        $db->query( "UPDATE " . USERPREFIX . "_social_login SET password='" . md5( $password1 ) . "' WHERE uid='{$id}'" );
        $password1 = md5( md5( $password1 ) );
        $sql_user = "UPDATE " . USERPREFIX . "_users SET fullname='$fullname', land='$land',{$mailchange} info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip', timezone='$timezone' WHERE user_id = '{$id}'";
    
    } else {
        
        $sql_user = "UPDATE " . USERPREFIX . "_users SET fullname='$fullname', land='$land',{$mailchange} info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip', timezone='$timezone' WHERE user_id = '{$id}'";
    
    }
}
Информация обновляется, но есть одно НО. Вся остальная информация: fullname, land etc. сбрасывается, т.е. в базе данных эти поля становятся пустыми. Это странно, так как в SQL запросе мы обновляем конкретные ячейки БД, остальные даже не упоминаем.

Вопрос. Как сделать так, чтобы данные ячейки не сбрасывались?

P.S. Изменение настроек на отдельной странице делал по этой инструкции.
P.S.2. Разумеется, вышеперечисленные изменения не единственные, внесённые в код, но о них я не сказал, т.к. они хоть и касаются данного вопроса, но к сути не существенны.

Ответил: Lashchevsky


Решил проблему следующим образом.

$_REQUEST отказывается работать должным образом при изменении настроек, поэтому я вернул приведенную мной выше часть кода в первозданный вид, но в коде перед проверкой на заполненность полей прописал:
if ( !$email ) $email = $row['email'];

и по аналогии со всеми остальными полями, перечисленными в SQL запросе.

2 комментария

nowheremany
Эксперт

nowheremany - 26 ноября 2015 10:30 -

Проще было бы просто свернуть в скрытые панели данные, чем ковырять php файл, который слетит при обновлении

Благодарность принимаю тут Связь

Lashchevsky
Юзер

Lashchevsky - 26 ноября 2015 18:56 -

Слетит при обновлении, но у меня полдвижка изменено, так как портал совсем не новостной и много наворотов и логичнее было бы делать вообще на собственной системе управления, но гораздо проще оказалось взять DLE (именно её) и внести изменения в файлы.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх