Правильно ли сделан код? - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

  • 4 Страниц +
  • 1
  • 2
  • 3
  • Последняя »

Правильно ли сделан код?

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 11:47

Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился.

	protected function addpvpgn()
	{
		if(! \IPS\Settings::i()->pvpgn_enabled) {
		    return NULL;
	    }
		\IPS\Session::i()->csrfCheck();

		$db = \IPS\sharedstats\DB::get();
		$account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [
			['member_id=?', \IPS\Member::loggedIn()->member_id],
			['server=?', 'Server.WC3.Games']
		]);

		if(count($account_pvpgn) == 0)
		{
			$form = new \IPS\Helpers\Form();
			$form->addHeader('sharedstats_pvpgn_account_add');
			$form->add(new \IPS\Helpers\Form\Text('sharedstats_pvpgn_account_add_name', null, true, array()));
			$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', NULL, TRUE, array() ) );
			$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password2', NULL, TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password' ) ) );

			if ($values = $form->values())
			{
				try
				{
					$pvpgn = new \IPS\sharedstats\Records\PvPGN\BNET;
					$pvpgnHash = new \IPS\sharedstats\DbIntegration\Hash;

					$friend = new \IPS\sharedstats\Records\PvPGN\friend;
					$profile = new \IPS\sharedstats\Records\PvPGN\profile;
					$Record = new \IPS\sharedstats\Records\PvPGN\Record;

					$pvpgn->uid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
					$pvpgn->acct_username = $values['sharedstats_pvpgn_account_add_name'];
					$pvpgn->username = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
					$pvpgn->acct_userid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
					$pvpgn->acct_passhash1 = $pvpgnHash->getHash($values['sharedstats_pvpgn_account_add_password']);
					$pvpgn->acct_email = \IPS\Member::loggedIn()->email;
					$pvpgn->save();

					$friend->uid = \IPS\Member::loggedIn()->member_id;
					$friend->save();

					$profile->uid = \IPS\Member::loggedIn()->member_id;
					$profile->save();
					
					$Record->uid = \IPS\Member::loggedIn()->member_id;
					$Record->save();

					$conn = new \IPS\sharedstats\Records\ForumConnection;
					$conn->name = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
					$conn->server = 'Server.WC3.Games';
					$conn->member_id = \IPS\Member::loggedIn()->member_id;
					$conn->status = 'approved';
					$conn->save();

					\IPS\Output::i()
						->redirect(\IPS\Http\Url::internal('app=sharedstats&module=stats&controller=BNetAccount', 'front') , 'sharedstats_pvpgn_account_add_added');
				}
				catch(\IPS\Db\Exception $e)
				{
					if ($e->getCode() !== 1062)
					{
						throw $e;
					}
					$form->error = 'Такой игровой логин уже существует, выберите другой.';
				}
			}
			/* Display */
			\IPS\Output::i()->title = \IPS\Member::loggedIn()
				->language()
				->addToStack('sharedstats_pvpgn_account_add_name');
			if (\IPS\Request::i()->isAjax())
			{
				\IPS\Output::i()->output = $form->customTemplate(array(
					call_user_func_array(array(
						\IPS\Theme::i() ,
						'getTemplate'
					) , array(
						'forms',
						'core'
					)) ,
					'popupTemplate'
				));
			}
			else
			{
				\IPS\Output::i()->output = $form;
			}
		}
	}


И еще вопрос, как вывести в шаблон результат переменной:

		$account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [
			['member_id=?', \IPS\Member::loggedIn()->member_id],
			['server=?', 'Server.WC3.Games']
		]);

Точнее, саму переменную, чтобы использовать условие if, если $account_pvpgn === 0 то отображать кнопку и форму не нужно.

Сообщение изменено: TemKa_SD (15 Август 2018 - 11:48)

0

#2 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 12:30

