Перейти к публикации

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


Рекомендованные сообщения

Как мы знаем, изменение информации о пользователе происходит на странице:

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. Разумеется, вышеперечисленные изменения не единственные, внесённые в код, но о них я не сказал, т.к. они хоть и касаются данного вопроса, но к сути не существенны.

 

Сайтcourses.lashchevsky.me (DLE 10.6, официальная, но пока неактивированная копия с ограничениями).

Ссылка на сообщение
Поделиться на других сайтах

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

 

$_REQUEST отказывается работать должным образом при изменении настроек, поэтому я вернул приведенную мной выше часть кода в первозданный вид, но в коде перед проверкой на заполненность полей прописал:

if ( !$email ) $email = $row['email'];

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

Ссылка на сообщение
Поделиться на других сайтах
  • 5 недель спустя...
В 25.11.2015в04:39, Lashchevskiy сказал:

Как мы знаем, изменение информации о пользователе происходит на странице:

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. Разумеется, вышеперечисленные изменения не единственные, внесённые в код, но о них я не сказал, т.к. они хоть и касаются данного вопроса, но к сути не существенны.

 

Сайтcourses.lashchevsky.me (DLE 10.6, официальная, но пока неактивированная копия с ограничениями).

Попробовал повторить по вашему методу, что не сложилось. Где накосячил не пойму, вроде все так.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...