| 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í |