Autor | Zpráva | ||
---|---|---|---|
r2_99 Profil * |
#1 · Zasláno: 2. 5. 2012, 08:53:03
Ahoj,
ve zdejších skriptech vidím funkci isset, zajímalo by mě zda je nějaký rozdíl mezi zápisy: if ($zprava!='') a if (isset($zprava)) |
||
Medvídek Profil |
r2_99:
U prvního zkoumáš, jestli obsah proměnné zprava není prázdný. U druhýho zkoumáš, jestli vůbec proměnná zprava existuje a jestli není NULL. |
||
r2_99 Profil * |
#3 · Zasláno: 2. 5. 2012, 09:05:35
Díky, pokud tedy budu kontrolovat zda uživatel neodeslal prázdné nějaké vstupní pole co je vhodnější?
|
||
Medvídek Profil |
r2_99:
U formuláře určitě obojí. if(isset($_POST["vstup"]) AND !empty($_POST["vstup"])) |
||
Tori Profil |
Jen doplním:
„U prvního zkoumáš, jestli obsah proměnné zprava není prázdný.“ - a jestli to není číslo nula, nebo FALSE. (kvůli automatickému přetypování) Data z formuláře přijdou vždy jako řetězec, takže bych použila if (isset($_POST['neco']) && $_POST['neco'] != '') // = byl odeslán formulář a vyplněno toto pole? // anebo: if ($_POST) { // = byl odeslán formulář? if ($_POST['text'] != '') // textová pole by měla existovat vždy, i kdyby nebyla vyplněna (viz [#7]) if (isset($_POST['checkbox']) && $_POST['checkbox'] == 'hodnota') // checkboxy se odešlou jen pokud budou zaškrtnuté. if ($_POST['checkbox'] == 'hodnota') // pokud není zaškrtnutý, vypíše Notice: Undefined index "checkbox" ... (proto se používá isset) } if (empty($_POST['neco'])) - pak nemusíte použít isset, ale když zadám do políčka nulu, tak to bude hlásit prázdné políčko. Pohrajte si s formulářem, vyzkoušejte, co bude v poli $_POST, když odešlete různé typy políček vyplněné nebo ne.
|
||
Majkl578 Profil |
#6 · Zasláno: 2. 5. 2012, 13:21:43
Medvídek:
„U formuláře určitě obojí.“ Proč? To isset je zbytečné.
r2_99: Použitím isset kontroluješ existenci proměnné / části pole. Oproti tomu empty kontroluje i nenulovou hodnotu. |
||
Jan Tvrdík Profil |
Tori:
„textová pole budou existovat vždy, i kdyby nebyla vyplněna“ Na to se nelze spoléhat. HTTP požadavek jde velmi snadno podvrhnout, např. můžu daný input odstranit pomocí FireBugu. |
||
Medvídek Profil |
#8 · Zasláno: 2. 5. 2012, 14:50:04
Majkl578:
Zrovna u formulářových polí ho dávám vždycky, abych předešel Notice: Undefined variable. |
||
Jan Tvrdík Profil |
Medvídek:
Volání empty na neexistující proměnné k takové chybě nikdy nepovede. isset a empty nejsou totiž funkce, ale speciální jazykové konstrukce, které lze bezpečně používat ke kontrole proměnných, na jejichž existenci se nelze spolehnout.
|
||
Enko Profil * |
#10 · Zasláno: 2. 5. 2012, 23:42:41
Tori:
„if ($_POST) { // = byl odeslán formulář?“ Toto nemusí být vždy pravda. Protože $_POST může být za některých okolností prázdná, respektive neexistovat i při odeslání formu přes POST. Stoprocentní jistotou je použít toto: <?php if($_SERVER["REQUEST_METHOD"] == "POST"){... ?> |
||
Mastodont Profil |
#11 · Zasláno: 3. 5. 2012, 06:37:38
Enko:
V takovém případě je ovšem tvůj kód zbytečný, protože když $_POST bude prázdný nebo nebude vůbec, tak vnitřek toho ifu stejně nemá význam provádět. |
||
Tori Profil |
Enko:
„$_POST může být za některých okolností prázdná, respektive neexistovat i při odeslání formu přes POST“ To jsem nevěděla. Za jakých okolností? Můžete mě odkázat na nějaké info? Díky. |
||
Majkl578 Profil |
#13 · Zasláno: 3. 5. 2012, 09:37:44
Enko, Tori:
$_POST bude existovat vždy, stejně jako $_GET, $_REQUEST a další. Jsou to totiž superglobální proměnné, které jsou dostupné vždy a všude. Otázka už jen je, jestli bude (budou) něco obsahovat. |
||
r2_99 Profil * |
#14 · Zasláno: 3. 5. 2012, 21:08:01
Je tedy tento zápis špatný?
if ($zprava!='')... |
||
panther Profil |
#15 · Zasláno: 3. 5. 2012, 21:10:29
r2_99:
vyhodí varování o nedefinované proměnné, proměnná $zprava nemusí existovat.
|
||
r2_99 Profil * |
#16 · Zasláno: 3. 5. 2012, 21:18:22
Já to do teď takto používal a žádné varování o nedefinované proměnné jsem neviděl, to asi tedy záleží na konkrétním nastavení php?
|
||
panther Profil |
r2_99:
„to asi tedy záleží na konkrétním nastavení php?“ ano, přesně tak. Fakt, že se nezobrazí (chybové hlášky jsou vypnuté), neznamená, že se varování nevygeneruje. |
||
Enko Profil * |
#18 · Zasláno: 3. 5. 2012, 22:51:12
Tori:
„Můžete mě odkázat na nějaké info? Díky.“ Více v knize 1001 tip a triků pro PHP of Jakuba Vrány. Investuj, těch pár stovek se ti hned vrátí . |
||
jenikkozak Profil |
#19 · Zasláno: 4. 5. 2012, 07:48:05
Enko:
Můžeš prosím odkázat konkrétněji - použít citaci, uvést číslo stránky. Přece jen svou poznámkou nutíš spoustu lidí, aby tu knížku pročítali znovu, čímž přicházejí o čas, v němž by se jim mohla jejich tebou doporučená „investice“ vrátit. |
||
Enko Profil * |
#20 · Zasláno: 5. 5. 2012, 14:50:10
jenikkozak:
„Můžeš prosím odkázat konkrétněji...“ Je to stránka č. 197 a bod 437 Detekce odesání formuláře Přepisovat z knihy to sem nebudu, je to víc než na půl stránky. |
||
Časová prodleva: 5 dní
|
|||
Ugo Profil |
#21 · Zasláno: 10. 5. 2012, 13:47:06
Tori:
minimálně z win serveru (to chování bude ale asi stejné) mám zkušenost, že POST je prázné například když odeslaná hodnota je větší než maximální povolená (max_input), jistě budou další příklady, ostatně v programování a v PHP to platí snad dvojnásob (na win 4 násobně) se nedá na nic spolehnout, otázkou bejvá jen to, jak moc případná chyba vadí |
||
Časová prodleva: 12 let
|
0