Skocz do zawartości
  • Zarejestruj się
  • 0
X3nO

Funkcja first() wyswietla blad No message

Pytanie

Witam, mam problem z funkcją first(), mianowicie to zapytanie:

				$check_values = \IPS\Db::i()->select(
					'id',
					'amx_rejestracja_konta',
					array("Name=? AND Password=?", \IPS\Request::i()->amxPanel_auth_name, \IPS\Request::i()->amxPanel_auth_pass)
					)->first();

Daje ten błąd:

Cytat

UnderflowException thrown with message "

Reszta kodu

		$check = \IPS\Db::i()->select(
			'id',
			'amx_rejestracja_konta',
			array('ipsid=?', \IPS\Member::loggedIn()->member_id)
		);
		$check = count($check);

		if (!$check) {
			$form = new \IPS\Helpers\Form( 'form', 'amxPanel_auth');
			$form->addHeader(\IPS\Member::loggedIn()->language()->addToStack( 'amxPanel_auth_header' ));
			$form->add( new \IPS\Helpers\Form\Text( 'amxPanel_auth_name', NULL, TRUE,
			array( 'minLength' => 2, 'maxLength' => 20), NULL, NULL, NULL, 'nazwa' ) );
			$form->add( new \IPS\Helpers\Form\Password('amxPanel_auth_pass', NULL, TRUE,
			array( 'minLength' => 2, 'maxLength' => 20 ), NULL, NULL, NULL, 'pass' ) );

			if ($values = $form->values()) {
				$check_values = \IPS\Db::i()->select(
					'id',
					'amx_rejestracja_konta',
					array("Name=? AND Password=?", \IPS\Request::i()->amxPanel_auth_name, \IPS\Request::i()->amxPanel_auth_pass)
					)->first();

				if ($check_values['id']) {
					$check_authed = \IPS\Db::i()->select(
						'id',
						'amx_rejestracja_konta',
						array("Name=? AND ipsid=?", \IPS\Request::i()->amxPanel_auth_name, 0)
					)->first();

					if ($check_authed) {
						\IPS\Db::i()->update(
							'amx_rejestracja_konta',
							array( "Name=? AND ipsid=?", \IPS\Request::i()->amxPanel_auth_name, \IPS\Member::loggedIn()->member_id )
						)->first();
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Zautoryzowano konto.') );
					} else {
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane konto jest już zautoryzowane') );
					}
				} else {
					\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane dane są nieprawidłowe.') );
				}
			}
			\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'main' )->authArea($form);

Próbowałem try catch lecz wtedy wyświetla komunikat o nieprawidłowych danych, bardzo proszę o pomoc ;x

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Polecane posty

  • 0

I prawidłowo.

Kod jaki dałeś zwraca pierwszy element, który spełnia podane kryteria, ale w przypadku braku danych rzucany jest wyjątek.

Powinieneś to zawrzeć w try...catch:

try
		{
			zapytanie
		}
		catch( \UnderflowException $e ){ FORMULARZ }

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Tak to ma wyglądać? 

			if ($values = $form->values()) {
				try {
					$check_values = \IPS\Db::i()->select(
						'id',
						'amx_rejestracja_konta',
						array("Name=? AND Password=?", \IPS\Request::i()->amxPanel_auth_name, \IPS\Request::i()->amxPanel_auth_pass)
					)->first();
				}
				catch( \UnderflowException $e ) {
				if ($check_values['id']) {
					$check_authed = \IPS\Db::i()->select(
						'id',
						'amx_rejestracja_konta',
						array("Name=? AND ipsid=?", \IPS\Request::i()->amxPanel_auth_name, 0)
					)->first();

					if ($check_authed) {
						\IPS\Db::i()->update(
							'amx_rejestracja_konta',
							array( "Name=? AND ipsid=?", \IPS\Request::i()->amxPanel_auth_name, \IPS\Member::loggedIn()->member_id )
						)->first();
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Zautoryzowano konto.') );
					} else {
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane konto jest już zautoryzowane') );
					}
				} else {
					\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane dane są nieprawidłowe.') );
				}
				}
			}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

teraz mieszasz w pierwszym poście dałeś inaczej tutaj inaczej. mieszasz też wszystko. Jeśli operujesz na danych formularza to nie pobierasz ich z requestu, tylko z $values. ale ogólnie każde użycie select( '*' ) czy jakiegoś pola (inne niż COUNT(*) ) wymaga try ... catch

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

dam caly kod, 

		$check = \IPS\Db::i()->select(
			'id',
			'amx_rejestracja_konta',
			array('ipsid=?', \IPS\Member::loggedIn()->member_id)
		);
		$check = count($check);

		if (!$check) {
			$form = new \IPS\Helpers\Form( 'form', 'amxPanel_auth');
			$form->addHeader(\IPS\Member::loggedIn()->language()->addToStack( 'amxPanel_auth_header' ));
			$form->add( new \IPS\Helpers\Form\Text( 'amxPanel_auth_name', NULL, TRUE,
			array( 'minLength' => 2, 'maxLength' => 20), NULL, NULL, NULL, 'nazwa' ) );
			$form->add( new \IPS\Helpers\Form\Password('amxPanel_auth_pass', NULL, TRUE,
			array( 'minLength' => 2, 'maxLength' => 20 ), NULL, NULL, NULL, 'pass' ) );

			if ($values = $form->values()) {
				try {
					$check_values = \IPS\Db::i()->select(
						'id',
						'amx_rejestracja_konta',
						array("Name=? AND Password=?", $values['amxPanel_auth_name'], $values['amxPanel_auth_pass'])
					)->first();
				}
				catch( \UnderflowException $e ) {}
				if ($check_values['id']) {
					try {
						$check_authed = \IPS\Db::i()->select(
							'id',
							'amx_rejestracja_konta',
							array("Name=? AND ipsid=?",  $values['amxPanel_auth_name'], 0)
						)->first();
					}
					catch( \UnderflowException $e ) {}
					if ($check_authed) {
						\IPS\Db::i()->update(
							'amx_rejestracja_konta',
							array( "Name=? AND ipsid=?",  $values['amxPanel_auth_name'], \IPS\Member::loggedIn()->member_id )
						)->first();
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Zautoryzowano konto.') );
					} else {
						\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane konto jest już zautoryzowane') );
					}
				} else {
					\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=amxpanel", 'front', 'main' ), \IPS\Member::loggedIn()->language()->addToStack('Podane dane są nieprawidłowe.') );
				}
			}
			\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'main' )->authArea($form);

zmienilem requesty na $values, dodalem try catch i to samo ;x

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
1 godzinę temu, X3nO napisał:

$check = \IPS\Db::i()->select( 'id', 'amx_rejestracja_konta', array('ipsid=?', \IPS\Member::loggedIn()->member_id) ); $check = count($check); if (!$check) {

bo tutaj masz dalej to samo

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×

Ważne informacje

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.