Autor Zpráva
zooner
Profil
Zdravim, zajímalo by mě jestli je efektivní psát takto kód:


function otevirani(){
if(isset($_GET["smazat"])){
smazat($_GET["smazat"]);
}
elseif(isset($_GET["zmenit"])){
zmenit($_GET["zmenit"]);
}
}
nightfish
Profil
Zdravim, zajímalo by mě jestli je efektivní psát takto kód:
ano
zooner
Profil
nightfish

díky, já jen, že programovat už nějak tak umím, ale bohužel příšerně nepřehledně a ne moc efektivně ;-)
bohyn
Profil
Pokud bys pouzil jen
if($_GET["smazat"])
tak PHP vyhodi notice v pripade ze promenna neexistuje.

Jinak bych tam jeste pridal nejakou kontrolu na datovy typ promenne pokud ji nemas v tech funkcich.
 // napr. pokud ma $_GET["smazat"] byt cislo
if(isset($_GET["smazat"]) && $_GET["smazat"] + 0){ 
  smazat($_GET["smazat"]); 
}
Alphard
Profil
bohyn
když už se bude zjišťovat, jestli je proměnná číslo, máme na to funkci is_numeric(), nevymýšlejte věci, které ani nefungují

např. řetězec 12OKrtq by tím prošel ...
BetaCam
Profil
Alphard

I s is_numeric() je to tak trochu čistě orientační, protože $_GET['smazat'] by mělo být s největší pravděpodobností typu INT jenže přes is_numeric() projde i float či hexadecimal takže to také není úplně neprůstřelné. Pokud chce mít člověk opravdu jistotu, že hodnota je typu "INT" ( což neni protože ji dostaneme jako string proto ty uvozovky ) lze použít například regulár

if (preg_match('/^[0-9]+$/', $_GET["smazat"])){
	$smazat = (int)$_GET["smazat"];
}
Mastodont
Profil
----
(sorry, duplicita)
nightfish
Profil
BetaCam
a proto chytří lidé vymysleli funkci ctype_digit()
BetaCam
Profil
nightfish
a proto chytří lidé vymysleli funkci ctype_digit()

To ovšem nic nemění na tom co sem napsal. Tedy to, že ani is_numeric($_GET["smazat"]) ani přímé přetypování $_GET["smazat"] na int není zrovna ideální pokud hodnoty, které se testují mají být přirozená čísla.

Jinak v tomto případě je to jedno, ale ctype_digit() se také nehodí na zjištování jestli hodnota stringu je typu INT, protože přes něj neprojdou záporná čísla.

to lze zase udělat třeba regůlárem nebo pomocí dvojího přetypování ( $_GET["smazat"] === (string)(int)$_GET["smazat"] ) a pude to daleko více způsoby.

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: