Skocz do zawartości
  • 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


  • Kto przegląda   0 użytkowników

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

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.