Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 18.01.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok NapísalOffline : 06.03.2016 13:01

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' ); ?>


Offline

Užívateľ
Užívateľ
Úprava kódu, undefined variable

Registrovaný: 21.09.13
Prihlásený: 16.02.24
Príspevky: 2109
Témy: 77
Bydlisko: Považská By...
Príspevok NapísalOffline : 06.03.2016 13:21

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.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 18.01.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok Napísal autor témyOffline : 06.03.2016 13:27

využívam PHP 5.6.. takýmto príkazom ma to naučili aj v škole, mnoho hostingov ešte PHP 7 nemá


Offline

Správca fóra
Správca fóra
Úprava kódu, undefined variable

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 06.03.2016 13:49

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 18.01.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok Napísal autor témyOffline : 06.03.2016 14:01

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.


Offline

Správca fóra
Správca fóra
Úprava kódu, undefined variable

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 06.03.2016 14:07

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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 18.01.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok Napísal autor témyOffline : 06.03.2016 14:09

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


Offline

Správca fóra
Správca fóra
Úprava kódu, undefined variable

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 06.03.2016 14:23

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
Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Notice: Undefined variable

v PHP, ASP

4

387

02.06.2012 16:25

pogo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. úprava kódu

v PHP, ASP

2

480

19.07.2012 15:40

elo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. úprava kodu

v Ostatné

0

464

09.03.2017 10:42

mio Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Úprava kódu :)

v JavaScript, VBScript, Ajax

0

522

12.07.2009 17:20

d0.0b Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. GA uprava kodu

v Ostatné

0

312

27.02.2014 16:19

capricorn7 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Úprava html kódu

v HTML, XHTML, XML, CSS

1

432

24.12.2017 17:34

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. uprava kodu v iframe

v JavaScript, VBScript, Ajax

11

523

18.08.2009 18:19

Unlink Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. uprava kodu tabulky php

v PHP, ASP

0

522

25.11.2011 17:00

elo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Uprava - Oprava Python kodu OOP

v Perl, Python, Ruby, CGI

0

198

01.07.2021 14:56

8020 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Uprava kodu pre vlozenie YouTube videa

v HTML, XHTML, XML, CSS

4

694

31.03.2014 23:19

capricorn7 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozdiel:Property a variable?

v Delphi, Visual Basic

5

813

27.12.2008 14:28

Loko11 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. self:: v heredoc/variable parsing

v PHP, ASP

0

292

10.03.2012 18:12

1daemon1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Konvertovanie h264 videa (mkv) s variable framerate

v Video programy

2

364

22.01.2015 18:34

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [VYRIESENE] Undefined function

v PHP, ASP

2

442

09.03.2009 12:51

max-m Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nechapem tomuto oznameniu (Notice:Undefined...)

v PHP, ASP

10

660

12.06.2009 20:39

mienkofax Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Fatal error: Call to undefined function mysql_connect()

v PHP, ASP

5

665

05.02.2011 16:45

gamelaster Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra