» »

[PHP] Notice: Undefined variable

[PHP] Notice: Undefined variable

Poldi112 ::

Ne vem kako naj se elegantno znebim noticev:
Notice: Undefined variable: ddv_20

isset gre tam, kjer ne pričakujem ničle, tu pa imajo spremenljivke lahko tudi vrednost 0 in takrat hočem da so false.

if (isset($datum) AND ($ddv_20==TRUE OR $ddv_8==TRUE OR $gotovina==TRUE OR $kartice==TRUE OR $popust==TRUE OR $polog==TRUE)){


A bi moral za vsak or delati ( if isset($a) AND $a=TRUE) :

if (isset($datum) AND ( (isset($ddv_20) AND ($ddv_20==TRUE)) OR ( isset($ddv_8) AND $ddv_8==TRUE))){


ali obstaja kaj bolj smiselnega? Zakaj ga sploh moti, da variable ni set, oz. ali me lahko to kdaj tepe po glavi? A je možno samo točno ta notice ignorirati?
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.

milc ::

Tole si poglej, če ti kaj pomaga:
http://php.net/manual/en/function.error...

krho ::

@milc: odličen predlog predlog. ;((

@Poldi112:
najbolj pravilno bo pač ( (isset($ddv_20) AND ($ddv_20 > 0)).
Bad practice je da prefixaš takšne spemenljivke z @.

Milčev predlog je pa extremely bad practise. Dev okolje mora imeti vklopljen ves error reporting vjključno z deprecated in strict.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

Poldi112 ::

Veš kaj me moti? Vsi ti isset, ki mi samo delajo vse skupaj nepregledno, koristi od njih pa ne vidim nobene. Zakaj je slabo, če uporabiš spremenljivko, ki ni definirana. Recimo izpisujem tabelo, tam kjer ima vrednost se jo izpiše, kjer je nima dam pa okence, ki ga potem na koncu forma bere.

In ti notici mi zgenerirajo 2 strani opozoril, za katere ne vidim smisla. A mi ga lahko kdo razloži?
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.

krho ::

Jah ne vem, kaj naj rečem, v vseh nedinamičnih programskih jezikih je pač dostopanje do nedefinirane spremenljivke fatal error in ti v bistvu sploh ne prevede aplikacije, tule je pač samo opozorilo.
Nastavi spremenljivko na 0 oz. privzeto vrednost in jo kasneje povozi s pravo
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

t3hn0 ::

Zakaj je bad practise z @ prefixat spremenljivke? Sej če veš kaj se dogaja z njenimi vrednostmi nima bit kej narobe.
^.^

fiction ::

http://www.php.net/manual/en/language.o...

t3hn0 je izjavil:

Zakaj je bad practise z @ prefixat spremenljivke? Sej če veš kaj se dogaja z njenimi vrednostmi nima bit kej narobe.
Ja no, vse skupaj je približno tako kot če ti sveti na avtu lučka za olje in vse kar narediš je samo to, da lučko pokriješ pri tem si pa govoriš "točno vem kaj je narobe", "sem že popravil stvar". Čisto možno, da je problem samo v lučki, je pa vseeno verjetnost za to razmeroma majhna.

Žalostno je, da PHP vzpodbuja take grde stile programiranja.

sumoborac ::

Vsako opozorilo ima svoj pomen. V tvojem primeru te program opozarja, da spremenljivke nisi nastavil.

Če te zadeva tako zelo extremno moti, potem pred polnenjem napravi takle hec:

$ddv_20 = $ddv_8 = false;


S tem spremenljivke nastavis na default vrednost in ni potrebe za omenjeno isset() funkcijo.

V tvojem primeru mogoče opozorilo nima neke globje vrednosti, je pa prav da se spremenljivke definira saj se z pravilnim prevejranjem onemogoča zlorabo kode (xss and stuff...).

Vsak programer se mora odločit kakšen stil pisanja in ravni varnosti bo izvajal. Konec koncev lahko celotno obvescanje o napakah izkljucis ce te moti...

p.s. še ena zadeva... Boolean vrednosti primerjaš z trojnim operatorjem -> === ali !==

Sumoborac
Prid sm al pa tm ostan...

Zgodovina sprememb…

jernejl ::

t3hn0 je izjavil:

Zakaj je bad practise z @ prefixat spremenljivke? Sej če veš kaj se dogaja z njenimi vrednostmi nima bit kej narobe.


Si prepričan, da veš kaj se z njimi dogaja?

Zadeva je lahko npr. varnostna luknja v okolju, kjer je direktiva register_globals vključena.
Sicer je ta od verzije 5.3.0 deprecated in privzeto izključena, je pa nekoč bila privzeto vključena. Če boš tvojo kodo slučajno poganjal v takem okolju, lahko imaš težave. V takem primeru si lahko uporabnik spremenljivko postavi na poljubno vrednost.

http://php.net/manual/en/security.globa...

Če na več mestih uporabljaš te spremenljivke, verjetno res ni smiselno vsakič klicati isset. Zato pa spremenljivke na začetku postaviš na neko privzeto vrednost, npr.: $ddv_20=false;

t3hn0 ::

ja recimo da imas preprost pogojni stavek kot je:
if( @$_POST['gumbZaOddajoForma'] == 'Poslji' )

torej pricakujemo da obiskovalec klikne na nek gumb z imenom gumbZaOddajoForma in ima value nastiman na Poslji.

zdaj sem malce len, pa se mi ne da pogledat linka, a v tem primeru ne vidim kaj bi bilo lahko narobe.
^.^


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[PHP] Seje

Oddelek: Programiranje
5745 (648) Pimoz
»

Php register/login problem

Oddelek: Izdelava spletišč
362769 (2180) keworkian
»

mySQL prikaz apostrof

Oddelek: Izdelava spletišč
91103 (990) -=aVa=-
»

[php, mysql] sortiranje izpisa iz baze

Oddelek: Izdelava spletišč
262695 (2214) Binji
»

problem z phpjem

Oddelek: Izdelava spletišč
304271 (3684) snow

Več podobnih tem