Чтобы не плодить темы, задам сюда. Как в форме добавить валидацию для пароля? Необходимо максимальное значение, с минимальным разобрался.

			$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', '', TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password2', 'showMeter' => \IPS\Settings::i()->password_strength_meter, 'minimumStrength' => 3, 'bypassProfanity' => TRUE ) ) );

0

#3 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 354
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 342
  • IPB version:I have no IPB
 

Отправлено 15 Август 2018 - 12:50

Просмотреть сообщениеTemKa_SD сказал(а):

Я создал функцию регистрации на игровом сервере через сайт.

Возвращайте ошибку, а не null. Юзер должен знать почему у него нет доступа к форме.

Это
        $account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [
            ['member_id=?', \IPS\Member::loggedIn()->member_id],
            ['server=?', 'Server.WC3.Games']
        ]);

        if(count($account_pvpgn) == 0)

можно заменить на
if($db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() == 0)

И вообще вынести его выше
if($db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() != 0)
{
    // Вывести ошибку
}

// Форма


Цитата

И еще вопрос, как вывести в шаблон результат переменной
Найти шаблон и добавить новый параметр в
<ips:template parameters="...." />


Цитата

Чтобы не плодить темы, задам сюда. Как в форме добавить валидацию для пароля? Необходимо максимальное значение, с минимальным разобрался.


'minimumStrength' => 3 Это не минимальное значение.
Если нужны мин/макс символов, используйте
	 		'minLength'			=> 1,			// Minimum number of characters. NULL is no minimum. Default is NULL.
	 		'maxLength'			=> 255,			// Maximum number of characters. NULL is no maximum. Default is NULL.

0

#4 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 12:56

Просмотреть сообщениеnewbie 15 Август 2018 - 12:50 сказал(а):

Найти шаблон и добавить новый параметр в
<ips:template parameters="...." />


Это пробовал, не работало. Указывал $account_pvpgn и выводил в шаблоне {$account_pvpgn} писало что не определена переменная, попробую еще сейчас.

Просмотреть сообщениеnewbie 15 Август 2018 - 12:50 сказал(а):

'minimumStrength' => 3 Это не минимальное значение.


Минимальное значение, см скрин.

Ой, сразу спрошу, уже искал так и не нашел. Как у кнопки SAVE изменить название?

Вложений


Сообщение изменено: TemKa_SD (15 Август 2018 - 12:57)

0

#5 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 354
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 342
  • IPB version:I have no IPB
 

Отправлено 15 Август 2018 - 13:02

Просмотреть сообщениеTemKa_SD сказал(а):

Это пробовал, не работало. Указывал $account_pvpgn и выводил в шаблоне {$account_pvpgn} писало что не определена переменная, попробую еще сейчас.


Нужно еще в php-файле добавить, где этот шаблон вызывается

Просмотреть сообщениеTemKa_SD сказал(а):

Минимальное значение, см скрин.
Это мин. кол-во символов
minimumStrength - мин. значение "силометра"

Просмотреть сообщениеTemKa_SD сказал(а):

Ой, сразу спрошу, уже искал так и не нашел. Как у кнопки SAVE изменить название?

$form = new \IPS\Helpers\Form('form', 'Отправить');

0

#6 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 13:20

Расскажите пожалуйста про параметры, в регистрации форума подтверждение пароля загорается зеленым, если пароли совпадают, перенес значения из регистрации форума себе в форму, у меня так не работает (((

			$form = new \IPS\Helpers\Form( 'form', 'register_button', NULL, array( 'data-controller' => 'sharedstats.front.stats.BNetAccount') );
			$form->addHeader('sharedstats_pvpgn_account_add');
			$form->add( new \IPS\Helpers\Form\Text( 'sharedstats_pvpgn_account_add_name', NULL, TRUE, array( 'accountUsername' => TRUE ) ) );
			$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', '', TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password2', 'minLength' => 3, 'maxLength' => 15, 'bypassProfanity' => TRUE, 'checkStrength' => TRUE,'showMeter' => \IPS\Settings::i()->password_strength_meter ) ) );


