[ Príspevkov: 8 ] 
AutorSpráva
Offline

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

Registrovaný: 17.02.14
Prihlásený: 12.03.17
Príspevky: 211
Témy: 82 | 82
Bydlisko: Šuňava
Vek: 20
NapísalOffline : 06.03.2016 13:01 | Úprava kódu, undefined variable

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ý: 23.03.17
Príspevky: 2019
Témy: 70 | 70
Bydlisko: Považská By...
NapísalOffline : 06.03.2016 13:21 | Úprava kódu, undefined variable

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ý: 12.03.17
Príspevky: 211
Témy: 82 | 82
Bydlisko: Šuňava
Vek: 20
Napísal autor témyOffline : 06.03.2016 13:27 | Úprava kódu, undefined variable

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: 12373
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 06.03.2016 13:49 | Úprava kódu, undefined variable

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 else 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?


Offline

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

Registrovaný: 17.02.14
Prihlásený: 12.03.17
Príspevky: 211
Témy: 82 | 82
Bydlisko: Šuňava
Vek: 20
Napísal autor témyOffline : 06.03.2016 14:01 | Úprava kódu, undefined variable

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: 12373
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 06.03.2016 14:07 | Úprava kódu, undefined variable

Daj si niekam na začiatok aspoň $building = array();
Ž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 exit(), 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.


Offline

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

Registrovaný: 17.02.14
Prihlásený: 12.03.17
Príspevky: 211
Témy: 82 | 82
Bydlisko: Šuňava
Vek: 20
Napísal autor témyOffline : 06.03.2016 14:09 | Úprava kódu, undefined variable

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: 12373
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 06.03.2016 14:23 | Úprava kódu, undefined variable

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


 [ Príspevkov: 8 ] 


Úprava kódu, undefined variable



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

195

02.06.2012 16:25

pogo

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

úprava kódu

v PHP, ASP

2

250

19.07.2012 15:40

elo

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

Úprava kódu :)

v JavaScript, VBScript, Ajax

0

270

12.07.2009 17:20

d0.0b

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

úprava kodu

v Ostatné

0

37

09.03.2017 10:42

mio

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

GA uprava kodu

v Ostatné

0

54

27.02.2014 16:19

capricorn7

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

uprava kodu v iframe

v JavaScript, VBScript, Ajax

11

314

18.08.2009 18:19

Unlink

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

uprava kodu tabulky php

v PHP, ASP

0

295

25.11.2011 17:00

elo

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

Uprava kodu pre vlozenie YouTube videa

v HTML, XHTML, XML, CSS

4

110

31.03.2014 23:19

capricorn7

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

Rozdiel:Property a variable?

v Delphi, Visual Basic

5

613

27.12.2008 14:28

Loko11

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

self:: v heredoc/variable parsing

v PHP, ASP

0

141

10.03.2012 18:12

1daemon1

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

Konvertovanie h264 videa (mkv) s variable framerate

v Video programy

2

117

22.01.2015 18:34

shiro

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

[VYRIESENE] Undefined function

v PHP, ASP

2

285

09.03.2009 12:51

max-m

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

nechapem tomuto oznameniu (Notice:Undefined...)

v PHP, ASP

10

483

12.06.2009 20:39

mienkofax

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

Fatal error: Call to undefined function mysql_connect()

v PHP, ASP

5

444

05.02.2011 16:45

gamelaster

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

Codeblocks a SDL,error undefined reference to 'WinMain@16'

v Assembler, C, C++, Pascal, Java

6

557

20.11.2010 18:32

reDo

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

Notice: Undefined index: a in C:\wamp\www\lekcia6.php on lin

v PHP, ASP

9

815

06.08.2010 11:53

awase



Powered by phpBB 3.x.x © 2005 - 2017 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF