Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] ze skryptem item shop


Janu

Rekomendowane odpowiedzi

Opublikowano

Plik php:





<?php phpinfo(); ?>

Gdzie to mam wpisać ?

 

Edit: Zmieniłem linijke:

$sql = "UPDATE account SET coins = '$coinsneu', pos = '$pos' WHERE id = $userid ";

Na

$sql = "UPDATE account SET coins = '$coinsneu', 'pos' = '$pos' WHERE id = $userid ";

 

Dodałem ' do pos i teraz wyświetla mi:

 

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 ''pos' = '5' WHERE id =' at line 1

Opublikowano

Moja poprawka:

 

 

<?PHP
	ERROR_REPORTING(0);
if(!file_exists('./inc/config.inc.php')) {
	header('Location: install.php');
}
	session_start();
	require("./inc/config.inc.php");
	require("./inc/functions.inc.php");
	$sqlHp = mysql_connect(SQL_HP_HOST, SQL_HP_USER, SQL_HP_PASS);
	$sqlServ = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
if(!is_resource($sqlServ) OR !is_resource($sqlHp)) {
	exit("ItemShop jest wyłączony albo jeszcze w budowie.");
  }
	require("./inc/head.inc.php");
echo '<?xml version="1.0"?>';
?>
<body background="as.jpg">

<?php   
include ("inc/config_account.php");
	$itemid = $_GET['itemid'];
	$sql = "SELECT * FROM `itemshop` WHERE `itemid` = '".$itemid."'"; 
	$result = mysql_query ($sql); 
if (mysql_num_rows ($result) > 0) 
{ 
	$data = mysql_fetch_array ($result); 
	$coins = $data["coins"]; 
	$coins2 = $_SESSION["user_coins"];
	$userid = $_SESSION["user_id"];
	$pos = $_SESSION["user_pos"];
if($coins2 < $coins)
{
	echo "<b>Posiadasz za malo monet aby kupic ten przedmiot </b><br>" ;
	echo "<meta http-equiv=\"refresh\" content=\"2;url=is.php\">"  ; 
}
else {
	$coinsneu = $coins2 - $coins ;
	echo "<center><b>Kupiles przedmiot!<br>Twoj aktualny stan konta: $coinsneu </b><br></center>";
	$pos = $pos + 1;
if($pos == "42")
{
	$pos = "0";
	$_SESSION["user_pos"] = $pos ;
}
	$_SESSION["user_pos"] = $pos ;
	$sql = "UPDATE `account` SET `coins` = '".$coinsneu."', `pos` = '".$pos."' WHERE `id` = '".$userid."' "; 
	$ergebnis = mysql_query($sql); 
if ($ergebnis == true)   
{ 
	$_SESSION["user_coins"] = $coinsneu ; 
	
                  
include ("inc/config_player.php");                         

$sql = "INSERT INTO `item` (
`id` ,
`owner_id` ,
`window` ,
`pos` ,
`count` ,
`vnum` ,
`socket0` ,
`socket1` ,
`socket2` ,
`socket3` ,
`socket4` ,
`socket5` ,
`attrtype0` ,
`attrvalue0` ,
`attrtype1` ,
`attrvalue1` ,
`attrtype2` ,
`attrvalue2` ,
`attrtype3` ,
`attrvalue3` ,
`attrtype4` ,
`attrvalue4` ,
`attrtype5` ,
`attrvalue5` ,
`attrtype6` ,
`attrvalue6`
)
VALUES (
NULL , '".$userid."', 'MALL', '".$pos."', '1', '".$itemid."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '')" ;
	$ergebnis = mysql_query($sql);
	mysql_close()  ;
if($ergebnis == true)
{
	echo "<center><b>Prosze czekac... </b><br></center>";
	echo "<meta http-equiv=\"refresh\" content=\"3;url=is.php\">";
}
else {
	echo "błędnie złożono pytanie nr.2" ;
}     

} else {
   echo "<b>Błędnie złozono pytanie !!</b>" ;
} } } 
?>
<?PHP if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) { ?>
<?PHP } else { ?>
<?php } ?>

Co do tego z błędem połączenia:

	$sql = "UPDATE account SET coins = '$coinsneu', pos = '$pos' WHERE id = $userid "; 
	$ergebnis = mysql_query($sql); 
if ($ergebnis == true)   
{
jest jakis kod }
else {
   echo "<b>Problem z polaczeniem z Baza Danych !!</b>" ;
}

Jaki problem z połączeniem do bazy skoro ten warunek sprawdza próbę aktualizacji monet.

Natomiast sprawdzenie połączenia jest tu:

$sqlHp = mysql_connect(SQL_HP_HOST, SQL_HP_USER, SQL_HP_PASS);
	$sqlServ = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
if(!is_resource($sqlServ) OR !is_resource($sqlHp)) {
	exit("ItemShop jest wyłączony albo jeszcze w budowie.");
  }

 

 

Pomogłem? Daj Like'a

:)

Opublikowano

Moja poprawka:

 

 



<?PHP
	ERROR_REPORTING(0);
if(!file_exists('./inc/config.inc.php')) {
	header('Location: install.php');
}
	session_start();
	require("./inc/config.inc.php");
	require("./inc/functions.inc.php");
	$sqlHp = mysql_connect(SQL_HP_HOST, SQL_HP_USER, SQL_HP_PASS);
	$sqlServ = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
if(!is_resource($sqlServ) OR !is_resource($sqlHp)) {
	exit("ItemShop jest wyłączony albo jeszcze w budowie.");
  }
	require("./inc/head.inc.php");
echo '<?xml version="1.0"?>';
?>
<body background="as.jpg">

<?php   
include ("inc/config_account.php");
	$itemid = $_GET['itemid'];
	$sql = "SELECT * FROM `itemshop` WHERE `itemid` = '".$itemid."'"; 
	$result = mysql_query ($sql); 
if (mysql_num_rows ($result) > 0) 
{ 
	$data = mysql_fetch_array ($result); 
	$coins = $data["coins"]; 
	$coins2 = $_SESSION["user_coins"];
	$userid = $_SESSION["user_id"];
	$pos = $_SESSION["user_pos"];
if($coins2 < $coins)
{
	echo "<b>Posiadasz za malo monet aby kupic ten przedmiot </b><br>" ;
	echo "<meta http-equiv=\"refresh\" content=\"2;url=is.php\">"  ; 
}
else {
	$coinsneu = $coins2 - $coins ;
	echo "<center><b>Kupiles przedmiot!<br>Twoj aktualny stan konta: $coinsneu </b><br></center>";
	$pos = $pos + 1;
if($pos == "42")
{
	$pos = "0";
	$_SESSION["user_pos"] = $pos ;
}
	$_SESSION["user_pos"] = $pos ;
	$sql = "UPDATE `account` SET `coins` = '".$coinsneu."', `pos` = '".$pos."' WHERE `id` = '".$userid."' "; 
	$ergebnis = mysql_query($sql); 
if ($ergebnis == true)   
{ 
	$_SESSION["user_coins"] = $coinsneu ; 
	
                  
include ("inc/config_player.php");                         

$sql = "INSERT INTO `item` (
`id` ,
`owner_id` ,
`window` ,
`pos` ,
`count` ,
`vnum` ,
`socket0` ,
`socket1` ,
`socket2` ,
`socket3` ,
`socket4` ,
`socket5` ,
`attrtype0` ,
`attrvalue0` ,
`attrtype1` ,
`attrvalue1` ,
`attrtype2` ,
`attrvalue2` ,
`attrtype3` ,
`attrvalue3` ,
`attrtype4` ,
`attrvalue4` ,
`attrtype5` ,
`attrvalue5` ,
`attrtype6` ,
`attrvalue6`
)
VALUES (
NULL , '".$userid."', 'MALL', '".$pos."', '1', '".$itemid."', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '')" ;
	$ergebnis = mysql_query($sql);
	mysql_close()  ;
if($ergebnis == true)
{
	echo "<center><b>Prosze czekac... </b><br></center>";
	echo "<meta http-equiv=\"refresh\" content=\"3;url=is.php\">";
}
else {
	echo "błędnie złożono pytanie nr.2" ;
}     

} else {
   echo "<b>Błędnie złozono pytanie !!</b>" ;
} } } 
?>
<?PHP if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) { ?>
<?PHP } else { ?>
<?php } ?>

Co do tego z błędem połączenia:



	$sql = "UPDATE account SET coins = '$coinsneu', pos = '$pos' WHERE id = $userid "; 
	$ergebnis = mysql_query($sql); 
if ($ergebnis == true)   
{
jest jakis kod }
else {
   echo "<b>Problem z polaczeniem z Baza Danych !!</b>" ;
}

Jaki problem z połączeniem do bazy skoro ten warunek sprawdza próbę aktualizacji monet.

Natomiast sprawdzenie połączenia jest tu:



$sqlHp = mysql_connect(SQL_HP_HOST, SQL_HP_USER, SQL_HP_PASS);
	$sqlServ = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
if(!is_resource($sqlServ) OR !is_resource($sqlHp)) {
	exit("ItemShop jest wyłączony albo jeszcze w budowie.");
  }

 

 

 

 

 

Kupiles przedmiot!

Twoj aktualny stan konta: 80

Błędnie złozono pytanie !!

 

Teraz wyświetla się takie coś.

Opublikowano

nie no jest rekord gdzie masz 80 monet wiec jest ok.

zmień:

if ($ergebnis == true)

na:

if ($ergebnis = true)

W obu miejscach, powinno już działać.

Pomogłem? Daj Like'a

:)

Opublikowano

nie no jest rekord gdzie masz 80 monet wiec jest ok.

zmień:



if ($ergebnis == true)

na:



if ($ergebnis = true)

W obu miejscach, powinno już działać.

 

 

Teraz niby wszystko wygląd ok. Wyświetla się:

 

 

Kupiles przedmiot!

Twoj aktualny stan konta: 0

Prosze czekac...

 

Ale pisze aktualny stan konta 0 mimo ze mam 90. W tym pliku tam gdzie jest coins ja zmieniłem wczesniej na cash dlatego ze kiedy mialem coins to mi pisalo "Masz za mało monet aby kupic ten przedmiot". Ale w orginale bylo coins. Moze to ma jakies znaczenie?

Opublikowano

No tak tyle że jak kupiłeś item to chyba musisz mieć mniej niż wcześniej . Ja wszedzie widę coins

Pomogłem? Daj Like'a

:)

Opublikowano

No tak tyle że jak kupiłeś item to chyba musisz mieć mniej niż wcześniej . Ja wszedzie widę coins

Zmieniłem na coins i teraz mam 100 coins w bazie. Po kupieniu itemu za 20 coins pisze ze "Twoj aktualny stan konta: 80" czyli dobrze ale to sie nie zapisuje. Bo w bazie mam dalej 100 a jak kupie drugi raz ten item to znowu mi pisze 80 a powinno byc 60 bo przecież kupuje drugi raz.

 

Edit: Ale przedmiot się dodaje w grze :)

Opublikowano

Oszaleliście Wy wszyscy?

Nie znacie standardów SQL to się nie odzywajcie. Kombinujecie jak koń pod górę zmieniając apostrofy i backticki na prawo i lewo nie mając pojęcia co robicie.

 

Moja pierwsza rada:

Wywal to wszystko i używaj PDO.

 

nazwa tabeli, kolumny: `nazwa`

Wartość, w zależności od typu 'string' lub integer bez niczego, np: 1

'1' - bezsens.

 

Żonglowanie cudzysłowami w zapytaniu gdy nie jest to potrzebne - nie jest potrzebne, wręcz wzbronione.

Zapytania w PHP zawiera się głównie w podwójnych apostrofach "

Tak można dać zmienne w stringu, dla pewności {$var}

Wtedy lepiej widać, przynajmniej np++ koloruje to bardzo klarownie.

 

Przy dodawaniu rekordu nie wypisuj dwudziestu sześciu kolumn których użyjesz, tylko wpisz wartości zgodnie ze strukturą tabeli.

 

Wyświetl zapytanie w php żeby sprawdzić jego poprawność, wklep do PMA razem z wartościami ze zmiennych. Jak on sobie z tym poradzi masz pewność że zapytanie jest poprawne, jeśli nie, to pokaże Ci błąd. Swoją drogą polecam HeidiSQL jako client MySQL.

 

Naucz się SQL.

Opublikowano

Oszaleliście Wy wszyscy?

Nie znacie standardów SQL to się nie odzywajcie. Kombinujecie jak koń pod górę zmieniając apostrofy i backticki na prawo i lewo nie mając pojęcia co robicie.

 

Moja pierwsza rada:

Wywal to wszystko i używaj PDO.

 

nazwa tabeli, kolumny: `nazwa`

Wartość, w zależności od typu 'string' lub integer bez niczego, np: 1

'1' - bezsens.

 

Żonglowanie cudzysłowami w zapytaniu gdy nie jest to potrzebne - nie jest potrzebne, wręcz wzbronione.

Zapytania w PHP zawiera się głównie w podwójnych apostrofach "

Tak można dać zmienne w stringu, dla pewności {$var}

Wtedy lepiej widać, przynajmniej np++ koloruje to bardzo klarownie.

 

Przy dodawaniu rekordu nie wypisuj dwudziestu sześciu kolumn których użyjesz, tylko wpisz wartości zgodnie ze strukturą tabeli.

 

Wyświetl zapytanie w php żeby sprawdzić jego poprawność, wklep do PMA razem z wartościami ze zmiennych. Jak on sobie z tym poradzi masz pewność że zapytanie jest poprawne, jeśli nie, to pokaże Ci błąd. Swoją drogą polecam HeidiSQL jako client MySQL.

 

