|
předchozí |
obsah DP |
home |
následující |
2.5.10. Výpis skriptů
Těsně před referenční příručkou funkcí zde uvádím zdrojové kódy 3 skriptů programového systém
1.php
<?php
error_reporting (0); /* nezobrazovat chybova hlaseni a varovani */
session_start(); /* nastartuji session */
include("funkce.php"); /* nactu soubor funkci */
print HTM_ZAH; /* tisk zahlavi html */
unset ($zdroj); unset ($data);
$zdroj = nactifile($adres_cfg);
$_SESSION[s_adres_cfg] = $adres_cfg;
$data = parse2arr($zdroj);
$cfg=prepis_cfg($data); /*prepis do mojepole a kontrola vetsiny atributu*/
/* kontrola existence souboru s testem - jinak se nic nestane */
if (($fp=fopen($cfg[z_ad],"r"))==0){ print'soubor testu ('.$cfg[z_ad].') NEexistuje'.BR.'test nebude spuštěn' ;
}else {
fclose($fp);
if ($cfg[v_uk]=="a")
{ if ($cfg[v_ad][strlen($cfg[v_ad])-1]!='/') $cfg[v_ad].='/'; /* aby bylo na konci lomitko */
if (($fp=fopen($cfg[v_ad].'_prehled.txt',"a+"))==0) print 'adresar pro ulozeni vysledku NEexistuje nebo je spatne nastaven'.BR.'výsledky se neuloží' ;
else fclose($fp);
}
if ($cfg[z_lo]=="a") /* login */
{
print '
<br />Pro tento test je požadováno přihlášení<br />
<form action="2.php" method="post">
Jméno:
<input name="logname" />
<br /><br />
<input type="submit" value="PŘIHLÁSIT" />
<input type="reset" value="SMAZAT" />
</form>';
}else {
print '
<br />
<form action="2.php" method="post">
<input type="submit" value="SPUSTIT TEST" />
<input type="hidden" name="logname" value="anonym" />
</form>';
}
list($cfg[v_po],$_SESSION[s_save_hodnoceni]) = legenda_hodn($cfg[v_po]); /* popis typu hodnoceni */
print $_SESSION[s_save_hodnoceni];
} /* konec podminky existence souboru s testem */
print HTM_VALID.HTM_ZAP; /* tisk zapati html */
$_SESSION[s_cfg] = $cfg;
$_SESSION[refresh2] = 1; /* proti znovunacteni testu */
$_SESSION[refresh3] = 1; /* proti znovuulozeni testu */
?>
Použití funkcí $_SESSION
je výborným nástrojem pro předávání většího množství dat a zvláště polí mezi jednotlivými skripty. Tato metoda používá metody cookies
.
Na začátku celého programu se $_SESSION
nastartuje a server mu přiřadí jedinečné ID - session ID
, identifikátor. Ten je zapamatován v prohlížeči jako cookie. Do ní se ukládají všechny hodnoty, přechází ze skriptu na skript a po ukončení testu je vymazána. Tato metoda je podporována od PHP 4.0. Do $_SESSION
jsem si uložil pomocné proměné refresh2
a refresh3
, zabraňují znovunačtení stránky. To mi vadí při zapnutém náhodném výběru otázek, kdy by znovunačítáním stránky mohlo dojít k cílenému výběru lehčích otázek. Dále to pak vadí při ukládání testu, kdy by docházelo k ukládání stejných dat několikrát za sebou. Pokud se provede znovunačtení stránky, test bude ukončen. Před spuštěním testu se kontroluje většina zadaných parametrů a je ošetřena možnost chybného zadání. Programový systém se tak stává "blbuvzdornějším".
2.php
<?php
error_reporting (0);
include("funkce.php"); /* nactu soubor funkci */
session_start(); /* nastartuji session */
print HTM_ZAH; /* tisk zahlavi html */
if ($_SESSION[refresh2]==1){ /* proti znovunacteni stranky a navratu z prehledu vysledku */
$_SESSION[refresh2]=2;
$cfg = $_SESSION[s_cfg]; /* prevezmu konfiguraci pro jednodussi zapis */
unset ($zdroj); unset ($data);
$zdroj = nactifile($cfg[z_ad]); /* nactu xml soubor testu */
$data = parse2arr($zdroj); /* preparseruju */
$poletest=prepis_test($data); /* prepisu do meho pole */
/*osetreni moznosti spatneho zadani poctu otazek */
if (($poletest[0][1]>=$cfg[z_ot])&&($cfg[z_ot]>=1)): ;
else: $cfg[z_ot]=$poletest[0][1];
endif;
unset ($poletest2);
$poletest2 = michej_test($poletest,$cfg[m_ot],$cfg[m_od],$cfg[z_ot]);
formular($poletest2,$cfg[z_ot],"3.php"); /* vytisknu formular s otazkama */
print $_SESSION[s_save_hodnoceni]; /* popis typu hodnoceni */
unset ($_SESSION[s_pole]);
$_SESSION[s_time1] = date('U');
$_SESSION[s_pole] = $poletest2;
$_SESSION[s_cfg] = $cfg;
$_SESSION[s_logname]= $logname;
} //endif refresh2
else print'Test byl ukončen.';
print HTM_VALID.HTM_ZAP; /* tisk zapati html */
?>
3.php
<?php
session_start(); /* nastartuji session */
include("funkce.php");
if ($_SESSION[refresh3]==1){ /* proti znovunacteni stranky a znovuulozeni vysledku */
list($save0,$save1,$save2,$save3,$save4,$save5) =vyhodnot_test($_SESSION[s_pole],$skrt,$_SESSION[s_cfg]);
/*------------vystup na obrazovku */
print HTM_ZAH.NL.$save0;
if ($_SESSION[s_cfg][v_zo]=='a'):print $save1;else: endif;
print $save2;
print '<b><a href="1.php?adres_cfg='.$_SESSION[s_adres_cfg].'" class="font1">OPAKOVAT TEST</a></b>'.BR.BR;
print $_SESSION[s_save_hodnoceni].HTM_VALID.HTM_ZAP;
/*------------ukladani */
if ($_SESSION[s_cfg][v_uk]=='a'){
$time2 = date('U');
$datum=(date('j.m.y H:i'));
$time = ceil(($time2-$_SESSION[s_time1])/(60));
if ($_SESSION[s_logname]!='anonym'){ /* jen pri prihlaseni jinak nez anonymne */
/* cely test */
unset ($soubor);
$soubor = $_SESSION[s_cfg][v_ad].$_SESSION[s_logname].'.html';
$fp = fopen ($soubor, 'a'); //otevre a zapise na konec souboru retezec
fwrite($fp,HTM_ZAH.NL.$save0.$save1.$save2.$_SESSION[s_save_hodnoceni].HTM_VALID.HTM_ZAP);
fclose($fp);
/* zaklad tabulky */
unset ($soubor);
$soubor = $_SESSION[s_cfg][v_ad].'_table.txt';
$fp = fopen ($soubor, 'a');
fwrite($fp,'<tr align="center"><td><a href="'.$_SESSION[s_logname].'.html" target="new">'.$_SESSION[s_logname].'</a></td><td>'.$save4.'</td><td>'.$save5.'</td><td> </td></tr>'.NL);
fclose($fp);
}
/* prehledovy soubor */
unset ($soubor);
$soubor = $_SESSION[s_cfg][v_ad].'_prehled.txt';
$fp = fopen ($soubor, 'a');
fwrite($fp,$_SESSION[s_logname]."\t".$save3."\t".$save5."\t".$datum.' '.$time.' min'.NL);
fclose($fp);
}
session_destroy(); /* zrusi session i hodnoty */
} //endif refresh3
else { print HTM_ZAH.NL.'Test byl ukončen.'.NL.HTM_VALID.HTM_ZAP;}
?>
vysledky.php
<?php
/*nakopirovat tento soubor do adresare s vysledky
- nacte zaklad tabulky '_table.txt' a umozni tak prohlizet celkove
prehledy jednotlivych prihlaseni*/
error_reporting (0);
print '
<?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>';
print '<b>PŘEHLED VÝSLEDKŮ</b><br /><br />';
print '<table border="1">';
print '<tr align="center"><td>jméno</td><td>bodů/možných</td><td>úspěšnost</td><td>známka </td></tr>';
$jmeno='_table.txt';
$fp = fopen($jmeno,'r');
$data = fread($fp, filesize($jmeno));
fclose($fp);
print $data;
print '</table>';
print '<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>';
print '</body></html>';
?>
|
předchozí |
obsah DP |
home |
následující |