Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano

Witam, mam problem z nadawanie premium w panelu gracza na forum IPB ogólnie punkty game score pobiera po zakupie usługi lecz nie nadaje jej w bazie badanych. Panel gracza dodam że działa na bazie forum oraz serwera [Gamescore pobiera z bazy forum ] = [Premium na serwerze] .   Kod pogrubiony powinien nadać usługe. Bardzo prosiłbym o pomoc nawet odpłatną. Pozdrawiam

 

 

// Cały kod w załączniku

 

 

if ( ! class_exists( 'dbMain' ) )
        {
            require_once( IPS_KERNEL_PATH.'classDb.php' );
            require_once( IPS_KERNEL_PATH.'classDb' . ucwords($this->settings['sql_driver']) . '.php' );
        }
        require_once( IPSLib::getAppDir( 'kokpit' ) . '/sources/classes/kokpit.php' );
        $classname = "db_driver_" . $this->settings['sql_driver'];
     
        $RDB = new $classname;
     
        $RDB->obj['sql_database']            = kokpitLib::$db_database;
        $RDB->obj['sql_user']                = kokpitLib::$db_user;
        $RDB->obj['sql_pass']                = kokpitLib::$db_pass;
        $RDB->obj['sql_host']                = kokpitLib::$db_host;
        $RDB->connect();    
         if($this->memberData['userid']) { 
        $RDB->query('UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid='.$this->memberData['userid'].' ORDER BY id');
            $RDB->execute();


                    $this->registry->output->redirectScreen( 'Zakupiłeś: '.$shop['name'].'. Dziękujemy za zakup i życzymy miłej gry.', $this->settings['base_url'] . 'app=kokpit&module=shop');            
                }

main.php

Opublikowano

No właśnie to jest dobrze raczej bo po userid w bazie ipb szuka mi  id uzytkownika w bazie serwera 

$RDB - zapytanie które odsyła do bazy serwera  

$this - szuka w member niby kolumny userid

 

 $RDB->query('UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid='.$this->memberData['userid'].' ORDER BY id');
            $RDB->execute();

 

Tak wyglada struktura

 

 

Bez tytułu.png

12.png

Opublikowano (edytowane)

To jest ID pod panel gracza w którym osoba autoryzuje swoje konto w grze.  I za pomocą tego userid z tabeli ipb _members   szuka identycznego w  bazie serwerowej w tabeli lss_users > id 

	
if (!class_exists('dbMain')) {
  require_once(IPS_KERNEL_PATH . 'classDb.php');
  require_once(IPS_KERNEL_PATH . 'classDb' . ucwords($this->settings['sql_driver']) . '.php');
}

require_once(IPSLib::getAppDir('kokpit') . '/sources/classes/kokpit.php');

$driver = "db_driver_" . $this->settings['sql_driver'];
$pdo = new $driver;
$pdo->obj['sql_database'] = kokpitLib::$db_database;
$pdo->obj['sql_user'] = kokpitLib::$db_user;
$pdo->obj['sql_pass'] = kokpitLib::$db_pass;
$pdo->obj['sql_host'] = kokpitLib::$db_host;
$pdo->connect();    

if ($this->memberData['userid']) { 
  $pdo->query("UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid=':userId' ORDER BY id");
  $pdo->bindValue(':userId', $this->memberData['userid'], PDO::PARAM_INT);
  $pdo->execute();

  $this->registry->output->redirectScreen(
    sprintf('Zakupiłeś: %s. Dziękujemy za zakup i życzymy miłej gry.', $shop['name']), 
    sprintf('%sapp=kokpit&module=shop', $this->settings['base_url'])
  );
}
 

edit@ 

 

Mam już taki kod po to lecz wywala mi błąd 

 

mySQL query error: UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid=':userId' ORDER BY id

SQL error: Unknown column 'userid' in 'where clause'
SQL error code: 1054
Date: Sunday 19th April 2020 10:19:41 AM


 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Date: Sun, 19 Apr 2020 10:19:41 +0000
 Error: 1054 - Unknown column 'userid' in 'where clause'
 IP Address: 83.29.149.33 - /index.php?app=kokpit&module=shop
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid=':userId' ORDER BY id
 .--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
 | File                                                                       | Function                                                                      | Line No.          |
 |----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
 | admin/sources/base/ipsController.php                                       | [public_kokpit_shop_main].doExecute                                           | 306   

 