Для чего используется вот это значения:
'data-controller' => 'sharedstats.front.stats.BNetAccount'

'accountUsername' => TRUE

'bypassProfanity' => TRUE

0

#7 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 13:35

Т.е через else форму выводить? Ну да, так по лучше будет.

Вложений


0

#8 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 354
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 342
  • IPB version:I have no IPB
 

Отправлено 15 Август 2018 - 14:01

Просмотреть сообщениеTemKa_SD сказал(а):

перенес значения из регистрации форума себе в форму, у меня так не работает (((

Так у Вас одно поле для пароля. Что с чем должно сравниваться?

Просмотреть сообщениеTemKa_SD сказал(а):

'data-controller' => 'sharedstats.front.stats.BNetAccount'

Добавляется в форму атрибут data-controller со значением sharedstats.front.stats.BNetAccount

Просмотреть сообщениеTemKa_SD сказал(а):

'accountUsername' => TRUE

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

Цитата

'bypassProfanity' => TRUE

Не применять фильтры слов

Цитата

Т.е через else форму выводить? Ну да, так по лучше будет.
Не нужно else
if($db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() != 0)
{
    \IPS\Output::i()->error('no_module_permission', 'Код_ошибки', 403);
}

0

#9 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 14:08

Просмотреть сообщениеnewbie 15 Август 2018 - 14:01 сказал(а):

Так у Вас одно поле для пароля. Что с чем должно сравниваться?


Блин, добавил сюда одно. Ну вот так в данный момент выглядет форма. Щас буду копать как проверить логин у себя в игровой БД )))

	protected function addpvpgn()
	{
		if(! \IPS\Settings::i()->pvpgn_enabled) {
		    \IPS\Output::i()->error('no_module_permission', '123', 403);
	    }
		\IPS\Session::i()->csrfCheck();

		$db = \IPS\sharedstats\DB::get();
		if($db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() != 0)
		{
		    \IPS\Output::i()->error('no_module_permission', '123', 403);
		}

		$form = new \IPS\Helpers\Form( 'form', 'register_button', NULL, array( 'data-controller' => 'sharedstats.front.stats.BNetAccount') );
		$form->addHeader('sharedstats_pvpgn_account_add');
		$form->add( new \IPS\Helpers\Form\Text( 'sharedstats_pvpgn_account_add_name', NULL, TRUE, array( 'accountUsername' => TRUE ) ) );
		$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', '', TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password2', 'minLength' => 3, 'maxLength' => 15 ) ) );
		$form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password2', '', TRUE, array( 'minLength' => 3, 'maxLength' => 15 ) ) );

		if ($values = $form->values())
		{
			try
			{
				$pvpgn = new \IPS\sharedstats\Records\PvPGN\BNET;
				$pvpgnHash = new \IPS\sharedstats\DbIntegration\Hash;

				$friend = new \IPS\sharedstats\Records\PvPGN\friend;
				$profile = new \IPS\sharedstats\Records\PvPGN\profile;
				$Record = new \IPS\sharedstats\Records\PvPGN\Record;

				$pvpgn->uid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
				$pvpgn->acct_username = $values['sharedstats_pvpgn_account_add_name'];
				$pvpgn->username = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
				$pvpgn->acct_userid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id;
				$pvpgn->acct_passhash1 = $pvpgnHash->getHash($values['sharedstats_pvpgn_account_add_password']);
				$pvpgn->acct_email = \IPS\Member::loggedIn()->email;
				$pvpgn->save();

				$friend->uid = \IPS\Member::loggedIn()->member_id;
				$friend->save();

				$profile->uid = \IPS\Member::loggedIn()->member_id;
				$profile->save();
				
				$Record->uid = \IPS\Member::loggedIn()->member_id;
				$Record->save();

				$conn = new \IPS\sharedstats\Records\ForumConnection;
				$conn->name = mb_strtolower($values['sharedstats_pvpgn_account_add_name']);
				$conn->server = 'Server.WC3.Games';
				$conn->member_id = \IPS\Member::loggedIn()->member_id;
				$conn->status = 'approved';
				$conn->save();

				\IPS\Output::i()
					->redirect(\IPS\Http\Url::internal('app=sharedstats&module=stats&controller=BNetAccount', 'front') , 'sharedstats_pvpgn_account_add_added');
			}
			catch(\IPS\Db\Exception $e)
			{
				if ($e->getCode() !== 1062)
				{
					throw $e;
				}
				$form->error = 'Такой игровой логин уже существует, выберите другой.';
			}
		}
		/* Display */
		\IPS\Output::i()->title = \IPS\Member::loggedIn()
			->language()
			->addToStack('sharedstats_pvpgn_account_add_name');
		if (\IPS\Request::i()->isAjax())
		{
			\IPS\Output::i()->output = $form->customTemplate(array(
				call_user_func_array(array(
					\IPS\Theme::i() ,
					'getTemplate'
				) , array(
					'forms',
					'core'
				)) ,
				'popupTemplate'
			));
		}
		else
		{
			\IPS\Output::i()->output = $form;
		}
	}

