Новая вкладка в личном разделе

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Новая вкладка в личном разделе

Сообщение HAMMER663 »

Добавляю новую вкладку в личный раздел.
в ucp_register.php
перед

Код: Выделить всё

		}

		$template->assign_vars(array(
			'L_TITLE'	=> $user->lang['UCP_PROFILE_' . strtoupper($mode)],
добавил

Код: Выделить всё

			case 'profile_sp':
					include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
					$cp = new custom_profile();
					$cp_data = $cp_error = array();
					$data = array(
						'nick100sp'		=> utf8_normalize_nfc(request_var('nick100sp', $user->data['sp_nick100sp'], true)),
						'fio'			=> utf8_normalize_nfc(request_var('fio', $user->data['sp_fio'], true)),
						'tel'			=> request_var('tel', $user->data['sp_tel']),
						'words'			=> utf8_normalize_nfc(request_var('words', $user->data['sp_words'], true)),
					);
					add_form_key('ucp_profile_sp');
					if ($submit)
					{
						$validate_array = array(
							'nick100sp'		=> array('string', true, 1, 100),
							'fio'			=> array('string', true, 2, 255),
							'tel'			=> array(
								array('string', true, 3, 15),
								array('match', true, '#^[0-9]+$#i')),
							'words'			=> array('string', true, 1, 100),

						);
						$error = validate_data($data, $validate_array);
						// validate custom profile fields
						$cp->submit_cp_field('profile', $user->get_iso_lang_id(), $cp_data, $cp_error);
						if (sizeof($cp_error))
						{
							$error = array_merge($error, $cp_error);
						}
						if (!check_form_key('ucp_profile_sp'))
						{
							$error[] = 'FORM_INVALID';
						}
						if (!sizeof($error))
						{
							$sql_ary = array(
								'sp_nick100sp'	=> $data['nick100sp'],
								'sp_fio'		=> $data['fio'],
								'sp_tel'		=> $data['tel'],
								'sp_words'		=> $data['words'],
							);
						$sql = 'UPDATE ' . phpbb_sp . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE user_id = ' . $user->data['user_id'];
						$db->sql_query($sql);
							// Update Custom Fields
							$cp->update_profile_field_data($user->data['user_id'], $cp_data);
							meta_refresh(3, $this->u_action);
							$message = $user->lang['PROFILE_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
							trigger_error($message);
						}
						// Replace "error" strings with their real, localised form
						$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
					}
					$template->assign_vars(array(
						'ERROR'		=> (sizeof($error)) ? implode('<br />', $error) : '',
						'NICK100SP'	=> $data['nick100sp'],
						'FIO'		=> $data['fio'],
						'TEL'		=> $data['tel'],
						'WORDS'		=> $data['words'],

					));
					// Get additional profile fields and assign them to the template block var 'profile_fields'
					$user->get_profile_fields($user->data['user_id']);

					$cp->generate_profile_fields('profile', $user->get_iso_lang_id());
			break;
info/ucp_register.php
после

Код: Выделить всё

				'reg_details'	=> array('title' => 'UCP_PROFILE_REG_DETAILS', 'auth' => '', 'cat' => array('UCP_PROFILE')),
вставил

Код: Выделить всё

				'profile_sp'	=> array('title' => 'UCP_PROFILE_SP', 'auth' => 'acl_u_sp', 'cat' => array('UCP_PROFILE')),


в ucp_profile_profile_sp.html вставил

Код: Выделить всё

	<dl>
		<dt><label for="nick100sp">{L_UCP_NICK100SP}:</label></dt>
		<dd><input name="nick100sp" id="nick100sp" class="inputbox" maxlength="100">{NICK100SP}</></dd>
	</dl>
	<dl>
		<dt><label for="fio">{L_UCP_FIO}:</label></dt>
		<dd><input name="fio" id="fio" class="inputbox" maxlength="100">{FIO}</></dd>
	</dl>
теперь я ввожу данные в свои поля и они должны заноситься в таблицу phpbb_sp

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `phpbb_sp` (
  `sp_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` mediumint(8) unsigned NOT NULL,
  `sp_login` varchar(100) COLLATE utf8_bin NOT NULL DEFAULT '',
  `sp_nick100sp` varchar(30) COLLATE utf8_bin NOT NULL DEFAULT '',
  `sp_tel` varchar(15) COLLATE utf8_bin NOT NULL DEFAULT '',
  `sp_fio` varchar(225) COLLATE utf8_bin NOT NULL DEFAULT '',
  `sp_words` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`sp_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;
При вводе данных и отправке получаю

Код: Выделить всё

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE user_id = 2' at line 3 [1064]
SQL
INSERT phpbb_sp SET sp_nick100sp = NULL, sp_fio = NULL, sp_tel = NULL, sp_words = NULL WHERE user_id = 2
BACKTRACE
не могу понять что не так в запросе?
NeSlava
phpBB 1.2.1
Сообщения: 22
Стаж: 15 лет 7 месяцев
Откуда: Обнинск
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Новая вкладка в личном разделе

Сообщение NeSlava »

в место INSERT наверно надо UPDATE

или

INSERT INTO phpbb_sp (sp_nick100sp, sp_fio, sp_tel, sp_words, user_id) VALUES (NULL, NULL, NULL, NULL, 2)
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Новая вкладка в личном разделе

Сообщение Палыч »

А откуда взялось INSERT?
Весь синтаксис от UPDATE

Добавлено спустя 1 минуту 1 секунду:
Вот откуда, по-моему
HAMMER663 писал(а):info/ucp_register.phpпосле
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

Палыч писал(а):Вот откуда, по-моему
Палыч, не въехал. что там не так?
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

так. я всех в заблуждение ввел

Код: Выделить всё

$sql = 'UPDATE ' . phpbb_sp . '
	SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
	WHERE user_id = ' . $user->data['user_id'];
$db->sql_query($sql);
вот такой запрос выполняется без ошибок, но в таблицу ничего не вносится.

если такой

Код: Выделить всё

$sql = 'INSERT ' . phpbb_sp . '
	SET ' . $db->sql_build_array('INSERT', $sql_ary) . '
	WHERE user_id = ' . $user->data['user_id'];
$db->sql_query($sql);

Код: Выделить всё

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(sp_nick100sp, sp_fio, sp_tel, sp_words) VALUES (NULL, NULL, NULL, NULL) ' at line 2 [1064]
INSERT phpbb_sp SET (sp_nick100sp, sp_fio, sp_tel, sp_words) VALUES (NULL, NULL, NULL, NULL) WHERE user_id = 2
не понимаю почему он пытается записать NULL всюду..
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Новая вкладка в личном разделе

Сообщение Палыч »

В синтаксисе INSERT нет SET
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

вот мне надо, если запись отсутствует в таблице, то записывать, а если уже есть, то обновлялась

Код: Выделить всё

$sql = 'UPDATE ' . phpbb_sp . '
	SET ' . $db->sql_build_array('UPDATE', $sql_ary);
$db->sql_query($sql);
выполняется, но ничего не вносится. я взял этот запрос из страницы с личными данными..

Добавлено спустя 56 минут 44 секунды:
вообще не понятно почему не заносятся данные в массив $sql_ary
mifody
phpBB 1.4.0
Сообщения: 35
Стаж: 15 лет 1 месяц
Поблагодарили: 3 раза

Re: Новая вкладка в личном разделе

Сообщение mifody »

хм, а вообще в переменных есть что нить? например в $data['nick100sp'] - просто по коду функции sql_build_array, а точнее в _sql_validate_value (используется для проверки) возвращается NULL при срабатывания условия is_null($var).
Сори, но есть подозрене, что у Вас переменные пустые. Даже не пустые, а вообще не инициализированы.
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

mifody ды вот и пустые.. не могу понять откуда ноги растут..
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Новая вкладка в личном разделе

Сообщение Палыч »

HAMMER663
Так ты их берешь из массива data, если их нет по реквесту
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
mifody
phpBB 1.4.0
Сообщения: 35
Стаж: 15 лет 1 месяц
Поблагодарили: 3 раза

Re: Новая вкладка в личном разделе

Сообщение mifody »

ну скажу как я поступал, когда полез в коде ковырятся.
trigger_error(str_replace("\n", '<br />', print_r($var, true)));
эту инструкцию я втыкал чуть ли не через каждую строку

просто Вы по умолчанию используете данные из $user->data[], скоре всего там поля не заполнены.
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

Палыч
вот убрал вообще request_var

Код: Выделить всё

$data = array(
	'nick100sp'		=> utf8_normalize_nfc('nick100sp', $sp->data['sp_nick100sp']),
	'fio'			=> utf8_normalize_nfc('fio', $sp->data['sp_fio']),
	'tel'			=> utf8_normalize_nfc('tel', $sp->data['sp_tel']),
	'words'		=> utf8_normalize_nfc('words', $sp->data['sp_words']),
);
теперь вот что
печатаю через print
ник на 100сп nick100sp !
телефон tel !
ФИО fio !
ключевое слово words !
то есть данные, заполненные с формы не попадают сюда..

Добавлено спустя 3 минуты 56 секунд:
mifody что-то вставил твою строчку, так у меня вообще вся страница пропала.
формы ввода, кнопки..
mifody
phpBB 1.4.0
Сообщения: 35
Стаж: 15 лет 1 месяц
Поблагодарили: 3 раза

Re: Новая вкладка в личном разделе

Сообщение mifody »

HAMMER663 писал(а):что-то вставил твою строчку, так у меня вообще вся страница пропала.
Логично :). Вместо $var втыкать что хочется проверить ;), в смысле переменную. По сути - это замена принту.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Новая вкладка в личном разделе

Сообщение Палыч »

HAMMER663 писал(а):вот убрал вообще request_var
HAMMER663 писал(а):то есть данные, заполненные с формы не попадают сюда..
Ну правильно. Откуда же им там взятся :)
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: Новая вкладка в личном разделе

Сообщение HAMMER663 »

вернул обратно request_var

Добавлено спустя 2 часа 51 минуту 50 секунд:
не пойму почему пустые поля после ввода данных...

Вернуться в «Для авторов (phpBB 3.0.x)»