Autor Zpráva
drvaca
Profil
Zdravím,
do proměnné text chci dostat obsah inputu textpole. Tedy samozřejmě pokud existuje. Normálně bych to udělal takto:
$text = $_POST["textpole"];

Poblém však nastane tehdy, když tam to textpole není, pak to vypíše
Notice: Undefined index: textpole in /ftp/censured/index.php on line 1079
Systém nedokáže ignorovat neexistující textpole. Jak to mám upravit, aby to neexistující textpole ignorovalo, ale existující neignorovalo?
panther
Profil
drvaca:
isset(), resp. !empty().
DoubleThink
Profil *
Případně můžeš taky toto Upozornění ignorovat, protože nepředstavuje žádný bezpečnostní ani výkonnostní problém. Viz error_reporting.
drvaca
Profil
No, nakonec mi vystačil isset, děkuji :)
AM_
Profil
DoubleThink:
tady bych to ignoroval spíše lokálně zavináčem (Tedy @$_POST['textpole']). error_reporting by měl být při vývoji zapnutý a v ostrém provozu vypnutý, takže v ostrém to bude stejně jedno a při vývoji je otravné, když mezi smysluplnými chybami vidíš i notice, o kterých víš.
Majkl578
Profil
AM:
error_reporting by měl být zapnutý vždy (i na produkčním) nejlépe s hodnotou E_ALL | E_STRICT.

DoubleThink, AM:
Osobně toto nedoporučuji používat.
AM_
Profil
Majkl578:
puritán se ozval :)

error_reporting by měl být zapnutý vždy
máš pravdu, vypínat by se měl na produkčním display_errors.

Osobně toto nedoporučuji používat.
když tě tlačí čas, @ napíšeš podstatně rychleji než isset() a pokud víš, co děláš, výsledek je stejný (až na tu vyhozenou potlačenou notice).
DoubleThink
Profil *
Majkl578:
Osobně toto nedoporučuji používat.
Z nějakého konkrétního důvodu?
Majkl578
Profil
DoubleThink:
Pokud takový neexistující offset nacpu třeba do foreach, hned k notice přibývá warning. Existuje určitě víc dalších míst, kde neošetřený neexistující offset nebo proměnná sama způsobí problémy.
E_NOTICE považuji za chybu, stejně jako E_WARNING, E_STRICT a další.
Str4wberry
Profil
Podle mě je nejlepší to řešit případ od případu. Třeba psát něco jako:
echo (isset($_POST["textpole"])? $_POST["textpole"]: "");
Mně nepřijde vůbec smysluplné.
W4C
Profil
Nestačí někde na začátku stránky předdefinovat prázdnou proměnnou/někde před inputem/?
$text = "";
DoubleThink
Profil *
Majkl578:
Pokud takový neexistující offset nacpu třeba do foreach, hned k notice přibývá warning.
Nevhodný příklad, argumentačně úplně mimo. Je jasné, že když do foreach nacpu místo pole zemlbábu, tak se mu to nebude líbit. To ale budu řešit až na místě.

Netvrdím, že notices jsou zbytečné. Tvrdím, že profík je může klidně ignorovat a nesnížit tím kvalitu a bezpečnost aplikace.
AM_
Profil
[#11] W4C:
a v čem to pomůže? to nemá žádný vliv na to, jak zjistit, zda v $_POST['textpole'] bylo něco předáno.
W4C
Profil
AM:
sry,máš pravdu navíc jsem to napsal blbě :(
- mělo tam být:
$textpole = "";
,
ale tohle by stejně fungovalo jen jedině kdyby se použilo místo
$_POST["textpole"]
zkráceně
$textpole


Teď mě tak napadá, jakej je vlastně rozdíl mezi použitím zápisu
$_POST["textpole"]
a
$textpole
při odesílání inputu?
Já používám vesměs ten kratší.
name="textpole"
v imputu se dá zapsat tak i tak a efekt je na první pohled stejnej.
dRaGen
Profil
W4C:
Základní problém je v tom že pokud je použito nastavení register_globals 0, což je defaultní tak ti ten tvůj skript nebude fungovat. protože rozlišuje $_POST, $_GET

To že píšeš zkráceně tento tvar se dopouštíš obrovské bezpećnostní chyby. Protože někdo ti může manipulovat s jinejma datama než ty požaduješ.

edit: viz. http://php.net/manual/en/security.globals.php
W4C
Profil
dRaGen
nj,vidíš to, takhle to dopadá, když je člověk zhýčkanej register_globals ON :))
No nic, vrhnu se na věc - naštěstí to je bleskovka.
Díky za upřesnění.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0