0

#10 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 14:10

И еще, на счет ошибки. Я понял, только мне она вообще не нужна. Если аккаунт уже есть на сервере, мне просто нужно убрать форму с сайта и заменить её на изменение пароля например.
0

#11 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 354
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 342
  • IPB version:I have no IPB
 

Отправлено 15 Август 2018 - 14:25

Цитата

Ну вот так в данный момент выглядет форма
И в чем проблема?
Укажите 2 разных пароля, отправьте форму и посмотрите результат

Цитата

Щас буду копать как проверить логин у себя в игровой БД )))
У Вас же в коде есть
$form->error = 'Такой игровой логин уже существует, выберите другой.';
Значит, где-то должны выбрасываться исключение.
0

#12 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 14:41

Просмотреть сообщениеnewbie 15 Август 2018 - 14:25 сказал(а):

И в чем проблема?
Укажите 2 разных пароля, отправьте форму и посмотрите результат

Вы не поняли, я хочу зелененькое поле как на скрине.

Просмотреть сообщениеnewbie 15 Август 2018 - 14:25 сказал(а):

У Вас же в коде есть
$form->error = 'Такой игровой логин уже существует, выберите другой.';
Значит, где-то должны выбрасываться исключение.


Так это если ошибка MYSQL вылазит 1062, а я про проверку формы, когда вводишь логин, чтобы проверялось наличие в БД.

......................

Или подождите, может всё это не работает в форме, а только при полной регистрации?

Вложений


Сообщение изменено: TemKa_SD (15 Август 2018 - 14:42)

0

#13 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 14:48

Разобрался, здесь идет подключение JS по name="". Как лучше делать? Копировать JS код в мой компонент и изменять идентификаторы, или использовать идентификаторы IPS?

Вложений


Сообщение изменено: TemKa_SD (15 Август 2018 - 14:50)

0

#14 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 198
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 15 Август 2018 - 15:08

Не хочет. Надо же подключать валидацию через стили, Как на скрине выше?
0

#15 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 354
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 342
  • IPB version:I have no IPB
 

Отправлено 15 Август 2018 - 15:20

Нужно добавить контроллер core.front.system.register и поля должны называться password и password_confirm
$form = new \IPS\Helpers\Form( 'form', 'register_button', NULL, array( 'data-controller' => 'core.front.system.register') );
$form->add( new \IPS\Helpers\Form\Password( 'password', '', TRUE, array( 'minLength' => 3, 'maxLength' => 15 ) ) );
$form->add( new \IPS\Helpers\Form\Password( 'password_confirm', '', TRUE, array( 'confirm' => 'password', 'minLength' => 3, 'maxLength' => 15 ) ) );

0

Сообщить об этой теме:


  • 4 Страниц +
  • 1
  • 2
  • 3
  • Последняя »


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2018 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна