Re: odporny kod
Zaslán uživatelem/kou:
MirekS (IP adresa zaznamenána)
Datum: 2005-01-17, 09:41
Já mám ke kódu několik výhrad:
- používání funkce mysql_Result - není doporučována a právě protože se na tomto kódu mnoho lidí učí php, tak se ho naučí špatně (je mnohem výhodnější používat funkci mysql_fetch_assoc, mysql_fetch_row(), mysql_fetch_array() a mysql_fetch_object() - jsou rychlejší, méně zatěžují server a vrací celý řádek z databáze, takže jí stačí zavolat jen jednou a nemusí se to dělat 2x nebo víckrát pro každou hodnotu z jiného sloupečku, jako u té mysql_Result)
tahle ukázka ze spec fce je prostě hrůza :
$pocetmenu=mysql_num_rows($dotazmenu);
for ($pom=0;$pom<$pocetmenu;$pom++):
switch (mysql_Result($dotazmenu,$pom,"level")):
case 1:
// 0 - id, 1 - prep. rodic, 2 - nazev pol., 4 - id predka
$sezdruha[$poc_sezdruha][0]=mysql_Result($dotazmenu,$pom,"idt");
$sezdruha[$poc_sezdruha][1]=mysql_Result($dotazmenu,$pom,"rodic");
$sezdruha[$poc_sezdruha][2]=mysql_Result($dotazmenu,$pom,"nazev");
$sezdruha[$poc_sezdruha][4]=mysql_Result($dotazmenu,$pom,"id_predka");
když by to mohlo být takto:
while ($line=mysql_fetch_assoc(0) {
switch ($line["level"]):
case 1:
// 0 - id, 1 - prep. rodic, 2 - nazev pol., 4 - id predka
$sezdruha[$poc_sezdruha][0]=$line["idt"];
$sezdruha[$poc_sezdruha][1]=$line["rodic"];
$sezdruha[$poc_sezdruha][2]=$line["nazev"];
$sezdruha[$poc_sezdruha][4]=$line["id_predka"];
}
a navic to ušetří i volání $pocetmenu=mysql_num_rows($dotazmenu);
místo 5-ti volání funkce pro práci s databází jen jedno! a zbytek je práce jen s proměnnými, což je mnohem rychlejší a méně to zatěžuje server
- převod data:
ukázka ze specfce.php:
function MyDatetimeToInt($mysql_datum)
{
list($datum,$cas)=explode(" ",$mysql_datum);
list($rok,$mes,$dat)=explode("-",$datum);
list($hod,$min,$sek)=explode(":",$cas);
return date("U",mktime($hod,$min,$sek,$mes,$dat,$rok)); // int
}
lze udělat takto:
function MyDatetimeToInt($mysql_datum) {
return date("U", strtotime($mysql_datum));
}
řekl bych, že je to zase mnohem přehlednější (kromě toho netuším, proč se funkce jmenuje MyDatetimeToInt, když vrací naformátovaný string) a myslím si, že se lze v celém phpRS obejít bez funkce mktime a pokud chceme najít datum před měsícem, tak než to udělat takto:
$predeslymes=date("m",mktime(0,0,1,($mesic-1),1,$rok));
tak se to dá napsat takto:
$predeslymes=date("m", strtotime("-1 month"));
kromě toho se dá takto rovnou nadefinovat třeba celé datum, nejen měsíc např
date("Y-m-1", strtotime("-1 month")) - první den předchozího měsíce
date("Y-m-t", strtotime("-1 month")) - poslední den předchozího měsíce
a je-li ve funkci kalendar toto:
$predeslyod=$predeslyrok."-".$predeslymes."-1 00:00:01";
tak kdyby někdo vydal článek přesně o půlnoci (v 00:00:00), tak se mu nezobrazí neboť to hledá články s datem větším nebo rovno 00:00:01 a 00:00:00 je o vteřinu méně
- používání uvozovek u řetězců a pak nutnost následného escapování všech uvozovek - zase pro méně znalé je to méně přehledné a mohou snadno něco upravit špatně ukázka ze specfce.php
$plus="<img src=\"".$GLOBALS["adrobrlayoutu"]."plus.gif\" width=\"11\" height=\"11\" alt=\"plus\" /> ";
nebo přehlednější
$plus='<img src="'.$GLOBALS["adrobrlayoutu"].'plus.gif" width="11" height="11" alt="plus" /> ';
navíc se tvrdí, že ty řetězce v apostrofech se vykonávají rychleji (a tudíž zase méně zatěžují server), neboť se v nich nemusí hledat proměnné, ze kterých se má vrátit jejich hodnota, ano by to šlo totiž zapsat i takto :
$plus="<img src=\"$GLOBALS["adrobrlayoutu"]plus.gif\" width=\"11\" height=\"11\" alt=\"plus\" /> ";
- funkce pictures.php, je zde uplně zbytečná, jen zase zvyšuje zátež serveru zbytečným generováním obrázků, které lze snadno nahradit jejich statickou podobou (a navíc jsou zde obrázky zcela nesmyslně generovány jako jpg, když mnohem vhodnější formát je gif nebo png), tohle pouze přináší problémy s gd knihovnou, které by při použití statických obrázků vůbec nevznikly
P.S. ukázky kódu jsem teď dělal od boku, tak mě netlučte, kdyby tam byly nějaké chybky, díky kterým to zcela nefunguje, měly zde sloužit jen pro rámcové srovnání
Celkem upraveno 3×. Poslední úprava MirekS v 17.01.2005 10:15.