Autor Zpráva
r2_99
Profil *
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 *
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"]))
Akorát u empty pozor na 0.
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)
}
Dá se ověřovat i pomocí 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
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
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 *
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
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
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 *
Je tedy tento zápis špatný?

if ($zprava!='')...
panther
Profil
r2_99:
vyhodí varování o nedefinované proměnné, proměnná $zprava nemusí existovat.
r2_99
Profil *
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 *
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
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 *
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.
Ugo
Profil
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í

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: