Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 17.02.14 Prihlásený: 27.01.25 Príspevky: 406 Témy: 153 | 153 Bydlisko: Poprad-okolie |
Ahojte, pracujem na PHP hre a prišiel som k problému. Na výstupe je nutné, aby mi premenná dosadilo hodnotu z db. Bohužiaľ ale stále dostávam chybu v podobe undefined variable. Ak by mi niekto vedel kód upraviť natoľko, aby fungoval, bol by som mega vďačný. Kód: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Moja dedina</title> </head> </html> <?php session_start(); include ('header.php' ); ?> <?php // kontrola Loginu if(!isset($_SESSION['uid'])){ echo "Musíte sa prihlásiť!"; }else{ // Stavba budov if(isset($_POST['buy'])){ $main_building = protect($_POST['main_building']); $barracks = protect($_POST['barracks']); $tower = protect($_POST['tower']); $wall = protect($_POST['wall']); $blacksmith = protect($_POST['blacksmith']); $workshop = protect($_POST['workshop']); $gold_needed = (2000 * $main_building) + (3000 * $barracks) + (3500 * $tower) + (2200 * $wall) + (1500 * $blacksmith) + (5000 * $workshop); if($main_building < 0 || $barracks < 0 || $tower < 0 || $wall < 0 || $blacksmith < 0 || $workshop < 0){ output("Musíte zakúpiť prvý stupeň budovy!"); }elseif($stats['gold'] < $gold_needed){ output("Nemáte dostatok zlata na vybudovanie budovy."); }else{ $building['main_building'] += $main_building; $building['barracks'] += $barracks; $building['tower'] += $tower; $building['wall'] += $wall; $building['blacksmith'] += $blacksmith; $building['workshop'] += $workshop; $update_buildings = mysql_query("UPDATE `buildings` SET `main_building`='".$building['main_building']."', `barracks`='".$building['barracks']."', `tower`='".$building['tower']."', `wall`='".$building['wall']."', `blacksmith`='".$building['blacksmith']."', `workshop`='".$building['workshop']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); $stats['gold'] -= $gold_needed; $update_gold = mysql_query("UPDATE `stats` SET `gold`='".$stats['gold']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); include("update_stats.php"); output("Vylepšili ste budovu!"); } }elseif(isset($_POST['sell'])){ // Predaj zbraní $main_building = protect($_POST['main_building']); $barracks = protect($_POST['barracks']); $tower = protect($_POST['tower']); $wall = protect($_POST['wall']); $blacksmith = protect($_POST['blacksmith']); $workshop = protect($_POST['workshop']); $gold_gained = (800 * $main_building) + (800 * $barracks) + (1200 * $tower) + (900 * $wall) + (600 * $blacksmith) + (2000 * $workshop); if($main_building < 0 || $barracks < 0 || $tower < 0 || $wall < 0 || $blacksmith < 0 || $workshop < 0){ output("Musíte rozobrať kladný počet zariadení"); }elseif($main_building > $building['main_building'] || $barracks > $building['barracks'] || $tower > $building['tower'] || $wall > $building['wall'] || $blacksmith > $building['blacksmith'] || $workshop > $building['workshop']){ output("Nemáte dostatok zbraní na predaj!"); }else{ $building['main_building'] -= $main_building; $building['barracks'] -= $barracks; $building['tower'] -= $tower; $building['wall'] -= $wall; $building['blacksmith'] -= $blacksmith; $building['workshop'] -= $workshop; $update_buildings = mysql_query("UPDATE `buildings` SET `main_building`='".$building['main_building']."', `barracks`='".$building['barracks']."', `tower`='".$building['tower']."', `wall`='".$building['wall']."', `blacksmith`='".$building['blacksmith']."', `workshop`='".$building['workshop']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); $stats['gold'] += $gold_gained; $update_gold = mysql_query("UPDATE `stats` SET `gold`='".$stats['gold']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); include("update_stats.php"); output("Vaše budovy boli úspešne rozobraté!"); } } ?> <center><h2>Vaše zbrane</h2></center> <br /> Tu môžete kúpiť a predať vaše zbrane <br /><br /> <form action="village.php" method="post"> <table cellpadding="5" cellspacing="5" max-width=799px> <tr> <td><b>Typ zbrane</b></td> <td><b>Počet zbraní</b></td> <td><b>Cena zbrane v zlate</b></td> <td><b>Kúpiť</b></td> </tr> <tr> <td>Hlavná budova</a> <img src="images/sword.png" alt="sword.png, 1,1kB" title="Sword" height="20" width="20"></td> <td><?php echo number_format($building['main_building']); ?></td> <td>10 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="sword" size=1/></td> </tr> <tr> <td>Kasárne</a> <img src="images/bow.png" alt="bow.png, 3,8kB" title="bow" height="20" width="20"></td> <td><?php echo number_format($building['barracks']); ?></td> <td>15 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="bow" size=1/ ></td> </tr> <tr> <td>Sekera</a><img src="images/axe.png" alt="axe.png, 1,1kB" title="Axe" height="20" width="20"></td> <td><?php echo number_format($building['tower']); ?></td> <td>30 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="axe" size=1/></td> </tr> <tr> <td>Štít</a><img src="images/shield.png" alt="shield.png, 3,8kB" title="Shield" height="20" width="20"></td> <td><?php echo number_format($building['wall']); ?></td> <td>10 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="shield" size=1/ ></td> </tr> <tr> <td>Palisáda z kolov</a><img src="images/kol.png" alt="kol.png, 3,8kB" title="Kol" height="20" width="20"></td> <td><?php echo number_format($building['blacksmith']); ?></td> <td>15 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="kol" size=1/ ></td> </tr> <tr> <td>Kanón</a><img src="images/canon.png" alt="canon.png, 3,8kB" title="Canon" height="20" width="20"></td> <td><?php echo number_format($building['workshop']); ?></td> <td>500 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="canon" size=1/ ></td> </tr> <tr> <td></td> <td></td> <td></td> <td><input type="submit" name="buy" value="Kúpiť"/></td> </tr> </table> </form> <hr /> <form action="village.php" method="post"> <table cellpadding="5" cellspacing="5"> <tr> <td><b>Typ zbrane</b></td> <td><b>Počet zbraní</b></td> <td><b>Cena zbrane v zlate</b></td> <td><b>Predať</b></td> </tr> <tr> <td>Meč <img src="images/sword.png" alt="sword.png, 1,1kB" title="Sword" height="20" width="20"></td> <td><?php echo number_format($building['main_building']); ?></td> <td>8 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="sword" size=1/></td> </tr> <tr> <td>Luk <img src="images/bow.png" alt="bow.png, 3,8kB" title="Bow" height="20" width="20"></td> <td><?php echo number_format($building['barracks']); ?></td> <td>6 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="bow" size=1/ ></td> </tr> <tr> <td>Sekera<img src="images/axe.png" alt="axe.png, 1,1kB" title="Axe" height="20" width="20"></td> <td><?php echo number_format($building['tower']); ?></td> <td>10 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="axe" size=1/></td> </tr> <tr> <td>Štít <img src="images/shield.png" alt="shield.png, 3,8kB" title="Shield" height="20" width="20"></td> <td><?php echo number_format($building['wall']); ?></td> <td>8 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="shield" size=1/></td> </tr> <tr> <td>Palisáda z kolov<img src="images/kol.png" alt="kol.png, 3,8kB" title="kol" height="20" width="20"></td> <td><?php echo number_format($building['blacksmith']); ?></td> <td>6 <img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="kol" size=1/></td> </tr> <tr> <td>Kanón <img src="images/canon.png" alt="canon.png, 1,1kB" title="Canon" height="20" width="20"></td> <td><?php echo number_format($building['workshop']); ?></td> <td>200<img src="images/gold.png" alt="gold.png, 3,3kB" title="Gold" height="20" width="20"></td> <td><input type="text" name="canon" size=1/></td> </tr> <td></td> <td></td> <td></td> <td><input type="submit" name="sell" value="Predať"/></td> </tr> </table> </form>
<?php }include ('footer.php' ); ?>
|
|
Registrovaný: 21.09.13 Prihlásený: 21.12.24 Príspevky: 2111 Témy: 77 | 77 Bydlisko: Považská By... |
Pouzi nieco normalne a nie mysql_query ktore je zastarale a myslim ze php7 uz ani neni.
_________________ Nesnívaj svoj život, ale ži svoj sen. |
|
Registrovaný: 17.02.14 Prihlásený: 27.01.25 Príspevky: 406 Témy: 153 | 153 Bydlisko: Poprad-okolie |
využívam PHP 5.6.. takýmto príkazom ma to naučili aj v škole, mnoho hostingov ešte PHP 7 nemá
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | 39 |
Strach a hrôza. Príklad špagetového kódu. Je to tak neprehľadný kód, že som skončil niekde na tejto nešťastnej konštrukcií Kód: if(!isset($_SESSION['uid'])){ echo "Musíte sa prihlásiť!"; }else{ kde poriadne ani neviem kde máš to [c]else[/c] uzavreté. Ak ti môžem odporučiť, najprv ešte veľa študuj, pre chybové hlášky začni využívať výnimky, pozri si napríklad MVC model (alebo iný model využívajúci objekty) a rob to podľa neho, pretože toto skončí tak, že keď sa na to o pol roka pozrieš, sám si budeš trhať vlasy. Ako písal zajac, mysql_ nepoužívať. Naučili ťa to zle, takže minimálne mysqli_, PDO, prípadne podľa mňa ideálne mať vlastnú vrstvu pre prácu s databázou (dibi, notORM,...) a nemusí ťa trápiť driver, dokonca niekedy ani optimalizácia príkazov (To nie je záležitosť PHP 7, takže tým argumentovať prečo používaš niečo dávno nepodporované už vo verzií PHP 5.5 a potenciálne nebezpečné, je z cesty). Inak ktorá premenná je undefined?
_________________ always is always wrong |
|
Registrovaný: 17.02.14 Prihlásený: 27.01.25 Príspevky: 406 Témy: 153 | 153 Bydlisko: Poprad-okolie |
Premenná §building --> Notice: Undefined variable: building in C:\wamp\www\nationwars\village.php on line 106 Call Stack # Time Memory Function Location 1 0.0020 285904 {main}( ) ..\village.php:0
§building nefunguje následne ani pri ďalších hodnotách, ktoré tam potrebujem. else je ukončené na konci kódu pred include footer.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | 39 |
Daj si niekam na začiatok aspoň [c]$building = array();[/c] Že je else ukončené na konci kódu je síce pekné, ale tým pádom je tam zbytočne, stačí správne použiť silu [c]exit()[/c], prípadne iných "zabijáckych" funkcií. Chcel som len, aby si si uvedomil, že ten postup akým to teraz robíš nie je úplne správny a môže iba tebe spôsobiť v budúcnosti problémy s prípadnou údržbou. PHP je prasácky jazyk. Nemá prakticky žiadne obmedzenia, preto programátorovi dovolí robiť zvrátenosti od výmyslu sveta (jeden príklad za všetky, typová kompatibilita premenných, inými slovami, raz do premennej uložíš celé číslo, inokedy reťazec, potom dokonca objekt a interpreter jazyka sa tvári akože je všetko v poriadku, pritom každý jazyk na úrovni má túto základnú vec ošetrenú). Nechcem ťa demotivovať, len vidím kúsok dopredu, ako tento celý projekt môže práve na tomto stroskotať. Ten kód je proste hrozný, ani nemám silu ho celý čítať, takže chýb tam môže byť omnoho viac.
_________________ always is always wrong |
|
Registrovaný: 17.02.14 Prihlásený: 27.01.25 Príspevky: 406 Témy: 153 | 153 Bydlisko: Poprad-okolie |
Neviem prečo mi to nefunguje, nakoľko využívam totožný kód, ako pri inom scripte kde sa kupujú zbrane. Tu som iba zmenil hodnoty. Ale ten array skúsim využiť. Dám vedieť, či som to rozbehal. Tam je else taktiež ukončené až na samom konci scriptu
// Spojený príspevok Ned 06.03.16 14:12
Teraz mi to ukazuje to isté s indexom. Undefined index: main_building in C:\wamp\www\nationwars\village.php on line 111
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | 39 |
No samozrejme, bude ti to nadávať kým nebudeš mať deklarovanú každú premennú ktorú niekde využívaš. Túto časť Kód: $main_building = protect($_POST['main_building']); $barracks = protect($_POST['barracks']); $tower = protect($_POST['tower']); $wall = protect($_POST['wall']); $blacksmith = protect($_POST['blacksmith']); $workshop = protect($_POST['workshop']); $gold_needed = (2000 * $main_building) + (3000 * $barracks) + (3500 * $tower) + (2200 * $wall) + (1500 * $blacksmith) + (5000 * $workshop); if($main_building < 0 || $barracks < 0 || $tower < 0 || $wall < 0 || $blacksmith < 0 || $workshop < 0){ output("Musíte zakúpiť prvý stupeň budovy!"); }elseif($stats['gold'] < $gold_needed){ output("Nemáte dostatok zlata na vybudovanie budovy."); }else{ $building['main_building'] += $main_building; $building['barracks'] += $barracks; $building['tower'] += $tower; $building['wall'] += $wall; $building['blacksmith'] += $blacksmith; $building['workshop'] += $workshop; $update_buildings = mysql_query("UPDATE `buildings` SET `main_building`='".$building['main_building']."', `barracks`='".$building['barracks']."', `tower`='".$building['tower']."', `wall`='".$building['wall']."', `blacksmith`='".$building['blacksmith']."', `workshop`='".$building['workshop']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); $stats['gold'] -= $gold_needed; $update_gold = mysql_query("UPDATE `stats` SET `gold`='".$stats['gold']."' WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error()); include("update_stats.php"); output("Vylepšili ste budovu!"); Tam máš až na pár rozdielov duplicitne. Nemohol by si spoločné časti vytiahnuť pred podmienku? Stále viac som presvedčený, že pre teba bude lepšie keď to vymažeš a začneš podľa nejakého predpisu písať nanovo. Najlepšie objektovo - tým by sa ti kopa starostí vyriešila už na začiatku. Keďže ale asi nevieš čo sú to objekty a celkovo objektové programovanie, tak sa asi zbytočne snažím a prerábať to (ak sa na to rovno nevykašleš) začneš až keď sa ti v hlave ujasní, že takto ten kód udržiavať nezvládneš.
_________________ always is always wrong |
|
Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 4 | 428 | 02.06.2012 16:25 pogo | | v JavaScript, VBScript, Ajax | 0 | 643 | 12.07.2009 17:20 d0.0b | | v PHP, ASP | 2 | 575 | 19.07.2012 15:40 elo | | v Ostatné | 0 | 597 | 09.03.2017 10:42 mio | | v HTML, XHTML, XML, CSS | 1 | 508 | 24.12.2017 17:34 BX | | v Ostatné | 0 | 355 | 27.02.2014 16:19 capricorn7 | | v JavaScript, VBScript, Ajax | 11 | 569 | 18.08.2009 18:19 Unlink | | v PHP, ASP | 0 | 598 | 25.11.2011 17:00 elo | | v Perl, Python, Ruby, CGI | 0 | 242 | 01.07.2021 14:56 8020 | | v HTML, XHTML, XML, CSS | 4 | 741 | 31.03.2014 23:19 capricorn7 | | v Delphi, Visual Basic | 5 | 856 | 27.12.2008 14:28 Loko11 | | v PHP, ASP | 0 | 358 | 10.03.2012 18:12 1daemon1 | | v Video programy | 2 | 414 | 22.01.2015 18:34 shiro | | v PHP, ASP | 2 | 475 | 09.03.2009 12:51 max-m | | v PHP, ASP | 10 | 709 | 12.06.2009 20:39 mienkofax | | v PHP, ASP | 5 | 715 | 05.02.2011 16:45 gamelaster |
|