|
předchozí |
obsah DP |
home |
následující |
2.5.11. Referenční příručka funkcí
Funkce jsou řazeny abecedně. U všech je uveden stručný popis jejich činnosti a vstupní a výstupní hodnoty a kompletní zdrojový kód funkcí s komentáři. Kód lze také nalézt přímo v souboru funkce.php. Nápovědy k základním funkcím PHP zde neopisuju, lze je najít v dokumentaci PHP na [14].
define()
definice konstant - substituce dlouhých nebo často používaných řetězců za jiný. Hodí se pro zjednodušení zápisu. V PHP se definují proměnné pomocí funkce define():
define(string "KONST", 'dlouhatansky obsah konstanty KONST');
"BR" = tag <br /> a zalomení řádku
"NL" = zalomení řádku
"HTM_ZAH" = celá hlavička XHTML dokumentu až po open tag </body>
"HTM_ZAP" = záhlaví XHTML dokumentu: </body></html>
"HTM_VALID" = odkaz a obrázek na validační stránky W3C pro kontrolu správnosti dokumentu XHTML1 http://validator.w3.org/
/*--------------------------------------------------------*/
/* definice konstant */
/*--------------------------------------------------------*/
define("BR", "<br />\n");
define("NL", "\n");
define("HTM_ZAH", '
<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <meta http-equiv="Content-type" content="text/html; charset=windows-1250" />
<link rel="stylesheet" href="test.css" type="text/css" />
<title>programový systém TEST</title>
</head>
<body>' );
define("HTM_ZAP", '</body></html>');
define("HTM_VALID",'<hr /><p><a href="http://validator.w3.org/check?uri=referer">
<img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" />
</a> </p>');
formular()
vygeneruje počet $zad_ot otázek z MOJEPOLE $arr_in do formuláře testu, výstup na obrazovku. vypsaná formulářová data se odesílají do zpracujícího skriptu $nextscript = v mém použití 3.php.
void formular(array $arr_in, int $zad_ot, string $nextscript)
/*--------------------------------------------------------*/
/* formular() */
/* generuje $zad_ot otazek do formulare testu */
/*--------------------------------------------------------*/
function formular($arr_in, $zad_ot, $nextscript)
{
print '<h2 class="test">Test na téma:</h2>'.NL;
print '<h1 class="test">'.$arr_ins[0][0].'</h1>'.NL.NL;
print "počet otázek testu: ".$zad_ot.BR;
print'<form action="'.$nextscript.'" method="post">'.BR;
for($i=1;$i<=$zad_ot;$i++) /* pres otazky */
{
print '<font class="test_ota">'.$i.'. '.$arr_in[$i][0][0].'</font>'; /* pisu zadani */
print '<table class="test">'.NL;
for($j=1;$j<=$arr_in[$i][0][1];$j++) /* pres odpovedi */
{
print '<tr><td class="test_odp">'.NL.'<input type="hidden" value="n" name="skrt'.'['.$i.']'.'['.$j.']'.'" />'.NL;
print '<input type="checkbox" value="a" name="skrt'.'['.$i.']'.'['.$j.']'.'" />'.$arr_in[$i][$j][0].NL;
print '</td></tr>'.NL.NL;
} /* endfor $j */
print '</table>'.BR.NL.NL;
} /* endfor $i */
print '<input type="submit" value="odeslat" />'.NL;
print '<input type="reset" value="smazat" />'.NL;
print '</form>'.NL;
}
is_implicit_x()
otestuje zda má atribut $in povolenou hodnotu 'a' nebo 'n', případně nastaví implicitní a vrátí
string is_implicit_a(string $in); string is_implicit_n(string $in);
/*--------------------------------------------------------*/
/* is_implicit_x() */
/* otestuje zda ma atribut $in povolenou hodnotu */
/* 'a' nebo 'n' a pripadne nastavi implicitni */
/*--------------------------------------------------------*/
function is_implicit_n($in) {if ($in!="a") $in="n"; return($in);}
function is_implicit_a($in) {if ($in!="n") $in="a"; return($in);}
legenda_hodn()
vrátí řetězec textu HTML s legendou pro uložení podle typu hodnoceni $typ a kontroluje jestli $typ je 1,2 nebo 3. při nerovnosti nastaví typ 1
function legenda_hodn($typ)
/*--------------------------------------------------------*/
/* legenda_hodn() */
/* zobrazeni legendy podle typu hodnoceni */
/*--------------------------------------------------------*/
function legenda_hodn($typ)
{
/* ---------------- typ 2 --------------------------------*/
if ($typ==2)
{
$save=NL.'<hr /><br /><b> ZPŮSOB HODNOCENÍ TESTU </b>
<br /><b>typ2 - hledání správných odpovědí - kontrola správnosti jen u zaškrtnutých variant</b>
<br /> zaškrtnutá odpověď je dobře - zeleně a plus body
<br /> zaškrtnutá odpověď je špatně - červeně a minus body
<br /> nezaškrtnuté - nehodnoceno, šedě, bez bodů
<br /> tučným písmem jsou správné varianty odpovědí'.NL.BR.BR.'
<table class="test">
<tr><td><img src="a.gif" alt="a" /></td><td class="test_aa">Správná varianta odpovědi, je zaškrtnuta - dobře </td><td class="test_bod"> +2 </td></tr>
<tr><td><img src="a.gif" alt="a" /></td><td class="test_an">Nesprávná varianta odpovědi, je zaškrtnuta - špatně </td><td class="test_bod"> -2 </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_ga">Správná varianta odpovědi, měla být zaškrtnuta </td><td class="test_bod"> </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_gn">Nesprávná varianta odpovědi, neměla být zaškrtnuta</td><td class="test_bod"> </td></tr>
</table><br />
';}
/* ---------------- typ 3 --------------------------------*/
elseif ($typ==3)
{
$save=NL.'<hr /><br /><b> ZPŮSOB HODNOCENÍ TESTU </b>
<br /><b>typ3 - autoškola - body jen za kompletně správně zodpovězenou otázku</b>
<br /> odpověď je dobře - zeleně
<br /> odpověď je špatně - červeně
<br /> tučným písmem jsou správné varianty odpovědí'.NL.BR.BR.'
<table class="test">
<tr><td><img src="a.gif" alt="a" /></td><td class="test_aa">Správná varianta odpovědi, je zaškrtnuta - dobře </td><td class="test_bod"> </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_na">Správná varianta odpovědi, měla být zaškrtnuta - špatně </td><td class="test_bod"> </td></tr>
<tr><td><img src="a.gif" alt="a" /></td><td class="test_an">Nesprávná varianta odpovědi, je zaškrtnuta - špatně </td><td class="test_bod"> </td></tr>
<tr><td> </td><td> </td><td class="test_bod"> 0 </td></tr>
</table><br />
<table class="test">
<tr><td><img src="a.gif" alt="a" /></td><td class="test_aa">Správná varianta odpovědi, je zaškrtnuta - dobře </td><td class="test_bod"> </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_nn">Nesprávná varianta odpovědi, neměla být zaškrtnuta - dobře</td><td class="test_bod"> </td></tr>
<tr><td> </td><td> </td><td class="test_bod"> 2 </td></tr>
</table><br />
';}
/* -------- standartne typ 1 ------------------------------*/
else
{
$typ = '1';
$save=NL.'<hr /><br /><b> ZPŮSOB HODNOCENÍ TESTU </b>
<br /><b>typ1 - kontrola správnosti všech variant</b>
<br /> odpověď je dobře - zeleně a plus body
<br /> odpověď je špatně - červeně a minus body
<br /> tučným písmem jsou správné varianty odpovědí'.NL.BR.BR.'
<table class="test">
<tr><td><img src="a.gif" alt="a" /></td><td class="test_aa">Správná varianta odpovědi, je zaškrtnuta - dobře </td><td class="test_bod"> +2 </td></tr>
<tr><td><img src="a.gif" alt="a" /></td><td class="test_an">Nesprávná varianta odpovědi, je zaškrtnuta - špatně </td><td class="test_bod"> -2 </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_na">Správná varianta odpovědi, měla být zaškrtnuta - špatně </td><td class="test_bod"> -2 </td></tr>
<tr><td><img src="n.gif" alt="n" /></td><td class="test_nn">Nesprávná varianta odpovědi, neměla být zaškrtnuta - dobře</td><td class="test_bod"> +2 </td></tr>
</table><br />
';}
return array($typ, $save);
}
michej_pole()
vrátí promíchané pole $arr_in od indexu [1] do konce, [0] zůstane.
array michej_pole(array $arr_in)
/*--------------------------------------------------------*/
/* michej_pole() */
/* promicha pole od indexu [1] do konce, [0] zustane */
/*--------------------------------------------------------*/
function michej_pole($arr_in)
{
$arr_out = Array();
$arr_out[0] = $arr_in[0];
$prvku = $arr_in[0][1];
srand ((double) microtime() * 10000000);
$keys = range(1,$prvku); /* generuje pole klicu od 1 do poctu prvku */
shuffle ($keys); /* zamicha polem klicu */
for($i=1; $i<=$prvku; $i++)
{
$arr_out[$i]=$arr_in[$keys[$i-1]];
}
return ($arr_out);
}
michej_test()
promíchá v MOJEPOLE $arr_in odpovědi a otázky testu dle parametrů z konfigurace $mich_ot, $mich_od a vrátí zpět
array michej_test(array $arr_in, string $mich_ot, string $mich_od)
/*--------------------------------------------------------*/
/* michej_test() */
/* promicha v mojepole odpovedi a otazky testu dle cfg */
/*--------------------------------------------------------*/
function michej_test($arr_in, $mich_ot, $mich_od)
{
$arr_out = Array();
$arr_out[0] = $arr_in[0];
$arr_pom = Array();
if ($mich_ot=="a"): $arr_pom = michej_pole($arr_in); /* micham otazky */
else: $arr_pom = $arr_in;
endif;
if ($mich_od=="a"): /* micham odpovedi */
{ for($i=1; $i<=$arr_in[0][1]; $i++) /* pres otazky */
{
$arr_out[$i] = michej_pole($arr_pom[$i]); /* micha odpovedi*/
}
}
else: $arr_out=$arr_pom;
endif;
return ($arr_out);
}
nactifile()
načte obsah souboru $jmeno do proudu
string nactifile(string $jmeno)
/*--------------------------------------------------------*/
/* nactifile() */
/* nacte obsah souboru do proudu */
/*--------------------------------------------------------*/
function nactifile($jmeno)
{
$fp = fopen($jmeno,'r');
$data = fread($fp, filesize($jmeno));
fclose($fp);
return ($data);
}
parse2arr()
z proudu xml souboru $proud získaného nactifile() přeparseruje data a vrátí strukturované pole se všemi informacemi
array parse2arr(string $proud)
/*--------------------------------------------------------*/
/* parse2arr() */
/* z datoveho proudu xml souboru preparseruje a udela pole*/
/*--------------------------------------------------------*/
function parse2arr($proud)
{
$parser = xml_parser_create(); /* parser v php */
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); /* preskakuje bile znaky*/
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); /* maly velky pismena*/
xml_parse_into_struct($parser,$proud,$vals,$index);
xml_parser_free($parser);
return ($vals);
}
prepis_cfg()
zjednoduší a přepíše veliké pole s konfigurací získané z parse2arr() a vrátí pole s mnou danou strukturou zjednodušených dat
array prepis_cfg(array $arr_in);
/*--------------------------------------------------------*/
/* prepis_cfg() */
/* zjednodusi a prepise velike pole z parseru do mejepole */
/* */
/* intval() - ze string retezce udela cislo integer */
/*--------------------------------------------------------*/
function prepis_cfg($arr_in)
{
for($i=0;$i<=sizeof($arr_in);$i++)
{
switch ($arr_in[$i][tag]): /* porovnavani tagu xml */
case "zadani":{
$arr_out[z_ad]=$arr_in[$i][attributes][adresa];
$arr_out[z_ot]=intval($arr_in[$i][attributes][otazek]);
$arr_out[z_ca]=intval($arr_in[$i][attributes][cas]);
$arr_out[z_lo]=is_implicit_n($arr_in[$i][attributes][login]);
} break;
case "michani":{
$arr_out[m_ot]=is_implicit_n($arr_in[$i][attributes][otazek]);
$arr_out[m_od]=is_implicit_n($arr_in[$i][attributes][odpovedi]);
} break;
case "vysledky":{
$arr_out[v_po]=intval($arr_in[$i][attributes][pocitani]);
$arr_out[v_zo]=is_implicit_a($arr_in[$i][attributes][zobrazovat]);
$arr_out[v_uk]=is_implicit_n($arr_in[$i][attributes][ukladat]);
$arr_out[v_ad]=$arr_in[$i][attributes][adresar];
} break;
endswitch;
} //endfor
return($arr_out);
}
prepis_test()
zjednoduší a přepíše veliké pole s testem získané z parse2arr() a vrátí MOJEPOLE s mnou danou strukturou zjednodušených dat
array prepis_test( array $arr_in)
/*--------------------------------------------------------*/
/* prepis_test() */
/* zjednodusi a prepise velike pole z parseru do mejepole */
/*--------------------------------------------------------*/
function prepis_test($arr_in)
{
$ot=1; $odp=1;
for($i=0;$i<=sizeof($arr_in);$i++)
{
switch ($arr_in[$i][tag]):
case "okruh": $arr_out[0][0]=$arr_in[$i][value];
break;
case "otazka":{
switch($arr_in[$i][type]):
case "open": $odp=1;
break;
case "close": $ot++;
break;
endswitch;
}
break;
case "zadani": { if ($arr_in[$i][attributes][typ]=="url"):
$arr_out[$ot][0][0]='<a href="'.$arr_in[$i][value].'" target="new" class="test_url">'.$arr_in[$i][value].'</a>';
else: $arr_out[$ot][0][0]=$arr_in[$i][value];
endif;
}
break;
case "odpoved":{ if ($arr_in[$i][attributes][typ]=="url"):
$arr_out[$ot][$odp][0]='<a href="'.$arr_in[$i][value].'" target="new" class="test_url">'.$arr_in[$i][value].'</a>';
else: $arr_out[$ot][$odp][0]=$arr_in[$i][value];
endif;
}
$arr_out[$ot][$odp][1]=$arr_in[$i][attributes][spravnost];
$arr_out[$ot][$odp][2]=intval($arr_in[$i][attributes][body]);
$arr_out[$ot][0][1]=$odp;
$odp++;
break;
endswitch;
} //endfor
$arr_out[0][1]=$ot-1;
return ($arr_out);
}
vyhodnot_test()
Vyhodnocuje test, generuje data pro zobrazeni na obrazovku a uložení do souborů. Porovná MOJEPOLE $arr_test s předanými zaškrtnutými checkbox v $arr_skrt, za podmínek nastavených v konfiguraci $cfg. Vrátí pole s řetězci textu v HTML pro pozdější uložení do souboru.
array vyhodnot_test(array $arr_test, array $arr_skrt, array $cfg)
/*--------------------------------------------------------*/
/* vyhodnot_test() */
/* vyhodnocuje test, generuje data pro zobrazeni a ulozeni*/
/* vstup Array() - mojepole testu */
/* - pole hodnot zaskrtnutych checkbox */
/* - cfg s parametry */
/* promene $saveX - kousky vystupu pro slepeni */
/*--------------------------------------------------------*/
function vyhodnot_test($arr_test, $arr_skrt, $cfg)
{
$bodu = 0; /* dosazeny pocet bodu */
$bodu_m = 0; /* maximalni mozny pocet bodu */
$save0 ='<h2 class="test">Výsledky testu na téma:</h2>'.NL;
$save0.='<h1 class="test">'.$arr_test[0][0].'</h1>'.BR;
for($i=1;$i<=$cfg[z_ot];$i++): /* pres otazky */
{
$save1.='<font class="test_ota">'.$i.'. '.$arr_test[$i][0][0].'</font>'.NL; /* pisu zadani */
$save1.='<table class="test">'.NL;
$spatn=0;
$bodu_p=0;
for($j=1;$j<=$arr_test[$i][0][1];$j++): /* pres odpovedi */
{ //1
$skrt=$arr_skrt[$i][$j]; /*pomocne promenne pro prehlednejsi zapis podminek*/
$t0=$arr_test[$i][$j][0];
$t1=$arr_test[$i][$j][1];
$t2=$arr_test[$i][$j][2];
if ($skrt=="a"): $save1.='<tr><td><img src="a.gif" alt="a" /></td>';
else: $save1.='<tr><td><img src="n.gif" alt="n" /></td>';
endif;
/* vyber typu hodnoceni - (1) standartne */
if ($cfg[v_po]==2) /* typ (2) */
{if ($t1=="a") $bodu_m += $t2;
if (($skrt=="a") && ($t1=="a")){ $bodu += $t2; $save1.='<td class="test_aa"> '.$t0.'</td><td class="test_bod"> +'.$t2.' </td></tr>'.NL; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="a")){ ; $save1.='<td class="test_ga"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL;}
if (($skrt=="a") && ($t1=="n")){ $bodu -= $t2; $save1.='<td class="test_an"> '.$t0.'</td><td class="test_bod"> -'.$t2.' </td></tr>'.NL; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="n")){ ; $save1.='<td class="test_gn"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL;}
}
elseif ($cfg[v_po]==3) /* typ (3) */
{if (($skrt=="a") && ($t1=="a")){ $bodu_p += $t2; $save1.='<td class="test_aa"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="a")){ $bodu_p += $t2; $save1.='<td class="test_na"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL; $spatn=$spatn+1;}
if (($skrt=="a") && ($t1=="n")){ $bodu_p += $t2; $save1.='<td class="test_an"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL; $spatn=$spatn+1; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="n")){ $bodu_p += $t2; $save1.='<td class="test_nn"> '.$t0.'</td><td class="test_bod"> </td></tr>'.NL;}
if ($j==$arr_test[$i][0][1])
{if($spatn==0):$bodu_m+=round($bodu_p/$j); $save1.='<tr><td></td><td></td><td class="test_bod"> '.round($bodu_p/$j).' </td></tr>'.NL; $bodu+=round($bodu_p/$j);
else:$bodu_m+=round($bodu_p/$j); $save1.='<tr><td></td><td></td><td class="test_bod"> 0 </td></tr>'.NL;
endif;}
}
else /* typ (1) */
{
$bodu_m += $t2;
if (($skrt=="a") && ($t1=="a")){ $bodu += $t2; $save1.='<td class="test_aa"> '.$t0.'</td><td class="test_bod"> +'.$t2.' </td></tr>'.NL; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="a")){ $bodu -= $t2; $save1.='<td class="test_na"> '.$t0.'</td><td class="test_bod"> -'.$t2.' </td></tr>'.NL;}
if (($skrt=="a") && ($t1=="n")){ $bodu -= $t2; $save1.='<td class="test_an"> '.$t0.'</td><td class="test_bod"> -'.$t2.' </td></tr>'.NL; $ot_odp = 1;}
if (($skrt=="n") && ($t1=="n")){ $bodu += $t2; $save1.='<td class="test_nn"> '.$t0.'</td><td class="test_bod"> +'.$t2.' </td></tr>'.NL;}
}
}
endfor; /* endfor j */
$save1.='</table>'.BR;
$ot_odp_c += $ot_odp; /* odpovidanych otazek */
$ot_odp =0;
}
endfor; /* endfor i */
$procent=round(($bodu/$bodu_m)*100,0); /* pocitani uspesnosti, zaokrouhleno na cele */
$save2='<b> Bodové hodnocení:</b> Získali jste (<b>'.$bodu.'</b>) bodů ze <b>'.$bodu_m.'</b> možných. Úspěšnost je ('.$procent.')%.';
$save2.=BR.BR;
$save3= "\t".$bodu.' / '.$bodu_m."\t"."\t".$ot_odp_c.' / '.$cfg[z_ot].' / '.$arr_test[0][1];
$save4= $bodu.'/'.$bodu_m;
$save5= $procent.' %';
return array($save0,$save1,$save2,$save3,$save4,$save5);
}
|
předchozí |
obsah DP |
home |
následující |