Autor Zpráva
XKrik
Profil
Zdravim.
Vi někdo jak se zbavit tohodle : Notice: Undefined variable:
Jiným způsobem než přepsáním php.ini ?
Hugo
Profil
Definovat proměnnou dřív než ji použiješ.
XKrik
Profil
dik, to mi taky napadlo ale jak se v php definuje promněná správným způsobem? bych to udelal takle $promenna = 0
k
Profil *
nebo nastavit error reporting na 0 ;)
XKrik
Profil
to vim, ale ja sem rikal, ze nechci menit php.ini...
ah01
Profil
http://cz.php.net/manual/cs/function.error-reporting.php
http://cz.php.net/manual/cs/function.set-error-handler.php
k
Profil *
nemusis menit php.ini staci kdyz do kodu napises ini_set('error_reporting', E_ALL);
k
Profil *
nebo zacit pouzivat isset() a array_key_exists()
XKrik
Profil
no jo, ale jak se definuje promenna pred pouzitim?!
k
Profil *
Nemusis ji definovat.
Staci pouzivat ty fce ktere jsem napsal vyse.
Definovat vsechny promenne pred pouzitim je blbost.
tiso
Profil
XKrik
Nastaviť premennú na nulu je jeden zo spôsobov, pokiaľ chceš pracovať s externou premennou ktorá nevieš či existuje, tak tú musíš otestovať:
if(isset($_SERVER["HTTP_REFERER"])){//premenna existuje, mozes s nou robit


}
else{//premenna neexistuje, musis sa zaobist bez nej

}
gaminn
Profil *
k
Rád bych se dozvěděl, proč definovat proměnnou před použitím je blbost. Raději mít všude tisíc podmínek?
tiso
Profil
gaminn
Prečítaj si to ešte raz, k píše niečo iné ako ty...
k
Profil *
:) tusil jsem ze se toho nekdo chytne.. Proto jsem tak napsal to sluvko "vsechny".
Nekdy je definovani pred pouzitim vhodne, ale ne pokazde.
gaminn
Profil *
tiso
Mimo jiné psal něco o isset() a array_key_exists().

k
Definice proměnných jako taková v PHP neexistuje (pouze uvnitř tříd, ale to vlastně nejsou proměnné jako takové). Nejspíš se tu bavíme o inicializaci. Takže se ptám, které proměnné není vhodné před použitím inicializovat.
k
Profil *
gaminn
Ano bavime se tu o inicializaci promennych.

které proměnné není vhodné před použitím inicializovat
Ty ktere jiz prijdou inicializovane. Proto to isset() a array_key_exists()
tiso
Profil
gaminn
Rád bych se dozvěděl, proč definovat proměnnou před použitím je blbost
vs.
Definovat vsechny promenne pred pouzitim je blbost.

- nájdi rozdiel...
gaminn
Profil *
k
1) Ona se těžko dá znova inicializovat proměnná, která již inicializovaná byla.
2) Pokud se bavíme o vhodnosti použití inicializace, tak ne, že někdy to vhodné není, ale platí, že vhodné to je vždy. Případ, kdy bych "inicializoval" již inicializovanou proměnnou mi povede k případu, že ztratím původní hodnotu.

tiso
Ano, přehlédl jsem se. Ale to nic nemění na mém dotazu, pokud si tam to slůvko "všechny" doplníš. Ono je to tady celé takové slovíčkaření. ;)
Hugo
Profil
Proměnná se v PHP definuje přiřazením, např.

$var = '';
nebo
$bool = true;

Tvrzení, že "definovat proměnné před použitím je blbost" je obrovská kravina a autor toho asi moc o bezpečnosti neví.
Hugo
Profil
Pokud jde o globální proměnné, které skript přebírá např. z formulářů, tak je vhodné je nejprve ošetřit (ověřit, že obsahují pouze to co mají) a poté jejich hodnotu přiřadit nové proměnné. Tím se člověk vyhne mnoha nepříjemnostem.
gaminn
Profil *
Hugo
S tím bych souhlasil.
k
Profil *
gaminn
ad 1) ad 2) Prave proto jsem uvedl isset a array_key_exists -> inicializovat pouze v pripade, ze promenna jiz nebyla nastavena (inicializovana).

Hugo
Rekl bych ze o bezpecnosti vim dost.
gaminn
Profil *
k
Zřejmě si to tak myslel, ale řekl jsi to trochu neobratně. Takže už to je vyřešeno.

Pojem dost" je celkem relativní. :D
k
Profil *
gaminn
Nerekl jsem to neobratne. Logicky to vyplyvalo z diskuse. Staci cist odzacatku a davat si dohromady souvislosti.

Pojem dost" je celkem relativní
kdybych napsal "hodne","velmi" nebo cokoli jineho, dalo by se nad tim polemizovat stejnym zpusobem.
Jake slovo by pro tebe bylo dostacujici?
tiso
Profil
gaminn - oki, išlo mi len o logiku veci...

Skoro správne to napísal Hugo: Definovat proměnnou dřív než ji použiješ.

Definitívna odpoveď na otázku z úvodného príspevku:

Musíš pracovať iba s už definovanými premennými:
1. Vlastné premenné definovať skôr ako ich použiješ:
$premenna="bla";

//uz mozes pracovat s premennou $premenna

2. Testovať existenciu preddefinovaných (platí i pre vlastné) premenných:
if(isset($_SERVER["HTTP_REFERER"])){//premenna existuje, mozes s nou robit


}
else{//premenna neexistuje, musis sa zaobist bez nej

}
gaminn
Profil *
k
Napsal jsi - Definovat vsechny promenne pred pouzitim je blbost. - To je zcela určitě neobratně řečené, protože z toho vyplývá, že ne všechny ještě nedeklarované proměnné se musí deklarovat.

Kdybys napsal jakékoliv jiné příslovce budeme na tom stejně, samozřejmě. Jen jsem tím chtěl říct, že pro každého takové příslovce znamená něco jiného, někdo si myslí, že umí hodně a přitom neumí ani 10% z toho, co je potřeba. Vzpomínám si na jednoho člověka, který se zde ptal, zda se vlastně má ještě co z PHP učit, připadalo mu, že všechno umí.
krteczek
Profil
Nechci se vás dotknout ale jsem přesvědčen, že iniciace proměnných které ve skriptu použiju je věc dobrá až nutná.
Nejde spoléhat na to že tady a teď jsou globální proměnné (register_globals) vyplé, takže mi nehrozí postrčení jejího obsahu. Náhodou si admin řekne že by je mohl povolit a bezpečnostní problém je na světě a vy si toho nemusíte všimnout...
Takže doporučuji iniciovat všechny proměnné použité ve scriptu, a ty které očekáváme v některém globálním poli proměnných testovat pomocí:
isset když nám stačí že je nastavena,
empty když zjišťujeme nenulový stav

Na vývojářském počítači mít zaplý výpis všech hlášek php a na ostrém webu pro změnu veškerý výpis zakázat, ale zároveň logovat.
krteczek
XKrik
Profil
hmm, asi budu ty proměnný deklarovat ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0