Autor | Zpráva | ||
---|---|---|---|
SirDoxik Profil |
#1 · Zasláno: 20. 8. 2014, 12:07:23
Dobrý den, pustil jsem se do takového menšího projektu ohledně Minecraft WebShopu. Ovládám HTML/CSS a tímto projektem jsem se chtěl alespoň trochu otrkat s php. Mám takovýto kód (Je poskládaný z více kódů co jsem našel) a háže mi to syntax error a popřípadě parse error. Dokázal by mi někdo pomoct ? Předem díky :)
Obchod.php <html> <head> <meta charset="UTF-8"> </head> <body> <form method="POST" action="proces.php"> Hráč <input name="player"> Item <input name="item"> Počet <input name="pocet"> <input type="hidden" name="UzJsemToOdeslal" value="1"> <input type="Submit" name="odesli"> </form> </body> <html> <?php /* RCON remote console class, modified for minecraft compability by Tehbeard. !!!YOU MUST CONFIGURE RCON ON YOUR MINECRAFT SERVER FOR THIS TO WORK AT TIME OF WRITING ONLY 1.9pr4+ HAVE BUILTIN RCON SUPPORT!!! Example Code: ============ include_once("rcon.class.php"); //Include this file $r = new rcon("127.0.0.1",25575,"foobar"); //create rcon object for server on the rcon port with a specific password if($r->Auth()){ //Connect and attempt to authenticate { $r->rconCommand("say Saving in 10 seconds!"); //send a command sleep(10); $r->rconCommand("save-all"); //send a command $r->rconCommand("say Save complete!");//send a command echo $r->rconCommand("list");//send a command, echo returned value } ============ Based upon the following work: [<<< Basic CS:S Rcon class by Freman. (V1.00) ---------------------------------------------- Ok, it's a completely working class now with with multi-packet responses Contact: printf("%s%s%s%s%s%s%s%s%s%d%s%s%s","rc","on",chr(46),"cl","ass",chr(64),"pri","ya",chr(46),2,"y",chr(46),"net") Behaviour I've noticed: rcon is not returning the packet id. >>>] */ define("SERVERDATA_EXECCOMMAND",2); define("SERVERDATA_AUTH",3); class RCon { var $Password; var $Host; var $Port = 27015; var $_Sock = null; var $_Id = 0; function RCon ($Host,$Port,$Password) { $this->Password = $Password; $this->Host = $Host; $this->Port = $Port; $this->_Sock = @fsockopen($this->Host,$this->Port, $errno, $errstr, 30) or die("Unable to open socket: $errstr ($errno)\n"); $this->_Set_Timeout($this->_Sock,2,500); } function Auth () { $PackID = $this->_Write(SERVERDATA_AUTH,$this->Password); // Real response (id: -1 = failure) $ret = $this->_PacketRead(); //var_dump($ret); if ($ret[0]['ID'] == -1) { return false; } return true; } function _Set_Timeout(&$res,$s,$m=0) { if (version_compare(phpversion(),'4.3.0','<')) { return socket_set_timeout($res,$s,$m); } return stream_set_timeout($res,$s,$m); } function _Write($cmd, $s1='', $s2='') { // Get and increment the packet id $id = ++$this->_Id; // Put our packet together $data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0); // Prefix the packet size $data = pack("V",strlen($data)).$data; // Send packet fwrite($this->_Sock,$data,strlen($data)); // In case we want it later we'll return the packet id return $id; } function _PacketRead() { //Declare the return array $retarray = array(); //Fetch the packet size while ($size = @fread($this->_Sock,4)) { $size = unpack('V1Size',$size); //Work around valve breaking the protocol if ($size["Size"] > 4096) { //pad with 8 nulls $packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096); } else { //Read the packet back $packet = fread($this->_Sock,$size["Size"]); } array_push($retarray,unpack("V1ID/V1Response/a*S1/a*S2",$packet)); } return $retarray; } function Read() { $Packets = $this->_PacketRead(); foreach($Packets as $pack) { if (isset($ret[$pack['ID']])) { $ret[$pack['ID']]['S1'] .= $pack['S1']; $ret[$pack['ID']]['S2'] .= $pack['S1']; } else { $ret[$pack['ID']] = array( 'Response' => $pack['Response'], 'S1' => $pack['S1'], 'S2' => $pack['S2'], ); } } return $ret; } function sendCommand($Command) { //$Command = '"'.trim(str_replace(' ','" "', $Command)).'"'; //$Command="stop"; $this->_Write(SERVERDATA_EXECCOMMAND,$Command,''); } function rconCommand($Command) { $this->sendcommand($Command); $ret = $this->Read(); //ATM: Source servers don't return the request id, but if they fix this the code below should read as // return $ret[$this->_Id]['S1']; return $ret[$this->_Id]['S1']; } } ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Zpracování</title> </head> <body> <?php // AUTOREM JE m_pro_m, webmaster Minecraft serveru www.mineforlife.eu // Tento script byl uvolnen pro hosting fakaheda.eu s jeho svolenim // Dulezite je, aby jste prejmenovali soubor, jinak bude mozne, ze si kdokoliv aktivuje VIP bez zaplaceni // Take je dulezite, aby jste meli ve stejnem umisteni jako tento soubor take rcon.php!!! // V nasledujici casti nahradte text v uvozovkach, UVOZOVKY TAM NECHTE, STREDNIK NA KONCI TAKE! $server = "localhost"; $port = "26565"; $heslo = "asdfkaf1as2d31f3as1d2f"; ////////////////////////////// //RCON CAST, NEUPRAVOVAT!!!!// ////////////////////////////// $player = $_GET['player']; $item = $_GET['item']; $pocet = $_GET['pocet']; include_once("rcon.php"); $r = new rcon($server,$port,$heslo); if($r->Auth()) { // Spusti prikaz který dá hráči jeho item $r->rconCommand('give ' . $player. . $pocet .); // Spusti prikaz který napíše hráči zprávu že si něco koupil $r->rconCommand('msg '.$player.' Koupil jsi'.$pocet.'x'.$item.); } } else { die('Chyba'); } ?> </body> </html> chyba má být na řádku 31 takže zde $r->rconCommand('give ' . $player. . $pocet .); |
||
Radek9 Profil |
#2 · Zasláno: 20. 8. 2014, 12:12:53
SirDoxik:
Operátor . (tečka) je určen ke spojování dvou řetězců. Na některých místech ti přebývají:
$r->rconCommand('give ' . $player. . $pocet .); $r->rconCommand('msg '.$player.' Koupil jsi'.$pocet.'x'.$item.); Takže by to mělo vypadat takhle: $r->rconCommand('give ' . $player . ' ' . $pocet); // Tady má být, tuším, mezera $r->rconCommand('msg ' . $player . ' Koupil jsi' . $pocet . 'x' . $item); |
||
Mike8748 Profil |
SirDoxik:
jenom technická, ten příkaz má být $r->rconCommand('give ' . $player. ' ' .$item. ' ' . $pocet); pokud by byl příkaz tak jak zde byl uveden tak doufej že si nikdo nekoupí např. 57 bloků hlíny, dostal by diamantový bloky :) |
||
SirDoxik Profil |
#4 · Zasláno: 20. 8. 2014, 15:39:47
Ahoj, moc díky za rady.. Jsem takový antitalent na PHP :') Teď mi to vyhodilo chybu Parse error: syntax error, unexpected '}' in C:\xampp\htdocs\webshop\proces.php on line 33
|
||
juriad Profil |
#5 · Zasláno: 20. 8. 2014, 15:43:54
Přebývá tam tato závorka: }
Na 29. řádku je otevírací a na řádcích 34 a 35 jsou zavírací. |
||
anonymníí Profil * |
#6 · Zasláno: 20. 8. 2014, 15:43:54
SirDoxik:
To není o talentu, ale o lenosti. Proč se nepodíváš na ř. 33 a okolní a nespočítáš si závorky? Já to našel během asi 10 vteřin, že bys to, byť v pár minutách, nezvládl také? Těch závorek tam máš pět a půl. Doslova. |
||
SirDoxik Profil |
#7 · Zasláno: 20. 8. 2014, 15:48:51 · Upravil/a: SirDoxik
Závorku jsem smazal a vyhodilo mi to
Notice: Undefined index: player in C:\xampp\htdocs\webshop\proces.php on line 22 Notice: Undefined index: item in C:\xampp\htdocs\webshop\proces.php on line 23 Notice: Undefined index: pocet in C:\xampp\htdocs\webshop\proces.php on line 24 Unable to open socket: Nemohlo b�t vytvo�eno ��dn� p�ipojen�, proto�e c�lov� po��ta� je aktivn� odm�tl. (10061) tak jsem smazal GET na řádkách 22 23 24 a místo toho jsem tam dal POST a už mi to vypisuje chybu jen Nemohlo b�t vytvo�eno ��dn� p�ipojen�, proto�e c�lov� po��ta� je aktivn� odm�tl. (10061) tak tohle už taky mam :) díky moc všem za rady :) s další chybou se ozvu :D |
||
SirDoxik Profil |
#8 · Zasláno: 20. 8. 2014, 19:13:19
Dobrý večer, ještě jednou se omlouvám že už tu zase "trapčím" ale narazil jsem na další problém. Tentokrát jsem "dělal" spíše upravoval login do webshopu a narazil jsem na problém. Ani nevím jak to popsat :/ živá ukázka
webshop.doxik.eu kód:
Config.php <?php $host = 'localhost'; $user = 'kingdoxik'; $pass = 'kikina159'; $db = 'minemax'; $connect = mysql_connect($host, $user, $pass); mysql_select_db($db); foreach($_POST as $Index => $Item) $_POST[$Index] = addslashes($Item); foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($Item); ?> register.php <?php session_start(); include "config.php"; if (isset($_POST['username']) && isset($_POST['password']) && isset($_POST['nick'])) { $sql = mysql_query("SELECT id FROM users WHERE login = '$_POST[username]';"); if(mysql_num_rows($sql) == 0) $error = "chyba: uživatel existuje"; else { mysql_query(" INSERT INTO users (`login`, `password`, `nick`) VALUES ('$_POST[username]', '".sha1($_POST['password'])."', '$_POST[nick]') ;"); echo "registrace úspěšná"; } } else { ?> <form id="frm" name="frm" method="POST" action="register.php"> <span>Login</span><input type="text" name="username"> <span>Heslo</span><input type="password" name="password"> <span>Herní nick</span><input type="text" name="nick"> <input type="submit" value="odeslat"> </form> <?php } ?> <?php session_start(); if (isset($_POST['username']) && isset($_POST['password'])) { include "config.php"; $sql = mysql_query("SELECT id FROM users WHERE login = '$_POST[username]' AND password = '".sha1($_POST['password'])."';"); if(mysql_num_rows($sql) == 1) { $row = mysql_fetch_array($sql); $_SESSION['id'] = $row['id']; echo "úspěšně přihlášen"; } else echo "přihlášení selhalo"; } else { ?> <form id="frm" name="frm" method="POST" action="login.php"> <span>Login</span><input type="text" name="username"> <span>Heslo</span><input type="password" name="password" > <input type="submit" value="odeslat"> </form> <?php } ?> |
||
Tomáš123 Profil |
SirDoxik:
„Ani nevím jak to popsat“ Tak to máš zlé. Práve som čítal Jokerov článok o nesprávne položených otázkach... Schválne skús uhádnuť, kam spadáš ty... Alebo popíš, čo sa stalo alebo nestalo, poprípade akú chybu to vypísalo. Alebo ešte lepšie riešenie, pozri sa na predošlú verziu skriptu, porovnaj zmeny a vlož sem tie riadky, ktoré si pozmenil (no predtým skontroluj či si neurobil banálnu chybu ako vynechaná bodkočiarky a pod.). |
||
SirDoxik Profil |
#10 · Zasláno: 20. 8. 2014, 20:48:12
Ahoj tak původní script je ZDE a já vlastně akorát potřebuju přidat ještě jednu položku a to Nick.
|
||
Fisir Profil |
#11 · Zasláno: 20. 8. 2014, 22:23:00
Reaguji na SirDoxika:
Já v tom žádnou chybu nevidím, ty jo? Jakou? |
||
Kubo2 Profil |
#12 · Zasláno: 20. 8. 2014, 23:47:51
anonymníí:
„Já to našel během asi 10 vteřin“ Ale tebe stačilo si prečítať chybovú hlášku, on ju sem zjavne bez ďalšieho skúmania bezhlavo skopíroval. :-) SirDoxik: „Ani nevím jak to popsat :/“ Tak sa o to aspoň pokús. Vypíše ti nejakú chybu? Ak skript nefunguje správne, čo konkrétne nefunguje? Ako by mal pracovať ten skript, keby fungoval správne? resp. čo od neho očakávaš? (stručne, konkrétne a jasne, obecné reči o tom, že to má zaregistrovať užívateľa, si nechaj.) |
||
Časová prodleva: 4 dny
|
|||
SirDoxik Profil |
#13 · Zasláno: 24. 8. 2014, 16:30:36
Ahoj, tohle vše již mám vyřešené a teď přišel na řadu ItemShop. Jak by jste udělali databázi souborů ? Nechci používat mysql. Představoval jsem si všechny blocky, data, ceny atd dát do jednoho souboru a ten pak includovat do souboru obchod.php. Šlo by to nějak ?
|
||
lionel messi Profil |
#14 · Zasláno: 24. 8. 2014, 16:38:30
SirDoxik:
„Jak by jste udělali databázi souborů ?“ Prostredníctvom MySQL. Príde mi to jednoduchšie než ukladanie do súborov. „Představoval jsem si všechny blocky, data, ceny atd dát do jednoho souboru a ten pak includovat do souboru obchod.php. Šlo by to nějak ?“ Určite, ale to, že to nejakým spôsobom ide, neznamená vždy, že je to dobrý nápad. Ani v MySQL nie je vhodné miešať všetky dáta v jednej tabuľke bez ladu a skladu. |
||
SirDoxik Profil |
#15 · Zasláno: 24. 8. 2014, 23:34:41
Dobrý den. V databáci mám vše uložené , ale nevím jak vypsat vsechny blocky v php aby kazdy byl v obalovem divu s tlacitkem objednat. Neporadil by mi tu někdo? Předem díky :)
|
||
lionel messi Profil |
#16 · Zasláno: 24. 8. 2014, 23:35:36
SirDoxik:
Aká je presne štruktúra databázy? |
||
SirDoxik Profil |
#17 · Zasláno: 24. 8. 2014, 23:38:25
Písi z mobilu ale je to tabulka a názvem items a v ní je název blocku, cena, id a obrázek ve tvaru items/neco.png
|
||
Fisir Profil |
#18 · Zasláno: 25. 8. 2014, 12:28:02
Reaguji na SirDoxika:
$query = $mysqli->query('SELECT * FROM items'); while($item = $query->fetch_assoc()){ echo('<div class="item">'); echo('<img src="'.urlencode($item['obrazek']).'">'); echo(htmlspecialchars($item['nazev']).' za '.intval($item['cena']).' Kreditů'); echo('<form action="koupit.php" method="post" onSubmit="return confirm(\'Opravdu si chcete koupit '.addslashes($item['nazev']).' za '.intval($item['cena']).' Kreditů?\')"><input type="hidden" name="block" value="'.intval($item['id']).'"><input type="submit" value="Koupit"></form>'); echo('</div>'); } |
||
SirDoxik Profil |
#19 · Zasláno: 25. 8. 2014, 17:13:25
Moc děkuju :) akorát mi to vyhodilo chybu Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\webshop\obchod.php on line 25 :/
|
||
Fisir Profil |
#20 · Zasláno: 25. 8. 2014, 17:16:17
Reaguji na SirDoxika:
OMG. Napsal jsem ti tu kostru a ty to bez rozmyslu zkopíruješ a čekáš, že to bude fungovat. Nečetl jsem tohle vlákno celé, reagoval jsem jen na tvou poslední otázku, takže jsem nevěděl, jak máš získávání dat řešené. Ale přepsat je to naprosto triviální. $query = mysql_query('SELECT * FROM items'); while($item = mysql_fetch_assoc($query)){ |
||
SirDoxik Profil |
#21 · Zasláno: 25. 8. 2014, 17:45:10
Aha tak srry.. pro mě to zas tak triviální neni ale pokusim se :)
|
||
Kubo2 Profil |
#22 · Zasláno: 26. 8. 2014, 16:46:04
SirDoxik:
„pro mě to zas tak triviální neni ale pokusim se :)“ Keď už to nie je triviálne pre teba, tak si o tom môžeš aspoň niečo prečítať (a zistiť, že je to naozaj triviálne). |
||
Časová prodleva: 10 let
|
0