Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 3. 4. 2012, 12:40:30 · Upravil/a: Fisak
Zdravím.. mám:
public function sqlDefaultTemplate($string) { $sql = $this->db->query_system("SELECT type, page, skin, inc FROM page where page = '".mypage("page")."'"); $Data_TMP=mysql_fetch_assoc($sql); return $Data_TMP[$string]; } if(!empty($this->sqlDefaultTemplate("page"))) { nevíte kde může být chyba ? |
||
Ugo Profil |
#2 · Zasláno: 3. 4. 2012, 13:01:36
jestli se nepletu není to kritická chyba, nicméně v empty() a podobných nesmí být návratová hodnota, ale jedině přímá hodnota, takže jedině rozdělit, nejprve udělat proměnnou a tu pak zkontrolovat, případně udělat kontrolu už ve funkci a v případě selhání vracet false a to pak kontrolovat
|
||
Jan Tvrdík Profil |
#3 · Zasláno: 3. 4. 2012, 13:09:40
Citace z dokumentace:
„empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).“ Tedy kód bys mohl upravit třeba takto $tpl = $this->sqlDefaultTemplate("page"); if(!empty($tpl)) { |
||
AM_ Profil |
#4 · Zasláno: 3. 4. 2012, 13:56:26
empty() je obdoba isset() a především se používá k ověření, že nějaká proměnná (, klíč pole nebo atribut objektu) existuje (resp. empty narozdíl od isset vrací true, pokud proměnná neexistuje nebo je její hodnota po přetypování na boolean rovna false).
V tomto případě musíš každopádně isset nebo empty už přímo v té funkci - pokud by $string odkazoval na neexistující klíč pole, bude to házet notice už v té funkci. Dál pokud chceš ověřit, že třeba skin je prázdný string, měl bys to dělat pomocí if ($this->sqlDefaultTemplate("page") == '') a empty venku té funkce už nepoužívat.
|
||
ahoj Profil * |
#5 · Zasláno: 3. 4. 2012, 14:09:38
AM:
Můžu se plést, ale vidím jako dost pravděpodobné, že když je ta podmínka splněna, je to $this->sqlDefaultTemplate("page") voláno znovu, aby ty hodnoty mohly být použito. Už proto bych preferoval to, co píše Jan Tvrdík |
||
AM_ Profil |
#6 · Zasláno: 3. 4. 2012, 14:20:20
[#5] ahoj
to máš pravdu, to je další věc že tohle není úplně šťastný návrh - cítím z toho, že ten dotaz bude i tak na stránce volaný několikrát, bylo by vhodné výsledek cachovat a ne ho pokaždé s tou funkcí číst znovu z databáze. Taky se samozřejmě dá napsat toto: $page = $this->sqlDefaultTemplate("page"); if ($page == '') |
||
Časová prodleva: 14 let
|
0