Edytowane przez luki2407
Opublikowano (edytowane)
24 minuty temu, luki2407 napisał:

Unknown column 'userid' in 'where clause'

Ten błąd zdecydowanie odnosi się do źle ułożonego zapytania. Sprawdź jeszcze raz tabelę i zapytanie.

userid=':userId'

To mi nie pasuje za bardzo.

Edytowane przez aXen

See me on GitHub or aXenDev.net!

Opublikowano (edytowane)

Nie rozumiem tego " ORDER BY id" przy aktualizacji rekordu.

Spróbuj:

	if (!class_exists('dbMain'))
	{
		require_once(IPS_KERNEL_PATH . 'classDb.php');
		require_once(IPS_KERNEL_PATH . 'classDb' . ucwords($this->settings['sql_driver']) . '.php');
	}

	require_once(IPSLib::getAppDir('kokpit') . '/sources/classes/kokpit.php');

	$driver = "db_driver_" . $this->settings['sql_driver'];
	$pdo = new $driver;
	$pdo->obj['sql_database'] = kokpitLib::$db_database;
	$pdo->obj['sql_user'] = kokpitLib::$db_user;
	$pdo->obj['sql_pass'] = kokpitLib::$db_pass;
	$pdo->obj['sql_host'] = kokpitLib::$db_host;
	$pdo->connect();    

	if ($this->memberData['userid'])
	{
		$pdo->prepare("UPDATE lss_users SET premium = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid = :userId");
		$pdo->bindValue( ":userId", $this->memberData['userid'], PDO::PARAM_INT );
		$pdo->execute();

		$this->registry->output->redirectScreen(
			sprintf('Zakupiłeś: %s. Dziękujemy za zakup i życzymy miłej gry.', $shop['name']), 
			sprintf('%sapp=kokpit&module=shop', $this->settings['base_url'])
		);
	}

Ewentualnie

$pdo->prepare("UPDATE lss_users SET premium = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid = `:userId`");

 

Edytowane przez Weak.
Opublikowano (edytowane)

@Weak.  Spróbowałem ale strona nie działa patrzyłem też czy nadało premium lecz nie ;(

Ta strona nie działa

Serwer la-rp.pl nie może teraz obsłużyć tego żądania.

HTTP ERROR 500
 
@aXen 
userid=':userId' 

 

Zmieniłem na 

id=':id'  

I tez nie działa bo to zapytanie odnosi sie chyba całe do lss_users  

Edytowane przez luki2407
Opublikowano (edytowane)
if ($this->memberData['userid'])
{
	$pdo->prepare("UPDATE lss_users SET premium = :time WHERE userid = :userId");
	$pdo->bindValue( ":userId", $this->memberData['userid'], PDO::PARAM_INT );
	$pdo->bindValue( ":time", time() + 2592000, PDO::PARAM_INT );
	$pdo->execute();

	$this->registry->output->redirectScreen(
		sprintf('Zakupiłeś: %s. Dziękujemy za zakup i życzymy miłej gry.', $shop['name']), 
		sprintf('%sapp=kokpit&module=shop', $this->settings['base_url'])
	);
}

Lepsze to niż DATE_ADD(CURDATE(), INTERVAL 30 DAY). Sprawdź logi, tam pewnie jakaś wskazówka jest.

 

$pdo->prepare("UPDATE lss_users SET premium = :time WHERE id = :userId");

?

Edytowane przez Weak.
Opublikowano

No niby lepsze ale ci powiem dalej nic :( strona nie działa po zakupie punkty  gamescore wzieło  a usługi nie nadało ;/ 

 

tu daje czysty kod 

 

 

<?php
		
class public_kokpit_shop_main extends ipsCommand
{
	public function doExecute( ipsRegistry $registry ) 
	{
		if(!$this->memberData['member_id'])
		{
			$this->registry->getClass('output')->showError("Musisz być zalogowany(a) aby móc przeglądać tą sekcję. ", 0);
			return;
		}
		$apikey = '';
		$this->DB->query('SELECT * FROM shop');
		$this->DB->execute;
		while($s = $this->DB->fetch())
		{
			$i++;
			$oList[] = $s;
		}
		
		$this->DB->query('SELECT points FROM members WHERE member_id='.$this->memberData['member_id']);
		$this->DB->execute;
		$gamescore = $this->DB->fetch();
		
		foreach($oList as $shop) {
			if(isset($this->request['shop_'.$shop['id']])) {
				if($gamescore['points'] >= $shop['cost']) {
					$gamescore['points'] -= $shop['cost'];
					$this->DB->query('UPDATE members SET points='.$gamescore['points'].' WHERE member_id='.$this->memberData['member_id']);
										$this->DB->execute;



					$this->registry->output->redirectScreen( 'Zakupiłeś: '.$shop['name'].'. Dziękujemy za zakup i życzymy miłej gry.', $this->settings['base_url'] . 'app=kokpit&module=shop');			
				}
				else
				{
					$this->registry->output->redirectScreen( 'Nie posiadasz tylu punktów na koncie.', $this->settings['base_url'] . 'app=kokpit&module=shop');
				}		
			}	
		}
		
		if(isset($this->request['submit'])) {
			$sms_amount = $this->request['stype'];
			$sms_code = $this->request['scode'];
			$pamount = 0;
			switch($this->request['stype']) {
				case 1: 
					$pamount = 1000;
				case 2:
					$pamount = 2000;
				case 3:
					$pamount = 3000;
				case 4:
					$pamount = 4100;
				case 5:
					$pamount = 5150;
				case 6:
					$pamount = 6100;
				case 9:
					$pamount = 9200;
				case 19:
					$pamount = 21000;
				case 25:
					$pamount = 30000;           
				break;
			}
			$contents = file_get_contents("https://admin.serverproject.eu/api/smsapi.php?key=$apikey&amount=".$sms_amount."&code=".$sms_code);
			
			if ($contents)
			{
				$contents = json_decode($contents);
			 
					if ($contents->error)
					{   
						$this->registry->output->redirectScreen( 'Błąd: '.$contents->error, $this->settings['base_url'] . 'app=kokpit&module=shop');
					}
					else
					{
						if ($contents->status == 'ok')
						{
							$gamescore['points'] += $pamount;
							$this->DB->query('UPDATE members SET points='.$gamescore['points'].' WHERE member_id='.$this->memberData['member_id']);
							$this->DB->execute;							
							$this->registry->output->redirectScreen( 'Kod poprawny. Portfel właściciela został doładowany kwotą '.$pamount.' punktów.', $this->settings['base_url'] . 'app=kokpit&module=shop');
						}
						else
						{
							$this->registry->output->redirectScreen( 'Nieznany błąd.', $this->settings['base_url'] . 'app=kokpit&module=shop');
						}
					}
				}
			else
			{
				echo "Błąd połączenia z API.";
			}
		}
		
		$template = $this->registry->output->getTemplate('kokpit')->shop($oList, $gamescore['points']);
		$this->registry->getClass('output')->addContent($template);
		$this->registry->output->setTitle('Sklep');
		$this->registry->getClass('output')->sendOutput();
	}
}
?>

oraz kod autoryzacji jak to wygląda już nie mam pojęcia w logach nic nie ma :(  dzięki za pomoc i chęci

 


 <?php
class public_kokpit_main_main extends ipsCommand
{
	
	public function doExecute( ipsRegistry $registry ) 
	{
		if(!$this->memberData['member_id']) {
			return $this->registry->getClass('output')->showError( 'Nie jesteś zalogowany.' );
		}
		if ( ! class_exists( 'dbMain' ) )
		{
			require_once( IPS_KERNEL_PATH.'classDb.php' );
			require_once( IPS_KERNEL_PATH.'classDb' . ucwords($this->settings['sql_driver']) . '.php' );
		}
		require_once( IPSLib::getAppDir( 'kokpit' ) . '/sources/classes/kokpit.php' );
		$classname = "db_driver_" . $this->settings['sql_driver'];
	 
		$RDB = new $classname;
	 
		$RDB->obj['sql_database']			= kokpitLib::$db_database;
		$RDB->obj['sql_user']				= kokpitLib::$db_user;
		$RDB->obj['sql_pass']				= kokpitLib::$db_pass;
		$RDB->obj['sql_host']				= kokpitLib::$db_host;
		$RDB->connect();		
		if($this->memberData['userid']) {
			$RDB->query('SELECT * FROM lss_characters WHERE userid='.$this->memberData['userid'].' ORDER BY id');
			$RDB->execute();

			while( $r = $RDB->fetch() )
			{
				$i++;

				$r['zlicz'] = $i;
				$r['hours'] = floor($r['playtime'] / 3600);
				$r['minutes'] = floor(($r['playtime'] / 60) % 60);
				if($r['gender'] == "M??czyzna") $r['gender'] = "Mężczyzna";
				$charList[] = $r;
			}	
		}
		if(isset($this->request['auth'])) {
			if($this->request['pass1'] == $this->request['pass2']) {
				$RDB->query("SELECT COUNT(*) as count FROM lss_users WHERE login='".$this->request['login']."'");
				$RDB->execute();
				$r = $RDB->fetch();
				if(!$r['count']) {
					$RDB->query("INSERT INTO lss_users (login, hash, quiz) VALUES ('".$this->request['login']."', MD5(CONCAT(LOWER(login),'MRFX_01','".$this->request['pass1']."')), 1)");
					$RDB->execute();		
					$userid = $RDB->getInsertId();
					$this->DB->query("UPDATE members SET userid=".$userid." WHERE member_id=".$this->memberData['member_id'].";");
					$this->DB->execute();
					$this->registry->output->redirectScreen( 'Konto zostało zautoryzowane.', $this->settings['base_url'] . 'app=kokpit');
				} 
				else {
					$this->registry->output->redirectScreen( 'Takie konto już istnieje.', $this->settings['base_url'] . 'app=kokpit');
				}
			}
			else {
				$this->registry->output->redirectScreen( 'Podaj dwa takie same hasła.', $this->settings['base_url'] . 'app=kokpit');
			}

		}
		$template = $this->registry->output->getTemplate('kokpit')->main($charList, count($charList));
			
		$RDB->disconnect();
		$this->registry->getClass('output')->addContent($template);
		$this->registry->output->setTitle('Panel postaci');
		$this->registry->getClass('output')->sendOutput();
	}
}
?>

 

Opublikowano

Tak sobie patrze

mySQL query error: UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE userid=':userId' ORDER BY id

W tabeli lss_users nie masz userid, a id, userid jest w members, więc gdzie jest premium? Namieszałeś tu -,-

Opublikowano (edytowane)

No userid jest w ipb_member a premium w lss_users no troszkę pomieszało sie to jak miałoby to wygladac 

 

UPDATE `lss_users` SET `premium` = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE id=':id' ORDER BY id
Edytowane przez luki2407
Opublikowano

To na logikę

$pdo->prepare("UPDATE lss_users SET premium = :time WHERE id = :id");
$pdo->bindValue( ":time", time() + 2592000, PDO::PARAM_INT );
$pdo->bindValue( ":id", $this->memberData['userid'], PDO::PARAM_INT );
$pdo->execute();

Ewentualnie jak Ci nie działa prepare, to daj swoje:

$pdo->query("UPDATE lss_users SET premium = :time WHERE id = :id");

 

Opublikowano (edytowane)

Pod query poszło cos ino pod tym kodem bo z tym time nie dziala oraz po zakupie nadało wszystkim kontom premium  a powinno użytkownikowi z ipb_members za pomoca jego userid szukać tego samego id w lss_users i nadać premium jak mówiłem wczesniej


 

$pdo->query("UPDATE lss_users SET premium = DATE_ADD(CURDATE(), INTERVAL 30 DAY) WHERE id = id");
//$pdo->bindValue( ":time", time() + 2592000, PDO::PARAM_INT );
$pdo->bindValue( "id", $this->memberData['userid'], PDO::PARAM_INT );
$pdo->execute();

	$this->registry->output->redirectScreen(
		sprintf('Zakupiłeś: %s. Dziękujemy za zakup i życzymy miłej gry.', $shop['name']), 
		sprintf('%sapp=kokpit&module=shop', $this->settings['base_url'])
	);
}

 

Edytowane przez luki2407

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.