Naucz się SQL.

Konkrety proszę. Wszystko juz ładnie działa dzięki koledze vertipl i Nygol, zostało tylko to że: kiedy kupuje przedmiot to nie odemuje mi coins w bazie. Tak jak by się nie zapisuje.

Opublikowano

Kochany @The Fugutive uwierz że apostrofy mają znaczenie. U mnei czasami przez nie zaoytanie nie mogło sie wykonać gdy one były. Chociaż jest to standard to w PHP'ie nie działą czasem.

@Topic

Janu @vertipl źle ci powiedział. Pisząc

if($ergebnis = true)
warunek ZAWSZE ale to ZAWSZE ci sie wykona bo do zmiennej $ergebnis PRZYPISUJESZ true. Pogmatwałeś operatory:
= to przypisanie
== porównanie
=== identyczne z.
Co do Coins to sprwadź czy wykonuje ci się ten UPDATE. Ponadto @The FUgutive dobrze ci mówi jeśli coins to liczba nie pisz w zapytaniu coins = '$coins' tylko coins = $coins.

hcq0.png


Opublikowano

 

Kochany @The Fugutive uwierz że apostrofy mają znaczenie. U mnei czasami przez nie zaoytanie nie mogło sie wykonać gdy one były. Chociaż jest to standard to w PHP'ie nie działą czasem.

 

@Topic

Janu @vertipl źle ci powiedział. Pisząc

if($ergebnis = true)
warunek ZAWSZE ale to ZAWSZE ci sie wykona bo do zmiennej $ergebnis PRZYPISUJESZ true. Pogmatwałeś operatory:

= to przypisanie

== porównanie

=== identyczne z.

Co do Coins to sprwadź czy wykonuje ci się ten UPDATE. Ponadto @The FUgutive dobrze ci mówi jeśli coins to liczba nie pisz w zapytaniu coins = '$coins' tylko coins = $coins.

 

ale jak zmienic

if($ergebnis = true)

na

if($ergebnis == true)

czyli tak jak bylo wczesniej to wysiwetla mi:

 

Kupiles przedmiot!

Twoj aktualny stan konta: 80

Problem z polaczeniem z Baza Danych !!Unknown column 'pos' in 'field list'

 

Co mam z tym zrobic zeby to działało jak należy?

Opublikowano

Zapomniałem o najważniejszym czyli tym warunku, dzięki że mnie wyręczono.

 

Chcesz konkrety? Używasz kolumny `pos` której nie ma.

Opublikowano

Zapomniałem o najważniejszym czyli tym warunku, dzięki że mnie wyręczono.

 

Chcesz konkrety? Używasz kolumny `pos` której nie ma.

Zmieniam w linicje:

$sql = "UPDATE account SET coins = '$coinsneu', pos = '$pos' WHERE id = $userid ";

 

'$pos'

 

na

 

$pos

 

i jest dalej to samo. Poza tym mi nie chodzi o to tylko o to że nie zapisuje się stan coins. Mam 100 coins kupuje przedmiot za 20 coin i pisze mi ze mam 80 coins ale patrze w bazie i mam dalej 100. Kupuje znowu przedmiot i pisze znowu 80. Nie ubywa mi tego wogole.

Opublikowano

Nie ubywa, bo wyświetla zawartość zmiennej, która zawiera dane zapisywane podczas akcji na stronie. W bazie się nie aktualizuje, bo próbujesz zapisywać do kolumny -->pos<---, która prawdopodobnie nie istnieje + masz namieszane w składni zapytania do bazy. Proponowałbym pisać to od nowa, bo nie wiem w jakim celu zawarte są tam różne, dziwne warunki. Wygląda mi to na jakąś sklejkę osoby, która nie do końca była pewne jak funkcjonuje PHP.

PS. ma być

$sql = "UPDATE account SET coins = '$coinsneu', pos = '$pos' WHERE id = '$userid' ";

Jak będziesz pewny co do działania tego skryptu i sprawdzisz czy wszystkie kolumny istnieją to takie zapytanie przejdzie.

Opublikowano

Robiłem już 2-3 stronki pod Metin2 więc możesz napisać na PW to ci to zrobię, bo pewnie jak jeden błąd już nawet się zrobi to są inne.

"Jesteśmy ludźmi, bo popełniamy błędy i na nich się uczymy."

Opublikowano

problem rozwiązany. Dzięki wszsytkim za pomoc. Bardzo mi pomogły wasze rady.

 

ostatecznie dodałem kolumne pos do account i wszystko działa.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...