. Educatie Interactiva Utilizand Php Ul
SINTEZA PROIECTULUI DE DIPLOMĂ
Acest proiect constă în realizarea unei aplicați WEB, prin intermediul căreia se dorește emularea unei universități virtuale: înscrierea studenților în cadrul universității virtuale la anumite materii; susținerea de examene în cadrul unei materii; consultarea cursurilor puse la dispoziție de către profesori; comunicarea între profesori – studenți și studenți – studenți; gestionarea internă a datelor înregistrate prin funcții de: adăugare, ștergere,modificare, creare, selectare.
Datorită utilizării de componente multi-media, aplicația “IE” permite realizarea unei comunicări on-line între toți utilizatorii programului. Acest lucru permite realizarea unui proces de învățământ care nu se bazează doar pe acumularea de informații, ci și pe o dinamică mai bună a procesului de învățământ.
Aplicația “IE” a fost realizată cu ajutorul limbajului de programare PHP, beneficiind de facilitățile acestui limbaj, cum ar fi: operații cu fișiere, administrarea bazelor de date, facilitați client-server, management-ul informației Web, programarea CGI (Comon Gateway Interface), avantajele programării OOP (Object Oriented Programming).
S-a optat pentru implementarea aplicației, în primul rând, pentru servere de tip (u)NIX, datorită multiplelor avantaje pe care le permite în comparație cu cele de tip 9x/NT. Printre principalele avantaje enumerăm: stabilitatea extrem de ridicată, existența unei mai bune securități client-server, viteza de execuție foarte ridicată, și nu în ultimul rând faptul că majoritatea sistemelor de operare (u)NIX și majoritatea programelor ce rulează pe aceste servere sunt gratuite.
Cu toate acestea, în momentul realizării aplicției s-a ținut cont și de posibilitatea portării pe servere de tip 9x/NT. Astfel, compatibilitatea între servere de tipul (u)NIX și 9x/NT este asigurată prin folosirea comenzilor MySQL pentru (u)NIX și a comenzilor de tip SQL pentru 9x/NT.
Memoriu tehnic
1. CGI – Common Gateway Interface
1.1. Introducere în CGI
Common Gateway Interface (CGI) permite serverelor de Web executarea altor programe, incorporarea rezultatelor în text, grafică sau sunet și transmiterea lor către un Web browser. Serverul și programele CGI lucrează împreună pentru mărirea performanțelor și capabilităților World Wide Web-ului.
Fără ajutorul CGI-urilor un server de Web nu poate oferi decât un document static și link-uri către alte pagini de pe server. Cu ajutorul CGI-urilor, Web-ul devine interactiv și folositor.
World Wide Web
Browser-ele și server-ele de Web comunică între ele folosind protocolul Hypertext Transfer Protocol (HTTP). Tim Berners-Lee a dezvoltat World Wide Web folosind HTTP-ul și un concept numit Uniform Resource Locator (URL). URL-ul este un mecanism de adresare care permite browser-elor să știe unde să ajungă, cum să ajungă, și ce să facă după ce ajung la destinație.
În momentul în care se vizitează o pagină prin intermediul unui browser se întâmplă șase lucruri:
Browser-ul decodează prima parte din URL, și contactează serverul.
Browser-ul trimite restul din adresa URL către server.
Server-ul traduce URL-ul in cale și nume de fișier.
Server-ul trimite fișierul către browser.
Serverul întrerupe legătura.
Browser afișează documentul.
Mai presus de HTML cu ajutorul CGI-urilor
Browser-ul de Web nu știe cât de mult dintr-un document să ceară de la server. El doar trimite cererea, și afișează ceea ce primește de la server. Serverul comunică cu browser-ul prin anumite coduri, folosind specificațiile Multipurpose Internet Mail Extensions (MIME).
Serverul pe lângă faptul că, trimite documentul către browser, știe și să execute un program. Când URL-ul adresează un program, serverul știe să execute acel program și să returneze browser-ului rezultatul executării lui ca și cum ar fi fost un fișier.
S-ar putea pune întrebarea: Și ce s-a realizat prin asta? În primul rând, un program CGI poate să citească și să scrie fișiere (un server Web știe numai să citească) și să returneze rezultate diferite de fiecare dată când este apelat.
1.2. Realizarea de aplicații CGI
Aplicațiile CGI pot fi scrise în multe limbaje de programare. Alegerea limbajului de programare utilizat se bazează pe ceea ce se dorește de la CGI-ul respectiv. Principalele limbaje de programare utilizate pentru dezvoltarea de CGI-uri sunt:
PHP Tcl
C Python
C++ Shell scripts (UNIX)
Perl Visual Basic
Applescript
Structura unui CGI
Atunci când un script este apelat de server, acesta trimite informații către script prin intermediul unor variabile. GET și POST sunt cele mai comune metode de cerere. Metodele de cerere transmit scriptului tipul de apel; bazându-se pe aceste informații, scriptul poate să decidă metoda de raspuns.
GET este o cerere de date. Metoda GET trimite informațiile ca parametrii incluși la sfârșitul URL-ului. Acești parametrii sunt transmiși CGI-ului în variabila QUERYSTRING.
POST este o operație care survine în momentul în care browser-ul trimite date dintr-un formular. Datele sunt transmise folosind STDIN. Deoarece STDIN este compus dintr-un șir de caractere, iar scriptul trebuie să știe care sunt datele valide, serverul mai pune la dispoziție o variabilă, CONTENTLENGTH, care indică mărimea în bytes a datelor.
Structura de bază a unui CGI este simplă și implicită: inițializarea, procesarea, afișarea și terminarea.
Inițializarea – primul lucru pe care un script trebuie sa-l facă este să determine intrarile, mediul în care lucrează și stadiul în care se află.
Procesarea – După ce a primit informațiile, scriptul trebuie să ia anumite decizi. În funcție de parametrii pe care i-a primit acesta va returna un rezultat.
Terminarea – este partea în care se dezalocă resursele folosite de script în timpul procesării și executarii. Această parte are o importanță mare în special pentru scripturile care rulează pe servere 9x/NT.
Relația server/script (scenariul CGI)
Când programul server apelează scenariul CGI, server-ul trebuie să execute o serie de operații cheie: apelarea scenariului și furnizarea către acesta a datelor trimise de browser, furnizarea valorilor pentru variabilele de mediu utilizate de scenariu, prelucrarea datelor de de ieșire ale scenariului prin includerea informațieii de antet necesare browserului pentru a interpreta cu succes datel primite de la scenariu.
Protocolul HTTP este protocolul prin care comunică server-ele și clienții Web. Informația de antet HTTP permite programelor să comunice eficient; în consecință, informațiile de antet furnizate browser-ului de către server trebuie privite cu mare atenție. De exemplu, când programul server este pregătit să transmită date către un browser, trimite un set de antete care descriu starea datelor, tipul acestora (conținutul fișierului) etc. Browser-ul utilizează antetul Content-type pentru a pregăti afișarea datelor care urmează. Server-ul trebuie să furnizeze aceste metainformații de fiecare dată când trimite date către browser.
Antetele CGI
După cum am amintit mai sus ieșirea unui scenariu CGI incepe cu un antet. Acest antet constă din rânduri de text având același format cu un antet HTTP, terminat cu un rând alb care conține numai un CRLF. Dacă un scenariu CGI produce la ieșire antete care nu sunt directive server, server-ul livrează aceste antete direct către browser-ul care a inițiat cererea. În mod curent, specificația CGI definește trei directive server:
Content-type (Tip continut)
Location (Locatie)
Status (Stare)
Câmpul Content-type dintr-un antet CGI identifică tipul/subtipul MIME al datelor pe care scenariul le transmite înapoi browser-ului. În mod normal, scenariile CGI vor produce un document HTML. În acest caz, câmpul Content-type din antetul CGI va contine:
Content-type: text/html
Câmpul Location într-un antet CGI specifică un document. Scenariile utilizează câmpul Location pentru a specifica serverului care a apelat un scenariu CGI faptul că returnează o referință la un document în locul documentului în sine. Dacă valoarea câmpului Location este o adresă URL la distanță (documentul nu se află pe server), server-ul va găsi documentul specificat ca și cum browser-ul ar fi solicitat inițial acel document. Pentru a specifica un document la distanță, spre exemplu, valoarea câmpului Location din antetul CGI poate conține:
Location: http://www.dark.com/
Câmpul Status din antetul CGI conține o valoare de stare HTTP pe care serverul o transmite de la scenariu către browser.
2. Componente soft utilizate pentru realizarea aplicației
2.1. Limbajul PHP
2.1.1. Introducere în PHP
PHP (oficial "Personal Home Page: Hypertext Preprocessor") este un un limbaj de programare inclus practic in HTML. Pentru a înțelege această afirmație trebuie urmărit următorul exemplu:
<html>
<head>
<title>Exemplu</title>
</head>
<body>
<?php echo "Salut; sunt un script PHP!"; ?>
</body>
</html>
Se poate observa diferența față de un script CGI scris în Perl sau C – în loc să se scrie un program cu o mulțime de comenzi pentru codul HML, se poate scrie un script HTML cu un cod inclus pentru a realiza anumite lucruri (în cazul de față tipărirea unui text).
Ceea ce distinge PHP-ul față de Javascript este faptul că, codul este executat pe server. Clientul primește doar rezultatul executării scriptului, nepermițând în nici un fel determinarea codului.
Ceea mai mare parte a sintaxei este împrumutată din C, Java și Perl, cu câteva proprietăți unice PHP-ului. Scopul acestui limbaj este de a permite programatorilior WEB dezvoltarea rapidă și dinamică a programelor.
PHP-ul a fost dezvoltat la sfârșitul anului 1994 de către Rasmus Lerdorf, și a fost utilizată în scopuri personale. Prima versiune care a fost folosita și de alți programatori a apărut la începutul anului 1995, fiind cunoscuta ca Personal Home Page Tools. Această versiune permitea înțelegerea câtorva funcții și macro-uri folosite în mod regulat pentru realizarea de guestbook-uri si de contoare. Acesta a fost momentul în care programatorii din toata lumea au început să-și aducă contribuția la dezvoltarea limbajului. La sfârșitul anului 1997, PHP/FI era folosit în peste 50.000 de sit-uri Web din întreaga lume. În 1997, Zeev Suraski și Andi Gutmans au rescris de la zero serverul de PHP/FI, iar noua versiune lansată pe piață a devenit cunoscută sub denumirea de PHP3. La mijlocul anului 1999, numărul de servere pe care rula PHP-ul ajunsese la 1.000.000.
Dezvoltat inițial pentru sistemul de operare (u)NIX, serverul de PHP a fost portat cu succes și pe servere 9x/NT.
Poate ceea mai puternică și mai importantă componentă a PHP-ului este suportul cu bazele de date. Scrierea unei baze de date pentru Web este extrem de simplă. Bazele de date cu care PHP-ul știe să lucreze sunt:
2.1.2. Securitatea în PHP
PHP este un puternic limbaj de programare, capabil să acceseze fișiere, să execute comenzi, să deschidă conexiuni de rețea. Aceste proprietăți fac ca tot ce rulează pe server să fie expus la un grad mare de insecuritate.
PHP-ul a fost creat special pentru a fi mai sigur decât CGI-urile scrise în Perl sau C, iar în cazul în care a fost configurat corect asigură combinația perfectă de libertate și securitate. Din cauza diferitelor moduri de utilizare a PHP-ului, există multe posibilități de configurare și control. Marea diversitate de opțiuni, garantează utilizarea PHP-ului pentru o mulțime de scopuri, dar permite de asemenea o configurare greșită care poate duce la o instalare cu urmări grave în securitatea server-ului.
Cele două moduri de instalare a PHP-ului conduc la două abordări diferite în ceea ce privește securitatea.
2.1.3. Caracteristici ale limbajului
Principalele caracteristici ale limbajului sunt:
Puterea limbajului – PHP oferă o gama largă de module, permițând utilizarea codului PHP pentru dezvoltarea de aplicații Windows ASP și Shockwave Flash; ceea mai puternică caracteristică a programului este ică caracteristică a programului este însă, numărul mare de baze de date cu care poate lucra și ușurința folosirii acestora;
Viteza de dezvoltare a programelor – în PHP programele se pot scrie folosind orice editor de texte; programul nu necesită să fie compilat, putând fi incorporat direct în paginile HTML;
Portabilitatea – programele scrise in PHP pot fi executate fără nici o modificare atât in sistemele de operare (u)NIX, cât și în orice versiune de servere 9x/NT;
Prețul – ca majoritatea limbajelor și programelor dezvoltate pentru (u)NIX, și PHP este distribuit gratuit, utilizatorul trebuind să respecte doar specificațiile GNU (Anexa A).
Există câteva modalități pentru a începe și a termina un program în PHP:
<? echo “prima metodă”; ?>
<? php echo “a doua metodă; pentru documente XML”; ?>
<% echo “a treia metodă; folosind taguri ASP”; %>
PHP-ul permite inserarea de comentarii oriunde în program. Practic modalitatea de introducere a comentariilor este identică cu ceea din C, C++ și shell-ul (u)NIX.
Astfel, există trei modalități de introducere a unui comentariu:
// Prima modalitate de introducere a unui comentariu
# A doua modalitate de introducere a unui comentariu
/*A treia modalitate de introducere a unui comentariu */
2.1.4. Câteva referiri la limbajul PHP
2.1.4.1. Variabile în PHP
Variabilele în PHP sunt reprezentate de semnul dolar ($) urmat de numele variabilei. Numele variabilelor sunt case-sensitive.
$var = "Bob";
$Var = "Joe";
$täyte = "mansikka"; // valid; "ä" este caracterul ASCII 228.
PHP-ul pune la dispoziția utilizatorului un număr mare de variabile predefinite. Multe din aceste variabile, din pacate, nu pot fi complet documentate deoarece depind de server-ul pe care rulează, versiunea server-ului și modul în care a fost instalat.
Iată câteva variabile predefinite:
SERVER_NAME – conține numele host-ului pe care serverul rulează;
SCRIPT_NAME – conține calea scriptului care rulează;
SERVER_PROTOCOL – conține numele și revizia protocolului prin care pagina a fost accesată (ex. ‘HTTP/1.0’);
Un alt tip de variabile importante în PHP, sunt variabilele cu nume variabil. Acestea sunt variabile al căror nume poate fi setat dinamic.
$a = "hello";
$$a = "world";
echo "$hello"; // se returnează world
Variabila $a primește șirul de caractere ”hello”, în timp ce a doua instrucțiune atribuie variabilei $hello șirul de caractere ”world”.
2.1.4.2. Tipuri de date
PHP suportă următoarele tipuri de date:
întregi – cu o valoare maximă uzuală de 2 milioane (32 biți);
ex: $a = 1234;
flotante – cu o valoare maximă uzuală de 1.8e308 și o precizie de 14 zecimale; ex: $a = 1.2e3;
string – un string este delimitat de semnul (“), si poate să conțină orice caracter din codul ASCII; ex: $a=”acesta este un string”;
array – poate fi definit atât element cu element, cât și cu ajutorul funcției array( );
ex: //array definit pe elemente
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
//array definit cu ajutorul funcției
$a = array(
"color" => "red",
"taste" => "sweet",
"shape" => "round",
);
2.1.4.3. Structuri de control
Construcția if este una dintre cele mai importante componente a oricărui limbaj. Permite executarea condiționată a unui fragment de cod.
if (expr)
cod 1 …
else
cod 2 …
Ceea mai simplă expresie repetitivă din PHP este while. Aceasta execută un cod atita timp cât expresia evaluată este adevărată (TRUE).
while (expr):
cod …
endwhile;
Expresia for, este ceea mai complexă expresie repetitivă din PHP.
for (expr1; expr2; expr3)
cod …
Prima expresie (expr1 – expresie de intrare), este evaluată (executată) necondiționat la începutul buclei.
La începutul fiecărei iterații, (expr2 – expresie condițională) este evaluată. Dacă evaluarea returnează TRUE, bucla continuă iar codul este executat. Dacă se returnează FALSE, executarea buclei se oprește.
La sfârșitul fiecărei execuții a buclei, (expr3 – expresie de reinițializare) este evaluată (executată).
2.1.4.4. Funcții
O funcție poate fi definită în PHP cu următoarea sintaxă:
function foo ($arg_1, $arg_2, …, $arg_n)
{
echo "Functie exemplu.\n";
return $retval;
}
Informația este trecută funcției prin intermediul argumentelor.
2.1.4.5. Cookies-uri
PHP suportă cookies-urile. Cookies-ul este un mecanism pentru depozitarea datelor în browser. Transmiterea de cookies-uri se poate face cu ajutorul funcției setcookie(). Cookies-urile sunt parte integrantă a header-ului HTTP, și deci, setcookie() trebuie apelată inainte de transmiterea altor ieșiri catre browser.
Orice cookies trimis către client, va fi transformat intr-o variabilă PHP.
2.1.4.6. Uploads folosind PHP-ul
PHP este capabil sa recepționeze fișiere de la orice browser care respectă standardul RFC-1867 (Netscape Navigator 3, Microsoft Internet Explorer 3 cu service pack-ul 3). Aceasta dă posibilitatea de a uploda atât fișiere text cât și fișiere binare.
PHP permite utilizarea funcțiilor de autentificare și manipulare a fișierelor, având astfel un control deplin asupra permisiunilor de upload pe server.
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
_URL_ trebuie să fie un fișier PHP. Câmpul hidden (ascuns) MAX_FILE_SIZE trebuie să preceadă câmpul de introducere a fișierului ce se dorește a fi transmis, iar valoarea reprezintă mărimea maximă acceptată în bytes a fișierului.
2.1.5. Funcții MySQL
Aceste funcții permit accesul la serverul MySQL din cadrul aplicațiilor PHP. Pentru ca acestea să fie funcționale, PHP-ul trebuie compilat cu suport mysql, folosind opțiunea:
–with-mysql.
În continuare vor fi prezentate principalele funcții MySQL:
2.1.5.1. MySQL close
int mysql_close ([int identificator])
mysql_close( ) închide legătura cu serverul de MySQL asociată identificatorului. În cazul în care acesta nu este specificat, ultima legatiră deschisă va fi închisă.
2.1.5.2. MySQL connect
int mysql_connect ([string hostname [:port] [, string username [, string parola]]])
mysql_connect( ) realizează o conexiune cu serverul MySQL. Toate argumentele sunt opționale.
Legătura cu serverul va fi închisă imediat ce execuția scriptului a luat sfârșit.
2.1.5.3. MySQL create db
int mysql_create_db (string nume_tabel [, int identificator])
mysql_create_db( ) crează un tabel în baza de date asociat identificator-ului specificat.
Exemplu:
<?
$link = mysql_connect ("dark", "dinu", "parola")
or die ("Could not connect");
if (mysql_create_db ("my_db")) {
print ("Database created successfully\n");
} else {
printf ("Error creating database: %s\n", mysql_error ());
}
?>
2.1.5.4. MySQL db query
int mysql_db_query (string baza_date, string query [, int identificator ])
mysql_db_query( ) selectează o bază de date și execută o interogare.
2.1.5.5. MySQL drop db
int mysql_drop_db (string baza_date [, int identificator])
mysql_drop_db( ) șterge un tabel de pe server, asociat cu indentificator-ul specificat.
2.1.5.6. MySQL fetch array
array mysql_fetch_array (int rezultat [, int tipul_rezultatului])
mysql_fetch_array( ) este o extensie a comenzii mysql_fetch_row( ). Pe lângă faptul că stochează datele în câmpuri numerice asociative, stochează datele în indici asociativi, folosind numele câmpurilor ca și chei.
Exemplu:
<?
mysql_connect ($host, $user, $password);
$result = mysql_db_query ("database","select * from table");
while ($row = mysql_fetch_array ($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
?>
2.1.5.7. MySQL fetch row
array mysql_fetch_row (int rezultat)
mysql_fetch_row( ) stochează un rând de date din rezultat asociat cu identificatorul specificat. Rândul este returnat ca un array. Fiecare coloană este stochată în offset-ul array-ului, începând de la valoarea 0.
Apelarea consecutivă a instrucțiunii mysql_fetch_row( ) returnează următorul rând, sau FALSE în cazul în care nu mai sunt rânduri.
2.1.5.8. MySQL num row
int mysql_num_rows (int rezultat)
mysql_num_rows( ) returnează numărul de rânduri.
2.1.5.9. MySQL select db
int mysql_select_db (string tabel [, int identificator])
mysql_select_db( ) setează tabelul tabel ca fiind cel activ de pe serverul asociat cu identificator.
2.1.5.10. MySQL result
int mysql_result (int rezultat, int rind)
mysql_result( ) returnează conținutul unei celule din rezultat. Această funcție este mai lentă în cazul în care rezultatul conține un număr mare de date. În acest caz este recomandată folosirea funcției mysql_fetch_row ( ).
2.1.6. Debugger-ul PHP
Debugger-ul intern PHP este util pentru depistarea erorilor, mai ales a celor evazive. Debuggerul utilizează un port TCP pentru transmiterea erorilor. Acest lucru permite utilizarea debugger-ului chiar și dintr-un program de editare de texte (opțiunea este valabilă doar pentru sistemele (u)NIX).
2.2. Limbajul MySQL
2.2.1. Introducere în MySQL
MySQL a fost creeat de Michael Widenius. Este o bază de date relațională (SGBD) mică și cu o viteză de execuție mare.
Utilizarea MySQL este restricționată doar de specificațiile GNU (Anexa A).
Principalele componente pe care le oferă MySQL-ul sunt:
suport pentru queri-uri multiple și simultane
câmpuri cu valoare fixă și variabilă
driver pentru ODBC (inclusiv sursa)
un sistem de protecție eficient
suport pentru chei unice, chei primare în sintaxa CREATE
un sistem malloc rapid
salvarea datelor în formatul ISO8859_1
posibilitatea de folosire a alias-urilor
capabilitatea de redefinire a tabelelor
2.2.2. MySQL – SQL
Baza de date MySQL oferă un set de instrucțiuni din specificația SQL92.
2.2.2.1. Crearea de noi tabele
CREATE TABLE nume_tabel ( creare_definiti,…)
creare_definiti:
nume_coloana type NOT NULL [DEFAULT valoare_default] [PRIMARY KEY]
sau nume_coloana INDEX [nume_cheie]
sau nume_coloana UNIQUE (nume_coloana[lungime], ….
REFERENCES nume_tabel
[ ON DELETE (RESTRICT | CASCADE | SET NULL) ]
Această instrucțiune este specifică SQL-ului și a fost introdusă datorită vitezei mare de execuție.
2.2.2.2. Ștergerea înregistrarilor din tabel
DELETE FROM nume_tabel WHERE definitie_where
Șterge înregistrări dintr-un tabel. Instrucțiunea returnează numărul de înregistrari afectate. În cazul în care se folosește DELETE fără clauza WHERE, tabelul este golit și apoi regenerat.
2.2.2.3. Ștergerea unui tabel
DROP TABLE nume_tabel [nume_tabel ….]
Șterge un tabel.
ATENȚIE! Comanda DROP TABLE șterge definitiv tabelul din sistem.
2.2.2.4. Instrucțiunea SELECT
SELECT [DISTINCT | ALL] expresia_select, … [FROM tabel … [WHERE definitie_where] [GROUP BY coloana, …] [ORDER BY coloana [ASC | DESC, …] ] [INTO OUTFILE ‘nume_fisier’ …]
Instrucțiunea SELECT este folosită pentru executarea interogărilor asupra tabelelor. Este inima limbajului SQL.
expresie_select poate să conțină următoarele funcții/operatori logici:
2.2.3. Administrarea serverului MySQL
Programul care este inima sistemului MySQL se numește mysqld. Programul mysqld rulează ca un daemon în sistem, acceptând conexiunile de la programele client, executând interogări și returnând rezultate. Conține un sistem multi-threading, ceea ce înseamnă că poate accepta și executa mai multe interogări in același timp.
Baza de date MySQL folosește un sistem special de tabele pentru a asigura accesul privilegiat la baza de date. Fiecare user folosește o parolă criptată.
În momentul în care se cere o conexiune la server, are loc următorul dialog între client și server:
în momentul conexiuni serverul atribuie un număr aleator clientului
clientul calculează un nou număr aleator din numărul primit de la server și din parola criptată pe care o primește de la user; numărul rezultat este trimis către server
serverul calculează un număr din parola salvată în tabel-ul său și din numărul aleator primit de la client; dacă numărul este identic cu numărul clientului, conexiunea este acceptată.
2.3. Open SSL
2.3.1. Introducere în SSL
Netscape Communications Corporation pune la dispoziția utilizatorilor un sistem de criptare RSA numit Secure Sockets Layer. SSL-ul dispune de un mecanism în care clientul poate să realizeze un contact cu server-ul și să transmită informații sigure.
SSL-ul utilizează un protocol “handshake” special care permite server-ului și clientului să se autentifice, dezvoltă un algoritm de criptare impreună cu cheile de criptare aferente. Acest algoritm realizează trei lucruri:
se asigură că, clientul și serverul se conectează in modul în care au fost programate să se conecteze;
realizează o criptare pentru a menține secret informațiile transmise între client și server;
se asigură de integritatea datelor. Cu alte cuvinte, clientul primește ceea ce serverul a returnat, și vice versa, asigurându-se ca datele nu au fost alterate în timpul tranzitului.
2.3.2. Introducere în Open SSL
Acest modul pune la dispoziția utilizatorului o metodă puternică de criptare pentru serverele Apache prin intermediul SSL-ului și a TLS-ului (Transport Layer Security). Implementarea acestui modul a fost realizată de Eric A. Young și Tim Hudson.
2.3.2.1. Licența de utilizare
Folosirea acestui modul în cadrul server-ului este resticționată de anumite legi, în funcție de țara în care este utilizat (vezi Anexa B).
2.3.2.2. Tehnici de criptare
Înțelegerea SSL-ului necesită o înțelegere a algoritmilor de criptare și a semnăturilor digitale.
Algoritmi de criptare – există două categorii de algoritmi de criptare: convenționali și chei publice.
Criptarea convențională, cunoscută și ca, criptare simetrică, cere ca emițătorul și receptorul să împartă o cheie secretă. Această metodă prezintă dezavantajul că, cheia trebuie cunoscută atât de receptor cât și de emițător înainte de începerea comunicării.
Criptarea cu cheie publică, cunoscută și ca, criptare asimetrică, rezolvă problema schimbului de chei, prin definirea unui algoritm care folosește două chei. Una din chei este folosită la criptare, ceea de-a doua la decriptare. Astfel oricine poate să cripteze mesajul cu ajutorul cheii publice, dar numai deținătorul chei private îl va putea citi.
Semnaturi digitale – are ca scop unicizarea mesajului transmis. Semnaturile
digitale conțin o secvență de număr unic, asociat cheii private. În acest fel se elimină fraudele ce pot apărea în momentul unei tranzacții.
2.3.2.3. Protocolul SSL
Secure Sockets Layer este un protocol care se situează între protocolul orientat pe rețea (ex. TCP/IP) și protocolul aplicație (ex. HTTP). SSL-ul asigură o comunicare sigură între client și server, utilizând semnatura digitală pentru integritate și criptarea pentru siguranță.
SSL-ul realizează o sesiune SSL, urmată de o secvență handshake între client și server, așa cum apare în Figura 2.3.2.3–1
Figura 2.3.2.3–1 Secvența SSL Handshake
2.3.2.4. Securizarea comunicațiilor HTTP
O utilizare frecventă a SSL-ului, este pentru securizarea comunicației HTTP între un browser și un server. Acest lucru se realizează prin utilizarea protocolului aplicație HTTP împreună cu SSL, rezultând așa numitul HTTPS. Noul protocol aplicație rezultat utilizează o cale de transmitere diferită de HTTP, prin utilizarea unui alt port de comunicare (de obicei portul 443).
2.3.2.5. Configurarea SSL pentru un server (u)NIX
Configurarea protocolului SSL poate fi făcută în mai multe moduri: în funcție de tipul de protecție dorit și de vulnerabilitatea informațiilor vehiculate. Realizarea unei configurări corecte depinde de înțelegerea modului de funcționare a protocolului și de cunoștințele (u)NIX. Deoarece proiectul de față nu are ca scop configurarea unui server, exemplul următor este doar informativ.
httpl.conf
<Directory /www/html>
# In afara subariei doar accesul Intranet este permis
Order deny,allow
Deny all
Allow 194.102.78.0/24
</Directory>
<Directory /www/html/ie>
# In cadrul subariei orice acces Intranet este permis
# dar din Internet doar HTTPS + Strong-Cipher + Password
# sau alternativa HTTPS + Strong-Cipher + Client-Certificate
SSLVerifyClient optional
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/company-ca.crt
SSLOptions +FakeBasicAuth +StrictRequire
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
# Forteaza clienti Internet sa utilizaze HTTPS
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^194\.102\.78\.[77-84]+$
RewriteCond %{HTTPS} !=on
RewriteRule .* – [F]
# Network Access Control
Order deny,allow
Deny all
Allow 194.102.78.0/24
# HTTP Basic Authentication
AuthType basic
AuthName "Protected Intranet Area"
AuthUserFile conf/protected.passwd
Require valid-user
</Directory>
Exemplul de configurare prezentat mai sus, permite utilizatorilor Intranet să acceseze orice director din www/html (rădăcina serverului Web) prin protocolul HTTP, dar utilizatorilor Internet le este permis accesul doar la directorul www/html/ie (locul unde se află aplicația “IE”) prin protocolul HTTPS.
3. Breviar de calcul
3.1. Blocurile componente ale aplicației
3.1.1. Baza de date – tabele
Proiectul “IE” conține un număr de tabele organizate într-o bază de date numită “ie”, rezidentă pe server-ul unde rulează aplicația. Pentru definirea tabelelor din baza de date, s-a utilizat mediul de programare PHP, compilat cu suport MySQL. Pentru a fi posibilă o astfel de compilare, este necesar ca în prealabil să fie instalat pe server aplicația MySQL, fără de care această compilare nu poate fi realizată.
Aplicația “IE” conține două tipuri de tabele:
tabele predefinite – sunt creeate în momentul instalării programului “IE”
tabele generate de program – sunt tabelele generate în momentul creerii de cursuri, examene, și conțin informații cu privire la acestea.
Pentru servere de tipul (u)NIX, instalarea aplicației poate fi făcută doar de persoane cu drept de root pe server-ul pe care se dorește acest lucru. Aceasta datorită faptului că, programul trebuie să creeze baza de date, împreună cu tabelele aferente într-un director care de obicei este protejat la scriere pentru user-ii normali ai server-ului.
Creearea tabelelor se face cu ajutorul comenzilor MySQL (SQL) incluse în limbajul de programare PHP.
Ex:
$conn=mysql_connect("localhost","root"); // conectare la server MySQL
$database=mysql_select_db("ie"); // conectare baza de date
$qstr="CREATE TABLE profesors (ID int(8) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(ID), username char(10), password char(15), first_name char(25), last_name char(25), email char(20), specialty char(30), address text)";
$qry=mysql_query($qstr); // transmitere interogare
3.1.2. Scripturile
Aplicația “IE” este structurată pe mai multe nivele de configurare, ceea ce permite o ușurință în administrare și exploatare, sau într-o eventuală depanare a softului. În primul rând se disting două mari nivele:
programul de învățământ – aici intră tot ceea ce ține de cursuri, adăugarea de mesaje off-line, administrare, etc;
chat-ul on-line – permite comunicarea în timp real între studenți-studenți, studenți-profesori.
Cu toate că cele două nivele amintite mai sus, privite din exterior funcționează ca un tot unitar, din punct de vedere al programării ele trebuie privite individual.
Programul este în totalitate configurabil din “exterior”, adică nu necesită cunoștințe de programare în PHP sau MySQL. Configurarea programului se realizează cu ajutorul script-ului setup.phtml.
Pe parcursul dezvoltării aplicației sau urmărit cinci componente principale:
realizarea conexiunii cu baza de date;
creearea diverselor componente (script-uri) necesare bunei funcționări a programului de învățământ;
creearea diverselor componente (script-uri) necesare bunei funcționări a chat-ului;
asigurarea unei securități ridicate.
implementarea unui sistem multi-language.
3.1.2.1. Realizarea conexiunii cu baza de date și tabelele aferente
Utilizarea mediului de programare PHP în realizarea proiectului , simplifică mult accesul și management-ul bazelor de date.
Pentru a putea realiza o legatură între program și baza de date, sunt necesari doi pași. În primul rând se realizează conexiunea la server-ul MySQL, prin intermediul comenzii mysql_connect, după care se poate stabili legătura cu baza de date, utilizând comanda mysql_select_db.
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
În acest moment legătura între aplicație și baza de date este realizată, se creează două obiecte, $conn – care conține conexiunea către server-ul MySQL și $database – care conține conexiunea cu baza de date.
Din acest moment se poate trece la “interogarea” diferitelor tabele. Realizarea unei astfel de “interogări” se realizează utilizând funcția mysql_query.
$qstr="select * from profesors";
$qry=mysql_query($qstr);
Funcția mysql_query, transmite bazei de date interogarea select.
while ($row = mysql_fetch_array ($qry))
{
…..
}
În interiorul buclei se preiau datele, corespunzătoare interogării, în tablouri, după care se pot executa diferite operații asupra acestora.
Pașii prezentați mai sus, sunt valabili în realizarea tuturor “interogărilor” realizate aszpra tabelelor din aplicația “IE”.
Deoarece realizarea conexiunilor și a interogărilor din cadrul aplicației sunt în general asemănătoare, se va prezenta în continuare metoda folosită pentru log-area user-ilor. Metoda de transmitere a parametrilor, dintr-o pagină html către script, utilizează variabilele de tip POST. Aceste variabile conțin date introduse de utilizator în câmpurile din pagina html.
În cazul script-ului de log-are (login.phtml), se transmit doi parametrii username (nume utilizator) și password (parola). Imediat după realizarea transmiterii, scriptul realizează conexiunea cu baza de date.
$conn=mysql_connect("$host","$user","$pass"); // conectare la server mysql
$database=mysql_select_db("ie"); // conectare la baza de date ie
În funcție de tipul de log-are executat (student, profesor sau administrator), se intră după caz în una din cele 3 bucle existente. Presupunând că log-area s-a facut de un student, programul va apela bucla specifică.
if ($log=='stud') //se intra pe bucla de studenti
{
$qstr="select * from inscrisi where username='$username' and password='$password'";
$qry=mysql_query($qstr);
}
Astfel, se realizează interogarea tabelului care conține toți studenți înscriși în cadrul programului “IE. Dacă username-ul a fost gasit în tabel se va returna o singură înregistrare conținând username-ul și parola cu care a fost înregistrat, în caz contrar programul va semnala o eroare prin intermediul funcției:
ie_error('no_usser'); // User name neînregistrat
Presupunând că user-ul există se trece la extragerea parolei, din tabelul de studenți înscriși, cu care acesta a fost înregistrat și compararea ei cu ceea introdusă în momentul log-ării.
$row=mysql_fetch_array($qry);
$passw=$row[password]; // variabila $passw primește parola corectă
if ($passw==$password) // se realizează comparația între parole
{
……
}
else
{
ie_error('err_pass');
}
Dacă și parola a fost introdusă corect, are loc încărcarea paginii specifice studenților. În caz contrar se apelează funcția ie_error('err_pass'); care semnalează că parola nu este validă.
Organigrama scriptului de log-are este prezentată în cele ce urmează:
Figura 3.1.2.1–1 Organigrama scriptului de log-are
3.1.2.2. Realizarea diverselor scripturi – învățământul la distanță
În continuare se va prezenta modul de realizare a celor mai importante scripturi, componente ale aplicației “IE” care se încadrează în categoria învățământ la distanță.
A. Înscriere studenți
Creearea unui cont de student presupune completarea anumitor informații privitoare la persoana care dorește acest lucru. Informațiile completate (într-un fișier tip html, inclus în codul phtml) sunt preluate prin intermediul variabilelor POST, verificate și apoi înregistrate într-un tabel, operații realizate prin intermediul scriptului inscriere.phtml.
La creearea de noi conturi s-au urmărit trei lucruri:
denumirile utilizatorilor să fie unice;
câmpurile “User name” (“Nume utilizator”) și “Password” (“Parola”) să fie completate;
dubla introducere a parolei, pentru evitarea greșeli involuntare în scrierea ei.
….
if ($password==$re_password && $user_name !='')
{
….
if ($rows==0) //se verifica daca mai exista un user name identic
{
//daca nu exista, datele sunt valide si sunt scrise in tabel
if ($user_name !=''&$password !=''&$first_name !=''&$last_name !='')
{
$qst="insert into inscrisi (username, password, first_name, last_name,
email, address, zi, luna, an) values('$user_name', '$password',
'$first_name', '$last_name', '$email', '$address', '$zi',
'$luna', '$an')";
$qry=mysql_query($qst);
….
B. Creearea de examene
Este componenta principală, pusă la dispoziția profesorului, prin care acesta, poate realiza un test grilă pentru verificarea cunoștințelor studenților. Creearea unui astfel de test grilă, necesită doi pași importanți:
setarea unor variabile pentru testul respectiv
introducerea întrebărilor și a răspunsurilor
Setarea variabilelor se face cu ajutorul script-ului setup_exam.phtml, iar
introducerea întrebărilor și răspunsurilor este realizată de scriptul create_exam.phtml.
Scriptul setup_exam.phtml, nu permite unui profesor să creeze examene cu nume identice.
….
$qst="insert into exam_setup (username, class, exam, question_no,
alternative_answer, time) values ('$nam','$select_class',
'$exam_name', '$question_no', '$alternative_answer', '$time')";
$qry=mysql_query($qst);
….
Toate variabilele ce țin de un examen sunt salvate în tabelul “exam_setup”.
Scriptul create_exam.phtml generează pagina html, pe baza variabilelor setate de profesor în pasul anterior, în care se introduc întrebările împreună cu raspunsurile aferente.
Generarea pagini html se realizează prin apelul funcției ie_afis(). Funcția este descrisă în librăria ie.lib.
….
echo "<form method=\"POST\"action=\"create_exam.phtml?put=ok&sub=next&nr_crt =$nr_crt\">";
echo "<div align=\"center\"><center>";
$nr=$nr_crt-1;
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"80%\">
<tr>
<td width=\"20%\"><font size=\"3\"><b>Question no $nr</b></font> </td>
<td width=\"80%\"><textarea rows=\"3\" name=\"question\" cols=\"55\">
</textarea></td>
</tr>
</table>
<br>";
….
for ($i=1; $i<=$altern; $i++)
{
echo "<tr>
<td width=\"20%\"><font size=\"3\"><b>Answer no $i </b></font></td>
<td width=\"30%\"><input type=\"text\" name=\"answer_$i\" size=
\"61\"></td>
<td width=\"25%\" align=\"center\"><b><font size=\"3\">
correct</font></b></td>
<td width=\"25%\"><select size=\"1\" name=\"correct_$i\">
<option value=\"Yes\">Yes
<option value=\"No\">No
</select></td>
</tr>";
}
Funcția primește doi parametrii:
numărul de răspunsuri alternative la o întrebare
numărul întrebării curente
Pentru fiecare examen creeat, se generează un tabel de forma:
username_denumirecurs_denumireexamen
Organigrama creerii unui nou examen este descrisă în cele ce urmează:
Figura 3.1.2.2–1 Organigrama creerii de noi examene
C. Susținerea examenului de către student
Prin această componentă a programului “IE”, un student poate susține unul sau mai multe examene, puse la dispoziție de către profesori.
Timpul alocat unei întrebări a fost setat de către profesor în momentul creerii testului, el fiind același pentru toate întrebările conținute de test. În cadrul scriptului, timpul este setat, în funcție de cel ales de profesor în momentul creerii testului, cu ajutorul unei funcții javascript:
….
function go()
{
open("view_exam.phtml?kk=auto&nr_crt=$nr_crt&inreg=$inreg","index_center");
}
….
<BODY onLoad="timeout =setTimeout('go()',<?echo"$tim";?>);">
….
if ($kk=='auto')
{
if ($nr_crt<=$quest_no)
{
for ($i=1; $i<=$altern; $i++)
{
$temp="$nam"."_"."temp";
$alter="alter table $temp add cor_$i char(3)";
$qry=mysql_query($alter);
}
….
Dacă studentul nu reușește să răspundă în timpul alocat întrebării, are loc o reapelare a scriptului, iar întrebarea respectivă este validată cu time_out.
Întrebările din cadrul testului sunt parcurse în ordine crescătoare. După fiecare apăsare a butonului “Next” are loc o interogare a bazei de date, iar raspunsurile date de student sunt comparate cu cele alese de profesor, iar după ce se validează raspunsul la întrebarea respectivă se salvează rezultatele în tabel.
În momentul începerii unui test de către student, se crează în baza de date “ie”, un tabel (cu numele: username_stud_denumirecurs_denumireexamen), care va conține răspunsurile date de student la întrebări și nota obținută. Acest tabel poate fi consultat de student în orice moment prin apelarea butonului “Results”.
Odată dat răspunsul la o întrebare, sau în cazul în care timpul a expirat, studentul nu mai poate reveni asupra întrebării respective.
În cazul în care se pierde legătura între client (student) și server (aplicația “IE”), studentul poate reveni și continua testul din momentul pierderii legăturii.
Organigrama susținerii unui examen este descrisă în cele ce urmează:
Figura 3.1.2.2–2 Organigrama susținerii de examene.
3.1.2.3. Realizarea diverselor scripturi – chat-ul on-line
După cum s-a spus mai sus, privit din exterior chat-ul on-line “IEChat” este o parte integrantă a programului “IE”, însă din punct de vedere al programării el trebuie privit ca un program independent.
Scripturile care intră în componența chat-ului, împreună cu fișierele de configurare aferente se găsesc în directorul chat din cadrul aplicației “IE”.
Studenții și profesorii pot utiliza această componentă pentru realizarea de discuții on-line (în timp real). În momentul apelării butonului “On-line Chat”, se apelează scriptul index.php3, care permite setarea unor variabile importante în modul de funcționare al acestuia.
Ceea mai interesantă parte, din punct de vedere al programării, este funcționarea chat-ului propriuzis. Astfel se pot distinge 2 parți importante în funcționarea acestuia:
scrierea și transmiterea informațiilor
recepționarea informațiilor
Scrierea mesajelor se face într-un text-box (căsuță pentru text):
….
<INPUT TYPE="text" NAME="M" SIZE="50" MAXLENGTH="299"> // text-box pt. mesaj
….
Transmiterea mesajului se face utilizând o funcție javascript:
….
document.Form.M.focus();
parent.messages.location = parent.messages.document.URL;
….
Toate mesajele se salvează într-un tabel messages, de unde cele care depășesc 30 de minute de când au fost salvate vor fi șterse automat.
….
$Temp->query("INSERT INTO ".C_MSG_TBL." (type, room, user, time, message) VALUES ($T, '$R', '$U', ".time().", '$M')");
….
$Chat->query("DELETE FROM ".C_MSG_TBL." WHERE time < ".(time() – C_MSG_DEL * 60)); // mesajele se șterg automat după 30 de minute
….
S-a ales această metodă, deoarece în acest caz nu este nevoie de scrierea unui server chat dedicat care să ruleze tot timpul pe server. În cazul chat-ului “IEChat”, sarcina de server revine astfel clientului cu prioritatea ceea mai mare (primul user din chat).
Recepționarea mesajelor (informației) se face prin intermediul tabelului de mesaje messages, care este interogat pentru aflarea ultimelor mesaje:
$LastMaj->query("UPDATE ".C_USR_TBL." SET time = ".time()." WHERE room LIKE '$R' AND user LIKE '$U'")
După “interogarea” tabelului informația este afișată cu ajutorul funcției:
while((list($Time,$User,$Message) = $Messages->next_record()) && ($Nb < $N))
{
$Nb++;
echo("<P CLASS=msg><SPAN CLASS=time>".date("H\hi", $Time)."</SPAN> <B>
[{$User}]</B> ${Message}</P>");
}
3.1.2.4. Asigurarea securității
În realizarea aplicației “IE” s-a ținut cont de două aspecte importante pentru sucurizare:
securizarea în cadrul programului
securizarea datelor vehiculate între server-client și client-server
Securizarea în cadrul programului, constă în faptul că, toate URL-urile sunt criptate în momentul încărcării pagini, folosind funcția rawurlencode(URL)
echo '<A HREF="http://dark/',rawurlencode('modif_class.phtml?sub=ok’) ,'">';
Securizarea datelor vehiculate se realizează cu ajutorul protocolului SSL, din modulul OpenSSL. Deoarece utilizarea acestui modul este restricționată de anumite legi, în funcție de țara în care este utilizat, înainte de activarea acestei opțiuni de protecție trebuie citită Anexa A.
În cazul în care legile în vigoare permit utilizarea modulului, și administratorul server-ului pe care rulează aplicația este de acord cu restricțiile impuse de Licența de utilizare a modulului (Anexa B), el poate fi activat.
Cum tema proiectului de față nu include și administrarea unui server (u)NIX, nu va fi prezentat modul de instalare și configurare al modulului OpenSSL.
În cazul în care aplicația “IE” este portată pe un server 9x/NT, acest modul nu mai poate fi utilizat, singura soluție fiind achiziționarea unei licențe SSL, eliberată de un organ abilitat.
Cele două aspecte prezentate mai sus se încadrează în metodele active de protecție a programului.
Pe lângă aceste două metode s-a mai implementat o metodă de prevenire a penetrării server-ului, prin înregistrarea într-un tabel de log-uri a tuturor utilizatorilor care au s-au log-at la server sau au încercat acest lucru. Tabelul de log-uri conține:
ora log-ării sau încercăii de log-are
user name-ul folosit
tipul de user folosit (student, profesor, administrator)
adresa IP de pe care s-a încercat log-area
Tabelul poate fi consultat de administrator în orice moment, acesta putând să hotărască dacă s-a încercat o penetrare a server-ului și dacă da, să ia măsuri de prevenire corespunzătoare.
3.1.2.4. Implementarea sistemului multi-language
Aplicația “IE” a fost concepută în așa fel încât în orice moment să se poată adăuga o nouă “limbă”, toate mesajele apărând în “limba” selectată. Pentru adăugarea unei noi “limbi”, trebuie să se urmeze pașii ce vor fi prezentați în ceea ce urmează:
fișierul setup.phtml trebuie să aibă drepturi de execuție ( Ex: chmod +x setup.phtml);
se execută, prin intermediul unui browser setup.phtml;
se selectează opțiunea “Add language”, și se urmează pașii necesari adăugării unei noi “limbi”.
Toate fișierele de configurate pentru o anumită limbă, se găsesc în directorul ie/cfg/lang, și au structura de forma:
– exemplu pentru limba engleză
<?
// Text for buttons on the index_left_principal.phtml
$but1_princip = "Click here to register a new student";
$but2_princip = "Students click here to login";
$but3_princip = "Teachers click here to login";
$but4_princip = "Administrator click here to login";
// Text for buttons on the index_studenti
$but1_stud = "Click here to list all classes";
$but2_stud = "Click here to list all exams";
$but3_stud = "Click here to list all rezultates";
$but4_stud = "Click here to list all class ads";
$but5_stud = "Click here to enter the chat";
$but6_stud = "Click here to log out";
….
?>
– exemplu pentru limba română
<?
// Text pentru butoanele din index_left_principal.phtml
$but1_princip = "Înregistrare student";
$but2_princip = "Login Studenți";
$but3_princip = "Login Profesori";
$but4_princip = "Login Administrator";
// Text pentru butoanele din index_studenti
$but1_stud = "Afișare cursuri";
$but2_stud = "Afișare examene";
$but3_stud = "Rezultate examene";
$but4_stud = "Adaugare mesaj";
$but5_stud = "Intrare chat";
$but6_stud = "Logout";
….
?>
În cazul în care se dorește se poate realiza adăugarea unei “limbi” și direct adăugând fișiere, de forma celui prezentat mai sus și a celor deja existente, urmărind menținera structurii de directoare existente.
4. Rezultate experimentale
4.1. Utilizare program “IE”
4.1.1. Introducere
Aplicația “IE” a fost realizată cu scopul de a simula o universitate “virtuală”. În cadrul acestei universități “virtuale” se pot distinge patru mari secțiuni, fiecare cu scopul său bine definit. Astfel cele patru secțiuni sunt:
Register Students (Înregistrare studenți)
Login Students (Acces studenți)
Login Teachers (Acces profesori)
Login Admin (Acces administrator)
Aceste secțiuni vor fi prezentate pe larg în ceea ce urmează.
Totodată pentru funcționarea corectă a aplicației, trebuie avut în vedere o instalare și o configurare corectă. Pașii necesari precum și modul de realizare vor fi descriși în cadrul sub-capitolului Instalare și Configurare.
4.1.2. Secțiunea Register Students
Această secțiune permite oricărei persoane să se înscrie în cadrul universități “virtuale”, prin completarea câtorva detalii de identificare: username, parolă, nume, prenume, email, adresă, data nașterii (Figura 4.1.2-1).
Figura 4.1.2–1 Formular înscriere.
Acest pas este obligatoriu pentru orice persoană care dorște să devină membru al universității.
După ce toate datele au fost completate, utilizatorul va fi înregistrat în tabelul studenților. În acest moment, utilizatorul are acces la secțiunea “Students” și la toate opțiunile pe care această secțiune le pune la dispoziția sa.
Deoarece programul “IE” a fost conceput ca un instrument gratuit pentru învățământ, nu se pune problema de a utiliza o carte de credit pentru accesul la resursele de învățământ puse la dispoziție. Această opțiune se va putea adăuga pe viitor în cazul în care se va dori o completare a programului actual.
4.1.3. Secțiunea Login Students
Accesul la resursele puse la dispoziție de secțiunea studenți se face introducând un User name (nume utilizator) și un password (parolă) valid (Figura 4.1.3–1), care se obțin în urma înregistrării (Secțiunea Register Students).
Figura 4.1.3–1 Log-are studenți cu nume utilizator și parolă
Dacă numele utilizator și parola introduse de student se dovedesc a fi valide, acesta primește dreptul de a accesa resursele puse la dispozițiea sa (Figura 4.1.3–2):
List all clasess – Afișare cursuri existente
List all exams – Afișare examene
List all resultates – Afișare ruzultate obținute la diferite teste date de student
[anonimizat] – Posibilitatea de vizualizare a anunțurilor existente precum și
posibilitatea de adăugare a unui anunț nou
On-line chat – Accesul la chat-ul on-line
Log out – Părăsire secțiune
Figura 4.1.3–2 Opțiunile puse la dispoziția studentului.
4.1.3.1. Selectarea cursului dorit
În acest moment studentul poate să aleagă unul sau mai multe cursuri care au fost puse la dispoziție de către profesori. Pentru acest lucu se selectează cursul respectiv profesorul dorit (Figura 4.1.3.1–3). În urma alegerii făcute studentul primește informații privitoare la bibliografia pentru cursul respectiv, precum și posibilitatea de a download-a suportul de curs.
Figura 4.1.3.1–1 Selectarea cursului dorit.
4.1.3.2. Susținerea examenelor
În secțiunea List all exams, studentul are posibilitatea de susține examene la cursurile pe care le-a ales.
Examenele puse la dispoziția studenților sunt sunt de tip “grilă”, studentul fiind obligat să răspundă la toate întrebările din cadrul examenului într-un timp limită specificat de profesor în momentul creerii testului.
Testele pot fi de mai multe tipuri, în funcție de modul în care profesorul a dorit să le structureze. Astfel, testele pot să conțină de la 10 până la 40 de întrebări, cu 3 până la 5 răspunsuri alternative pentru fiecare întrebare. De asemenea, fiecare întrebare poate să aibă unu sau mai multe răspunsuri corecte, sau poate să nu aibă nici un răspuns corect. În cazul în care studentul nu reușește să răspundă corect la o întrebare în timpul alocat acesteia de profesor, întrebarea este invalidă, ne acordându-se punct pentru ea.
Figura 4.1.3.2–1 Întrebare din cadrul unui examen
În cazul în care apare o întrerupere în conexiunea cu server-ul în timp ce se susține un examen, studentul va putea relua examenul de la întrebarea imediat următoare întreruperii conexiunii. De exemplu, dacă studentul a răspuns la 8 întrebări și se afla la întrebarea 9 în momentul în care s-a întrerupt conexiunea, examenul se va relua de la întrebarea 10, pentru întrebarea 9 fiind considerată invalidă și ne acordându-se punct.
În momentul în care studentul dorește să susțină un examen, se va verifica dacă el este înscris în clasa profesorului pentru care dorește să susțină examenul. Dacă nu este înscris, va fi automat adăugat în clasă, cu condiția ca, în clasă să mai fie locuri vacante. Numărul de locuri dintr-o clasă este de 25.
Un loc în clasă devine vacant, în momentul în care studentul a promovat examenul respectiv, sau în cazul în care nu a reușit să-l promoveze de două ori.
În eventualitatea că profesorul a conceput mai multe teste pentru aceeași materie el poate să susțină oricare din aceste teste.
4.1.3.3. Vizualizare rezultate examene
În cazul în care studentul a susținut examene, notele acordate pentru acestea pot fi aflate consultând arhiva de note (Figura 4.1.3.3-1).
Figura 4.1.3.3-1 – Vizualizare note.
4.1.3.4. Vizualizarea și adăugarea de mesaje
Figura 4.1.3.4–1 Adăugarea de mesaje.
Cu ajutorul acestei secțiuni se pot face anunțuri cu caracter general (Figura 4.1.3.3–1). Mesajele pot fi scrise și vizualizate atât de studenți cât și de profesori.
Vizualizarea anunțurilor făcute până în momentul respectiv se face cu ajutorul opțiunii View all entries (Vizualizare mesaje), mesajele apărând în ordine descrescătoare datei la care au fost făcute, adică primul mesaj va fi afișat ultimul introdus (cel mai nou), câte șase mesaje pe o pagină. (Figura 4.1.3.3–2).
Figura 4.1.3.4–2 Afișarea mesajelor existente.
După cum se poate observa din figura 4.1.3.4–2 în momentul afișării mesajelor, se specifică data când acesta a fost scris, tipul user-ului care a făcut anunțul, user-ul precum și numele și prenumele acestuia.
Un lucru important de menționat este că, chira dacă în câmpul Messages (Mesaje) s-au introdus caractere speciale html (<br>, <body>, <table>, etc) acestea vor fi ignorate în momentul afișării pentru a nu altera structura tabelului existent.
4.1.3.5. Chat-ul on-line
Atât pentru secțiunea Studenți, cât și pentru secțiunea Profeori, se pune la dispoziție un chat on-line. Acest chat a fost realizat cu scopul de a permite comunicare în timp real între cele două tipuri de utilizatori.
Utilizarea chat-ului nu restricționează în nici un fel alte activități în cadrul universității “virtuale”, deoarece el va funcționa independent într-o fereastră nouă.
Prin apăsarea butonului On-line chat (Chat on-line), utilizatorul are acces la un set de opțiuni pentru setarea funcționării chat-ului (Figura 4.1.3.5–1) .
Cu ajutorul acestor opțiuni, utilizatorul poate alege:
numărul de mesaje afișate
timpul după care pagina este reactualizată
tipul de “cameră” în care se dorește accesul:
“cameră” publică – nu există nici o restricție
“cameră” privată existentă
posibilitatea de a creea o “cameră” privată
Figura 4.1.3.5–1 Setarea opțiunilor pentru chat-ul on-line.
După ce aceste setări au fost făcute, utilizatorul poate să converseze în timp real cu toate persoanele aflate în momentul respectiv în “camera” în care el a intrat (Figura 4.1.3.5–2).
Figura 4.1.3.5–2 Fereastra de chat.
Folosirea următoarelor tipuri de combinații produc imagini asociate în momentul afișării:
Cu ajutorul acestei secțiuni, profesorul poate să răspundă în timp real la întrebările puse de către studenți, practic el poate sa țină seminarii pe baza suportului de curs pus la dispoziția studenților.
Prin implementarea acestui chat s-a urmărit o mai bună comunicare între studenți și profesori.
4.1.3.6. Log-out
Această opțiune are ca rezultat părăsirea corectă a aplicației “IE”. În cazul în care se omite utilizarea acesteia pentru ieșirea din program, utilizatorul se expune la riscul de a deveni vulnerabil în cazul unui atac din exterior.
4.1.4. Secțiunea Login Teachers
Secțiunea este dedicată în exclusivitate profesorilor, punând la dispziția acestora un set de instrumente necesare creerii de cursuri și examene.
Accesul la această secțiune se face, ca în cazul studenților, pe baza unui user name (nume utilizator) și a unui password (parole). Pentru obținerea unui user name și a unui password, profesorul trebuie să se adreseze administratorului programului “IE”.
În cazul întroducerii unui nume utilizator și a unei parole valide, profesorul primește accesul la funcțiile puse la dispoziția sa de program (Figura 4.1.4–1).
Figura 4.1.4 – 1 Opțiuni puse la dispoziția profesorului (meniul principal)
După cum se poate observa în figura de mai sus, ultimele trei opțiuni din meniul principal sunt identice cu cele din meniul studenților (Figura 4.1.3–2) și de aceea nu vor mai fi discutate aici.
4.1.4.1. Cursuri și Examene
Sub-meniul Classes & Exams (Cursuri și Examene), poate fi apelat în momentul accesării butonului cu același nume. Acesta pune la dispoziția profesorului un set de unelte necesare creerii și actualizării cursurilor și examenelor pe care el le predă (Figura 4.1.4.1–1).
Figura 4.1.4.1 – 1 Sub-meniul Classes & Exams
Primul pas pe care un profesor trebuie sa-l facă, este de a creea un curs nou. Acest lucru este posibil cu ajutorul butonului Create new class (Creeare curs nou). Profesorul trebuie să aleagă un nume pentru cursul creeat, precum și să indice bibliografia pe care studenții o vor folosi pentru curs (Figura 4.1.4.1 – 2)
Figura 4.1.4.1 –2 Creearea unui curs nou.
Numele cursului creeat trebuie să fie cât mai sugestiv, un profesor nu poate să creeze mai multe cursuri cu același nume.
După ce a creeat cursul, profesorul poate trece la generarea examenelor. Acest lucru se face cu ajutorul butonului Create new exam (Creeare de examene noi).
Creearea de examene presupune doi pași importanți pe care profesorul trebuie să-i urmeze:
setarea variabilelor pentru examen
introducerea setului de întrebăr și răspunsuri
Deoarece generarea examenelor se poate face în orice moment, profesorul trebuie să aleagă, pe lângă denumirea examenului, și denumirea cursului pentru care se dorește acest lucru (Figura 4.1.4.1–3) .
Tot acum, profesorul trebuie să seteze următoarele date pentru examen:
numărul de întrebări – profesorul poate alege între 10, 20, 30 sau 40 de întrebări
numărul de răspunsuri la o întrebare – se pot selecta 3, 4 sau 5 variante de răspuns
timpul maxim pentru rezolvarea unei întrebări – se alege între trei variante: 20, 30 sau 40 de secunde pentru o întrebare.
Figura 4.1.4.1–3 Setarea parametrilor examenului
În cazul în care se introduce un nume de exame care există deja, se va semnala o eroare, profesorul fiind nevoit să modifice numele examenului.
După ce toți acești parametrii au fost setați, profesorul poate să înceapă introducerea întrebărilor și a variantelor de răspuns (Figura 4.1.4.1–4)
Figura 4.1.4.1–4 Generatorul de întrebări.
În funcție de setările efectuate anterior, profesorul va trebui să introducă numărul de răspunsuri alternative pentru fiecare întrebare, precum și varintele corecte/incorecte de răspunsuri.
Daca nu se introduce nimic în câmpul alocat textului întrebării atunci se va înregistra o eroare, iar utilizatorului i se va sugera să completeze toate câmpurile care compun formul respectiv. Dacă se înregistreaza “succes”, utilizatorul poate trece la următorul pas: înregistrarea întrebării următoare.
O altă unealtă pusă la dispoziția profesorului de către programul “IE” este Modify exams (Modificare examene). Această secțiune este deosebit de utilă în cazul în care un profesor dorește completarea sau rescrierea unor întrebări anume din cadrul unui examen.
Fiecare profesor poate să vizualizeze doar examenele creeate de el, programul nu permițând modificarea sau vizualizarea examenelor altor profesori. Asemănarea din punc de vedere vizual cu secțiunea de mai sus (Creeare examene) este foarte mare, singura deosebire față de ceea mai sus amințită este că, în cadrul acesteia câmpurile sunt deja completate, profesorul putând să le modifice sau să adauge noi întrebări (Figura 4.1.4.1–5).
Figura 4.1.4.1 – 5 Modificarea/actualizarea examenelor.
4.1.4.2. Secțiunea “Utilitare”
În cadrul acestei secțiuni, profesorul dispune de două componente utile prin care profesorul poate să afle toate informațiile despre un student și poate să șteargă un anunit cont (Figura 4.1.4.2–1)
Figura 4.1.4.2 – 1 Sub-meniul “Utilitare”.
În cazul în care un profesor dorește să afle amănunte despre un student (adresă, examene susținute, note obținute, etc), poate folosi secțiunea Search Students (Căutare Studenți). În urma apelării acesteia, profesorul va trebui să introducă user name-ul, numele și prenumele studentului (Figura 4.1.4.2 – 2).
Figura 4.1.4.2 –2 Căutare student.
Dacă profesorul a introdus corect un user name precum și numele și prenumele aferente, se vor afișa inormațiile privitoare la studentul respectiv (Figura 4.1.4.2–3), în caz contrar se va semnala o eroare.
Informațiile privitoare la note, precum și răspunsurile date de student se pot vizualiza în urma apelării View results (Vizualizare rezultate) (Figura 4.1.4.2–4) .
Figura 4.1.4.2 –3 Informații generale despre studenți.
Figura 4.1.4.2–4 Vizualizare rezultate student.
Aplicația “IE” dă posibilitatea profesorului să șteargă contul unui student. Această operație se face după ce profesorul a introdus corect numele și prenumele studentului pe care dorește să-l șteargă, și a ales user name-ul din lista derulantă (Figura 4.1.4.2–5).
Figura 4.1.4.2–5 Ștergere student.
Această operațiune este irevocabilă, odată executată ștergera unui student se șterg toate informațiile referitoare la el, ne mai putânt fi recuperate.
4.1.5. Secțiunea Admin
Secțiunea este dedicată administrării diferitelor componente ale aplicației “IE”. Accesul la resurse se face pe baza unui user name (nume utilizator), care în cazul aplicației de față este unic, și pe baza unei parole. În cazul în are acestea sunt valide, utilizatorul primește drept de administrare (Figura 4.1.5–2).
În momentul instalării user name-ul și parola pentru contul de administrator sunt:
user name = root
password = root
După ce instalarea și configurarea aplicației s-a încheiat cu succes, acestea trebuie schimbate. Pentru a putea schimba user name-ul și parola de administrator se va realiza o log-are pe contul de administrare, în momentul în care user name-ul și parola au fost validate, va apărea fereastra în care se vor specifica noul user name și noua parolă (Figura 4.1.5–1).
Figura 4.1.5–1 Schimbare user name și parolă administrator.
Figura 4.1.5 – 2 Meniul de administrare.
După cum se poate observa din figura de mai sus, în cadrul secțiunii de administrare, se pot executa trei operațiuni importante:
Add teacher – adăugare profesor
Delete teacher – ștergere profesor
View logs – Vizualizare log-uri
Componenta Add teacher (Adăugare profesori), este utilizată pentru a creea conturi profesorilor. Aceasta presupune completarea unui formular prin care se specifică câteva date care vor descrie contul profesorului: nume utilizator, parolă, nume, prenume, email, specialitate și adresă (Figura 4.1.5–3).
Figura 4.1.5–3 Adăugare cont profesor.
Câmpurile User name (Nume utilizator) și Password (Parolă) sunt obligatorii, în cazul în care nu sunt completate se returează o eroare și contul nu este creeat. De asemenea, nu pot să existe user cu nume identic.
Câmpul Password (Parolă) este dublat, pntru a evita introducerea eronată a unei parole.
Componenta Delete teacher (Ștergere profesor) (Figura 4.1.5–3) este asemănătoare cu ceea de ștergere studenți. În momentul în care un profesor este șters, se pierd toate informațiile privitoare la el, inclusiv cursurile și examenele pe care acesta le-a creeat. Din această cauză, utilizarea acestei opțiuni trebuie folosită cu grijă, în caz contrat putând apărea repercursiuni nedorite în funcționarea corectă a programului.
Figura 4.1.5–3 Ștergere cont profesor.
Opțiunea View logs (Vizualizare log-uri) oferă administratorului posibilitatea de a consulta listele cu fișiere log care s-au creeat în urma intrării sau încercării de intrare în sistem a unuia dintre membrii acestuia. Structura unui astfel de fișier log este compusă din: nume utilizator care a intrat sau a încercat intrarea în sistem, parola folosită, IP-ul calculatorului de pe care s-a încercat log-area, precum și data/ora la care a avut loc aceeasta.
4.2. Instalarea și configurarea programului “IE”
Această secțiune (Figura 4.2–1) este foarte importantă pentru rularea corectă și în siguranță a aplicației “IE”. Utilizarea, de către persoane neavizate a programului de instalare și configurare (setup.phtml), poate distruge sau altera datele existente în cadrul universității “virtuale”. Imediat după instalarea programului, administratorul acestuia va trebui să-și ia măsuri de prevenire. Un mod simplu pentru a evita utilizarea acestuia pe viitor, de către perosane neautorizate, este interzicerea tuturor drepturilor pentru directorul setup/ (Ex: chmod 000 setup/). Dacă pe viitor se va dori rularea programului de setup, se vor acorda din nou drepturi acestui director (Ex: chmod 777 setup/).
Figura 4.2–1 Instalare și configurare program “IE”.
Cel mai important lucru din cadrul programului de instalare și configurare, este setarea corectă a variabilelor MySQL. Deoarece acestea depind de modul în care programul MySQL a fost instalat și de modul în care administratorul server-ului le-a configurat, pentru configurarea acestora este necesară consultarea lui.
5. Concluzii
Aplicația “IE” a fost realizată cu scopul de a emula o universitate “virtual”. În momentul de față, aplicația este un instrument puternic, pus la indemâna studenților și a profesorilor, prin care se poate realiza o mai bună aprofundare a cunoștințelor sau chiar învățarea de lucruri noi. În momentul concepției acestui program s-a avut în vedere accesul liber la toate informațiile puse la dispoziție de către profesori studenților. Din această cauză nu s-a implementat un sistem de tipul e-commerce, orice utilizator putând să urmeze gratuit cursurile puse la dispoziția sa. Pe viitor, în cazul în care se va dori o îmbunătățire a programului actual, se va putea ține cont și de posibilitatea introducerii unei astfel de componente.
Aplicația a fost concepută să ruleze pe servere de tipul u(NIX), datorită multiplelor avantaje pe care un astfel de sistem le are față de cele 9x/NT (stabilitate foarte ridicată, securitate excelentă, etc).
Compatibilitatea programului “IE” cu servere-le de tip 9x/NT este realizată în întregime
5.1. Avantaje
Programarea aplicației “IE” în limbajul PHP, simplifică utilizarea bazelor de date în cadrul ei.
Folosirea bazei de date MySQL, conferă un plus de viteză în execuție și asigură o foarte bună protecție a datelor.
Scrierea programului pentru servere de tipul u(NIX), a permis: implementarea multiplelor opțiuni de securizare, utilizarea tuturor componentelor de programare fără a fi nevoie de cumpărarea lor. Toate acestea au dus la realizarea unui produs competitiv din punc de vedere al prețului și al calități.
Implementarea în cadrul programului, a unui chat on-line, care permite comunicarea în timp real între profesori și studenți.
Asigurarea unui sistem multi-language.
Multiplele setări pe care un profesor le poate face în momentul creerii unui examen, conduce la posibilitatea realizării de examene diverse în cadrul aceluiași curs.
Studenți se înscriu într-o clasă înaintea susținerii unui examen, în limita locurilor disponibile.
5.2. Dezavantaje
Inexistența unei componente de tipul e-commerce nu permite perceperea de taxe pentru studenții înscriși.
Portarea aplicației pe servere 9x/NT necesită mici modificări în codul sursă.
5.3. Îmbunătățiri
Asigurarea unui modul de tip e-commerce la creearea conturilor studenților.
Implementarea de meniuri realizate în shockwave.
6. Bibliografie
1. Titlu: PHP Manual
Autor(i): Stig Sćther Bakken, Alexander Aulbach
Editura: Egon Schmid
Anul publicării: 2000
2. Titlu: MySQL Documentation
Autor: Michael J. Miller Jr.
Editura: DataKonsulter AB
Anul publicării: 2000
3. Titlu: Open SSL – User manual
Autor: Ralf S. Engelschall
Editura: –
Anul publicării: 2000
4. Titlu: HTML & CGI Unleashed, Professional Reference Edition
Autor(i): John December; Mark Ginsburg
Editura: Macmillan Computer Publishing
Anul publicării: 1996
5. Titlu: GNU General Public Licenses
Autor(i): Free Software Foundation, Inc.
Editura: –
Anul publicării: 1991
7. Anexa A – Licența GNU versiunea 2, iunie 1991
Copyright (C) 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute copies of this license document, but changing it is not allowed.
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software–to make sure the software is free for all its users.
This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.
Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.
The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.
Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.
Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the sections above.
b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
8. Anexa B – Licența pentru utilizarea modulului OpenSSL
Cu toate că OpenSSL aderă la specificațiile GNU, datorită algoritmilor de criptare pe care îi folosește, trebuie să respecte legile de import/export și anumite restiricții de utilizare în diferite țări.
Cel puțin două țări cu restricții de criptare sunt cunoscute: În Statele Unite ale Americii (USA) nu este legal folosirea modulului, datorită algoritmilor RSA și RC4. În Franța este interzisă folosirea programelor de criptare care folosesc mai mult de 40 de biți pentru cheile generate.
În cazul utilizării programului în România, nu există nici o restricție din punct de vedere legal pentru modulul OpenSSL.
Folosirea modulului OpenSSL se face pe proprie răspundere, și nu implică în nici un fel producătorul modulului OpenSSL.
9. Anexa C – Sursele programului “IE”
9.1. Fișierul index.html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Welcome to Interactiv Education Program</title>
</head>
<frameset rows="132,*" framespacing="0" border="0">
<frame src="index_up.html" name="index_up" noresize scrolling="NO" frameborder="NO">
<frameset cols="215,*" framespacing="0" border="0">
<frame src="index_left_principal.phtml" name="index_left" scrolling="NO" noresize frameborder="NO">
<frame src="index_center.phtml" name="index_center" noresize marginwidth="0" marginheight="0" scrolling="YES" frameborder="NO">
</frameset>
</frameset>
<noframes>
</html>
</noframes>
9.2. Fișierul index_up.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Index up</title>
</head>
<body bgcolor="#666699">
</body>
</html>
9.3. Fișierul index_center.phtml
<html>
<head>
<meta http-equiv="content-type" content="text/html">
<title>Index Center</title>
</head>
<body background="img/background.gif">
<table border="0" cellpadding="0" cellspacing="2" width="100%" height="100%">
<tr>
<td align="left" valign="top"></td>
</tr>
</table>
</body>
</html>
9.4. Fișierul index_left.phtml
<?
require "cfg/general.conf";
require "cfg/lang/$language/index.lang";
include "templates/ie.templ";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Register Students',/*URL*/'<? echo "img/"; echo "$language"; echo"/reg_stud.gif" ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/reg_stud_push.gif" ?>',/*URL*/'','<? echo "$but1_princip" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Login Students',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_stud.gif"?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_stud_push.gif" ?>',/*URL*/'','<? echo "$but2_princip" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Login Teachers',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_prof.gif" ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_prof_push.gif" ?>',/*URL*/'','<? echo "$but3_princip" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Login Admin',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_admin.gif" ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_admin_push.gif" ?>',/*URL*/'','<? echo "$but4_princip" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/reg_stud_push.gif" ?>" st="<? echo "$but1_princip" ?>"><a href="inscriere.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Register Students',1)" onmouseout="return CSIShow(/*CMP*/'Register Students',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/reg_stud.gif" ?>" width="141" height="28" name="Register Students" border="0" alt="<? echo "$but1_princip" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_stud_push.gif" ?>" st="<? echo "$but2_princip" ?>"><a href="login.phtml?log=stud" target="index_center" onmouseover="return CSIShow(/*CMP*/'Login Students',1)" onmouseout="return CSIShow(/*CMP*/'Login Students',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_stud.gif" ?>" width="141" height="28" name="Login Students" border="0" alt="<? echo "$but2_princip" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_prof_push.gif" ?>" st="<? echo "$but3_princip" ?>"><a href="login.phtml?log=prof" target="index_center" onmouseover="return CSIShow(/*CMP*/'Login Teachers',1)" onmouseout="return CSIShow(/*CMP*/'Login Teachers',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_prof.gif" ?>" width="141" height="28" name="Login Teachers" border="0" alt="<? echo "$but3_princip" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_admin_push.gif" ?>" st="<? echo "$but4_princip" ?>"><a href="login.phtml?log=admin" target="index_center" onmouseover="return CSIShow(/*CMP*/'Login Admin',1)" onmouseout="return CSIShow(/*CMP*/'Login Admin',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_admin.gif" ?>" width="141" height="28" name="Login Admin" border="0" alt="<? echo "$but4_princip" ?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.5. Fișierul index_left_principal.phtml
<?
require "cfg/general.conf";
include "lib/ie.lib";
include "templates/ie.templ";
if ($res !='login')
{
// daca nu se primeste acest parametru, inseamna ca s-a incercat deschiderea
//acestei pagini din afara programului
$err=sparg;
require "cfg/lang/$language/error.lang";
}
else
//in caz contrar pagina a fost accesata corect
{
if ($in == 'stud') //se activeaza meniul pentru studenti
{
echo "<table border='0' cellpadding='0' cellspacing='0' width='90%'>
<tr>
<td width='99%' bgcolor='#6666CC'><font color='#FFFFFF'>Student: <b>
$nam </b> is logd!</font> </td>
<td width='1%'></td>
</tr>
</table>";
require "templates/index_stud.templ";
}
else if ($in == 'prof') //se activeaza meniul pentru profesori
{
echo "<table border='0' cellpadding='0' cellspacing='0' width='90%'>
<tr>
<td width='99%' bgcolor='#666699'><font color='#FFFFFF'>Teacher:
<b> $nam </b> is logd!</font> </td>
<td width='1%'></td>
</tr>
</table>";
ie_reload_frame('index_center','index_center.phtml');
require "templates/index_prof.templ";
}
else if ($in == 'prof-class') //se activeaza sub-meniul class
{
echo "<table border='0' cellpadding='0' cellspacing='0' width='90%'>
<tr>
<td width='99%' bgcolor='#666699'><font color='#FFFFFF'>Teacher: <b> $nam </b> is logd!</font> </td>
<td width='1%'></td>
</tr>
</table>";
ie_reload_frame('index_center','index_center.phtml');
require "templates/index_prof_class.templ";
}
else if ($in == 'prof-utils') //se activeaza sub-meniul utils
{
echo "<font size=3> Teacher: <b> $nam </b></font> is logd!";
ie_reload_frame('index_center','index_center.phtml');
require "templates/index_prof_utils.templ";
}
else if ($in == 'admin') //se activeaza meniul pentru administrator
{
echo "<table border='0' cellpadding='0' cellspacing='0' width='90%'>
<tr>
<td width='99%' bgcolor='#666699'><font color='#FFFFFF'> <font size=3> Administrator: <b> $nam </b> is logd!</font> </td>
<td width='1%'></td>
</tr>
</table>";
require "templates/index_admin.templ";
}
}
9.6. Fișierul login.phtml
<?
require "cfg/general.conf";
require "cfg/lang/$language/login.lang";
require "lib/ie.lib";
if (isset($nam)) // se testeaza daca s-a mai trimis un cookie "nam"
{
if ($track ==1)
{
}
else if ($track !=1)
{
setcookie ("nam");
setcookie ("nam","$username");
}
}
if (!isset($nam))
{
setcookie ("nam","$username");
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Login</title>
</head>
<body background="img/background.gif">
<?
echo "<form method='POST' action='login.phtml?sub=ok&log=$log'>";
?>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="58%">
<tr>
<td width="15%">
<p style="line-height: 150%"><b><font size="3"><?echo"$username_nam:"?></font></b></td>
<td width="85%"><input type="text" name="username" size="10" maxlength="10"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><b><font size="3"><?echo"$pass_nam:"?></font></b></td>
<td width="85%"><input type="password" name="password" size="15" maxlength="15"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"></td>
<td width="85%">
<p><input type="submit" value="Submit" name="B1"><input type="reset"
</td>
</tr>
</table>
</center>
</div>
<p align="left">
</p>
</form>
</body>
</html>
<?
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
if ($log=='stud') //se intra pe bucla de studenti
{
$qstr="select * from inscrisi where username='$username' and password='$password'";
$qry=mysql_query($qstr);
}
else if ($log=='prof') // se intra pe bucla de profesori
{
$qstr="select * from profesors where username='$username' and password='$password'";
$qry=mysql_query($qstr);
}
else if ($log=='admin') // se intra pe bucla de administratori
{
$qstr="select * from admin where username='$username' and password='$password'";
$qry=mysql_query($qstr);
}
$rows=mysql_num_rows($qry);
$row=mysql_fetch_array($qry);
$passw=$row[password];
if ($passw==$password)
{
if ($username !='')
{
if ($password !='')
{
if ($log=='stud')
{
ie_reload_frame('index_left','index_left.phtml?res=login&in=stud');
ie_reload_frame('index_center','index_center.phtml');
}
else if ($log=='prof')
{
ie_reload_frame('index_left','index_left.phtml?res=login&in=prof');
ie_reload_frame('index_center','index_center.phtml');
}
else if ($log=='admin')
{
ie_reload_frame('index_left','index_left.phtml?res=login&in=admin');
ie_reload_frame('index_center','index_center.phtml');
}
}
else
{
ie_error('no_pass');
}
}
else
{
ie_error('no_usser');
}
}
else
{
ie_error('err_pass');
}
}
?>
9.7. Fișierul inscriere.phtml
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Add student</title>
<meta http-equiv="Content-Language" content="en-us">
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/enter.lang"; // configurarile pentru inscriere
require "cfg/lang/$language/date.lang"; // configurarile pentru afisarea datei
require "lib/ie.lib";
echo "<input type='hidden' name='sub'>";
?>
<form method="POST" action="inscriere.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="1" width="80%">
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$user_name_nam:"?></b></font></td>
<td width="85%"><input type="text" name="user_name" size="10" maxlength="10"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$pass_nam:"?> </b></font></td>
<td width="85%">
<p style="line-height: 100%"><input type="password" name="password" size="15" maxlength="15"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?print"$pass_nam:"?> </b></font></td>
<td width="85%">
<p style="line-height: 100%"><input type="password" name="re_password" size="15 maxlength="15"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$first_name_nam"?>:</b></font></td>
<td width="85%"><input type="text" name="first_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$last_name_nam:"?></b></font></td>
<td width="85%"><input type="text" name="last_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$email_nam:"?> </b></font></td>
<td width="85%"><input type="text" name="email" size="20" maxlength="20"></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$address_nam:"?></b></font></td>
<td width="85%"><textarea rows="4" name="address" cols="35"></textarea></td>
</tr>
<tr>
<td width="15%">
<p style="line-height: 150%"><font size="3"><b><?echo"$data_birth_nam:"?></b></font></td>
<td width="85%"><select size="1" name="zi">
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
<option value="13">13
<option value="14">14
<option value="15">15
<option value="16">16
<option value="17">17
<option value="18">18
<option value="19">19
<option value="20">20
<option value="21">21
<option value="22">22
<option value="23">23
<option value="24">24
<option value="25">25
<option value="26">26
<option value="27">27
<option value="28">28
<option value="29">29
<option value="30">30
<option value="31">31
</select> <select size="1" name="luna">
<option value="January"><?echo"$l1"?>
<option value="February"><?echo"$l2"?>
<option value="March"><?echo"$l3"?>
<option value="April"><?echo"$l4"?>
<option value="May"><?echo"$l5"?>
<option value="June"><?echo"$l6"?>
<option value="July"><?echo"$l7"?>
<option value="August"><?echo"$l8"?>
<option value="Septembre"><?echo"$l9"?>
<option value="October"><?echo"$l10"?>
<option value="November"><?echo"$l11"?>
<option value="December"><?echo"$l12"?>
</select> <input type="text" name="an" size="4" maxlength="4"></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="50%">
<tr>
<td width="23%"> </td>
<td width="77%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</center>
</div>
<p>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
if ($password==$re_password && $user_name !='')
{
$conn=mysql_connect("$host","$user","$pass"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from inscrisi where username='$user_name'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows==0) //se verifica daca mai exista un user name identic in baza de date
{
//daca nu exista, datele pot sunt valide si sunt scrise in tabel
if ($user_name !='' & $password !='' & $first_name !='' & $last_name !='')
{
$qst="insert into inscrisi (username, password, first_name, last_name, email, address, zi, luna, an)
values('$user_name', '$password', '$first_name', '$last_name', '$email', '$address', '$zi', '$luna', '$an')";
$qry=mysql_query($qst);
echo "<script language='JavaScript'>window.location='login.phtml?log=stud'</script>";
}
else
{
ie_error('err_reg');
}
}
else
{
ie_error('ex_user');
}
}
else
{
ie_error('err_pass');
}
}
?>
</body>
</html>
9.8. Fișierul add_prof.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Add professors</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/add_prof.lang"; // configurarile pentru inscriere
require "lib/ie.lib";
echo "<input type='hidden' name='sub'>";
?>
<form method="POST" action="add_prof.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$user_name_nam :"?></b></font></td>
<td width="85%"><input type="text" name="user_name" size="10" maxlength="10"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$pass_nam :"?></b></font></td>
<td width="85%"><input type="password" name="password" size="15" maxlength="15"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$pass_nam :"?></b></font></td>
<td width="85%"><input type="password" name="re_password" size="15" maxlength="15"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$first_name_nam :"?></b></font></td>
<td width="85%"><input type="text" name="first_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$last_name_nam :"?></b></font></td>
<td width="85%"><input type="text" name="last_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$email_nam :"?></b></font></td>
<td width="85%"><input type="text" name="email" size="20" maxlength="20"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$specialty_nam :"?></b></font></td>
<td width="85%"><input type="text" name="specialty" size="30" maxlength="30"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$address_nam :"?></b></font></td>
<td width="85%"><textarea rows="4" name="address" cols="40"></textarea></td>
</tr>
</table>
</center>
</div>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="10%"></td>
<td width="90%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
<p> </p>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
if ($password==$re_password && $user_name !='')
{
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from profesors where username='$user_name'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows==0) //se verifica daca mai exista un user name identic
{
print "ok";
//daca nu exista, datele sunt valide si sunt scrise in tabel
$qst="insert into profesors (username, password, first_name, last_name, email, specialty, address)
values('$user_name', '$password', '$first_name', '$last_name', '$email', '$specialty', '$address')";
$qry=mysql_query($qst);
ie_reload_frame('index_center','index_center.phtml');
}
}
}
?>
</body>
</html>
9.9. Fișierul create_class.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Create Class</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_class.lang"; // configurarile pentru creare curs
require "lib/ie.lib";
?>
<form method="POST" action="create_class.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$class_name_nam :"?></b></font></td>
<td width="85%"><input type="text" name="class_name" size="40"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$biblio_name_nam :"?></b></font></td>
<td width="85%"><textarea rows="4" name="biblio_name" cols="30"></textarea></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="30%"></td>
<td width="70%"><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset"name="B2"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
$cls="$nam"."_"."$class_name";
$class=strtr($cls, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from class where class='$class_name' and username='$nam'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows==0) //se verifica daca mai exista un curs identic
{
//daca nu exista, datele sunt valide si sunt scrise in tabel
$qst="insert into class (class, username) values ('$class_name', '$nam')";
$qry=mysql_query($qst);
$create="create table $class (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID), classname text, bibname text, calefis text)";
$qry=mysql_query($create);
$qst="insert into $class (classname, bibname) values ('$class', '$biblio_name')";
$qry=mysql_query($qst);
// se creaza tabelul in care se vor pastra studentii inscrisi pentru acest curs
$clasa="$nam"."_"."$class_name"."_class";
$create="create table $clasa (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID), username char(20), first char(50), last char(50))";
$qry=mysql_query($create);
ie_reload_frame('index_center','index_center.phtml');
}
else
{
ie_error('err_create_class');
}
}
?>
</body>
</html>
9.10. Fișierul create_exam.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Create exam</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_exam.lang"; // configurarile pentru creare
require "lib/ie.lib";
print"<input type='hidden' name='exam'>";
print"<input type='hidden' name='cla'>";
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from exam_setup where exam='$exam' and class='$cla'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
$row=mysql_fetch_array($qry);
$user=$row[username];
$ques_no=$row[question_no];
$altern=$row[alternative_answer];
$time=$row[time];
if ($sub !='next')
{
$nr_crt=1;
ie_afis($altern, $nr_crt);
}
else if ($put=='ok')
{
if ($sub=='next' & $nr_crt<=$ques_no)
{
// se pregateste numele tabelului pentru examenul curent
$exam_tab="$nam"."_"."$cla"."_"."$exam";
$exam_tab=strtr($exam_tab, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$create="create table $exam_tab (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), exam char(50), quest text)";
$qry=mysql_query($create);
for ($i=1; $i<=$altern; $i++)
{
$alter="alter table $exam_tab add ans_$i text";
$qry=mysql_query($alter);
$alter="alter table $exam_tab add cor_$i char(3)";
$qry=mysql_query($alter);
}
if ($altern==3)
{
$qst="insert into $exam_tab (username, exam, quest, ans_1, ans_2, ans_3, cor_1, cor_2, cor_3)
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$correct_1', '$correct_2', '$correct_3')";
}
else if ($altern==4)
{
$qst="insert into $exam_tab (username, exam, quest, ans_1, ans_2, ans_3, ans_4, cor_1, cor_2, cor_3, cor_4)
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$answer_4', '$correct_1', '$correct_2', '$correct_3', '$correct_4')";
}
else if ($altern==5)
{
$qst="insert into $exam_tab (username, exam, quest, ans_1, ans_2, ans_3, ans_4, ans_5, cor_1, cor_2, cor_3, cor_4, cor_5)
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$answer_4', '$answer_5', '$correct_1', '$correct_2', '$correct_3', '$correct_4', '$correct_5')";
}
$qry=mysql_query($qst);
ie_afis($altern, $nr_crt);
}
else if ($nr_crt>$ques_no)
{
echo "Gata";
}
}
?>
</table>
<p><font size="3"><b> </b></font></p>
<?// <p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>?>
</form>
</body>
</html>
9.11. Fișierul del_prof .phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Delete Teacher</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/del_prof.lang"; // configurarile pentru stergere profesori
require "lib/ie.lib";
echo "<input type='hidden' name='sub'>";
?>
<form method="POST" action="del_prof.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$user_name_nam:"?></b></font></td>
<td width="85%"><?ie_username('profesors');?></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$first_name_nam"?></b></font></td>
<td width="85%"><input type="text" name="first_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$last_name_nam:"?></b></font></td>
<td width="85%"><input type="text" name="last_name" size="25" maxlength="25"></td>
</tr>
</table>
</center>
</div>
<p align="left"> </p>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="23%"></td>
<td width="77%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
<p> </p>
</form>
</tr>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru stergerea
//informatiilor din tabel
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qstr="select * from profesors where username='$username' and first_name='$first_name' and last_name='$last_name'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows != 0)
{
$qst="delete from profesors where username='$username'";
$qry=mysql_query($qst);
echo "Teacher <b> $first_name $last_name </b> deleted!!";
ie_reload_frame('index_center','index_center.phtml');
}
else if ($rows == 0)
{
ie_error('err_del_prof');
}
}
?>
</body>
</html>
9.12. Fișierul del_stud.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Delete Student</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/del_stud.lang"; // configurarile pentru stergerestudent
require "lib/ie.lib";
echo "<input type='hidden' name='sub'>";
?>
<form method="POST" action="del_stud.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$user_name_nam:"?></b></font></td>
<td width="85%"><?ie_username('inscrisi');?></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$first_name_nam"?></b></font></td>
<td width="85%"><input type="text" name="first_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%"><font size="3"><b><?echo"$last_name_nam:"?></b></font></td>
<td width="85%"><input type="text" name="last_name" size="25" maxlength="25"></td>
</tr>
</table>
</center>
</div>
<p align="left"> </p>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="23%"></td>
<td width="77%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
<p> </p>
</form>
</tr>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru stergerea
//informatiilor din tabel
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qstr="select * from inscrisi where username='$username' and first_name='$first_name' and last_name='$last_name'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows != 0)
{
$qst="delete from inscrisi where username='$username'";
$qry=mysql_query($qst);
echo "Student <b> $first_name $last_name </b> deleted!!";
ie_reload_frame('index_center','index_center.phtml');
}
else if ($rows == 0)
{
ie_error('err_del_stud');
}
}
?>
</body>
</html>
9.13. Fișierul find_stud.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Find student</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/find_stud.lang"; // configurarile pentru cautare
require "lib/ie.lib";
?>
<form method="POST" action="find_stud.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" width="80%" cellspacing="0">
<tr>
<td width="15%"><font size="3"><b><?echo"$user_name_nam :"?></b></font></td>
<td width="85%"><input type="text" name="user_name" size="15" maxlength="10">
</tr>
<tr>
<td width="15%"><b><font size="3"><?echo"$first_name_nam"?></font></b></td>
<td width="85%"><input type="text" name="first_name" size="25" maxlength="25"></td>
</tr>
<tr>
<td width="15%"><b><font size="3"><?echo"$last_name_nam:"?></font></b></td>
<td width="85%"><input type="text" name="last_name" size="25" maxlength="25"></td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="23%"></td>
<td width="77%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru cautarea
//informatiilor din tabel
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qstr="select * from inscrisi where username='$user_name' and first_name='$first_name' and last_name='$last_name'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows != 0)
{
$row=mysql_fetch_array($qry);
$usr=$row['username'];
$first=$row['first_name'];
$last=$row['last_name'];
$qstr="CREATE TABLE $nam (username char(20), first char(50), last char(50))";
$qry=mysql_query($qstr);
$qst="insert into $nam (username, first, last) values ('$usr', '$first', '$last')";
$qry=mysql_query($qst);
ie_reload_frame('index_center','list_stud_exam.phtml?tip=prof');
}
}
?>
</body>
</html>
9.14. Fișierul list_stud_exam.phtml
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>View</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/list_msg.lang";
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
print"<input type='hidden' name='t'>";
print"<input type='hidden' name='tip'>";
if
($tip=='student')
{
$qst1="select * from $nam order by data desc";
$qry1=mysql_query($qst1);
$nrrow=mysql_num_rows($qry1);
}
else if ($tip=='prof')
{
$qstr="select * from $nam";
$qry=mysql_query($qstr)
or die ("No exams 2 !");
$row1=mysql_fetch_array($qry);
$exm=$row1['username'];
$usr=$row1['username'];
$first=$row1['first'];
$last=$row1['last'];
$qs="drop table $nam";
echo "<br><b> Username: </b>";
echo " $usr <br>";
echo "<b> First name: </b>";
echo " $first<br>";
echo "<b> Last name: </b>";
echo " $last <br>";
echo " <hr> ";
$qry=mysql_query($qs);
$qst1="select * from $exm order by data desc";
$qry1=mysql_query($qst1);
$nrrow=mysql_num_rows($qry1);
}
for($i=1; $i<=$nrrow; $i++)
{
$row=mysql_fetch_array($qry1);
$class[$i]=$row['class'];
$prof[$i]=$row['prof'];
$nota[$i]=$row['nota'];
$dat[$i]=$row['data'];
$exam1[$i]=$row['exam'];
}
$afis=6;
echo "<table border='1' cellpadding='2' cellspacing='3' width='95%'>";
echo "<tr>";
echo "<td width='25%' align='center'><font size='3'><b>$exam_nam</b></font></td>";
echo "<td width='25%' align='center'><font size='3'><b>$class_nam</b></font></td>";
echo "<td width='20%' align='center'><font size='3'><b>$prof_nam</b></font></td>";
echo "<td width='15%' align='center'><font size='3'><b>$nota_nam</b></font></td>";
echo "<td width='10%' align='center'><font size='3'><b>$data_nam</b></font></td>";
echo "</tr>";
if ($afis >= $nrrow)
{
$afis=$nrrow;
for($i=1; $i<=$afis; $i++)
{
echo "<tr>";
echo "<td width='25%' align='center'><font size='3'>$exam1[$i]</font></td>";
echo "<td width='25%' align='center'><font size='3'>$class[$i]</font></td>";
echo "<td width='20%' align='center'><font size='3'>$prof[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$nota[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$dat[$i]</font></td>";
echo "</tr>";
}
}
else
{
$inf=$t+1;
$sup=$t+$afis;
if($sup>$nrrow)
{
$sup=$nrrow;
}
for($i=$inf; $i<=$sup; $i++)
{
echo "<tr>";
echo "<td width='25%' align='center'><font size='3'>$exam[$i]</font></td>";
echo "<td width='25%' align='center'><font size='3'>$class[$i]</font></td>";
echo "<td width='20%' align='center'><font size='3'>$prof[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$nota[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$dat[$i]</font></td>";
echo "</tr>";
}
$t=$t+$afis;
if ($t<=$afis)
{
print" ";
}
else
{
print"</p><a href='javascript:history.go(-1)' onMouseOver=\"self.status='Preview'\"><img src='img/$language/back.jpg' border=0></a>";
}
if($t>=$nrrow)
{
print" ";
}
else
{
print"<a href='list_stud_exam.phtml?t=$t' onMouseOver=\"self.status='Next'\"><img src='img/$language/preview.jpg' border=0></a>";
}
}
echo"</table>";
?>
</body>
</html>
9.15. Fișierul modif_class.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Create Class</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_class.lang"; // configurarile pentru modificare curs
require "cfg/lang/$language/create_class.lang"; // configurarile pentru creare curs
require "lib/ie.lib";
?>
<form method="POST" action="modif_class.phtml?sub=ok&snd=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$class_name_nam :"?></b></font></td>
<td width="85%"><?ie_class_name('class' ,$nam)?></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="30%"></td>
<td width="70%"><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
$dt="teachers/".$nam."/".$class_name;
// afisez toate fisierele din director
$handle=opendir($dt);
$i=0;
while ($file = readdir($handle))
{
if ($file != "." && $file != ".." && $file != "categ")
{
$i++;
$toate[$i]=$file;
}
}
$nrtoate=$i;
echo "<b><font size='4'><u>Files on server<br><br></u></font></b>";
for($x=1; $x<=$nrtoate; $x++)
{
echo "<a href='teachers/$nam/$class_name/$toate[$x]'>$toate[$x]</a><br>";
}
$class="$nam"."_"."$class_name";
$class=strtr($class, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from $class";
$qry=mysql_query($qstr);
$row=mysql_fetch_array($qry);
$classname=$row['classname'];
$classname=strstr($classname, "_"); // tai nuleme profesorului
$classname=strtr($classname, "_", " "); //inlocuiesc '_' cu ' '
$classname=trim($classname); // scot eventualele spatii de la inceput si sfirsit
$bibl=$row['bibname'];
$fis=$row['calefis'];
echo "<hr><form method='POST' action='modif_class.phtml?sub=modif'>";
echo "<input type='hidden' name='class' value='$class'>";
echo "<div align='center'>
<center>
<table border='0' cellpadding='0' cellspacing='0' width='80%'>
<tr>
<td width='15%'><font size='3'><b>$biblio_name_nam :</b></font></td>
<td width='85%'><textarea rows='4' name='biblio_name' cols='30'>$bibl</textarea></td>
</tr>
</table>
<p> </p>
<table border='0' cellpadding='0' cellspacing='0' width='100%'>
<tr>
<td width='30%'></td>
<td width='70%'><input type='submit' value='Submit' name='B1'><input type='reset' value='Reset'name='B2'></td>
</tr>
</table>
</center>
</div>
</form><hr>";
echo "<FORM ENCTYPE='multipart/form-data' ACTION='modif_class.phtml?snd=ok&sub=ok&a=$class_name' METHOD=POST>
<INPUT TYPE='hidden' name='MAX_FILE_SIZE' value='9000000'>
Send this file: <INPUT NAME='userfile' TYPE='file'>
<INPUT TYPE='submit' VALUE='Send File'>
</FORM>";
}
else if ($sub=='modif')
{
$update= "update $class set bibname='$biblio_name'";
$qry=mysql_query($update);
echo "Update complet !!!!";
}
if ($snd=='ok')
{
if ($userfile !="")
{
$dt="teachers/".$nam;
if (!file_exists($dt))
{
mkdir ($dt,07777);
}
$dti="teachers/".$nam."/".$a;
if (!file_exists($dti))
{
mkdir ($dti, 0777);
}
$dti="teachers/".$nam."/".$a;
$dst=$dti."/".$userfile_name;
copy($userfile,$dst);
ie_reload_frame('index_center','modif_class.phtml?sub=modif');
}
}
?>
</body>
</html>
9.16. Fișierul post_msg.phtml
<?
require "cfg/general.conf";
require "cfg/lang/$language/post_msg.lang";
require "lib/ie.lib";
?>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Username</title>
</head>
<body background="img/background.gif">
<div align="center">
<center>
<input type="hidden" name="log">
<form method="POST" action="post_msg.phtml?sub=ok<?echo "&log=$log"?>">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$message_nam:"?></b></font></td>
<td width="85%"><textarea rows="4" name="message" cols="35"></textarea></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="20%"></td>
<td width="80%"><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</form>
</center>
</div>
<?
print"<a href='post_msg_view.phtml?sub=1' onMouseOver=\"self.status='View all entries'\">View all entries</a></p>";
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$zi=date(d);
$luna=date(m);
$an=date(Y);
$data=$zi.'/'.$luna.'/'.$an;
if ($log==stud)
{
$qst="select * from inscrisi where username='$nam'";
$qry=mysql_query($qst);
$row=mysql_fetch_array($qry);
$firstname=$row['first_name'];
$lastname=$row['last_name'];
$log=$log_student;
$qst="insert into ads (username, first_name, last_name, message, data, login) values ('$nam', '$firstname', '$lastname', '$message', '$data', '$log')";
$qry=mysql_query($qst);
}
if ($log==prof)
{
$qst="select * from profesors where username='$nam'";
$qry=mysql_query($qst);
$row=mysql_fetch_array($qry);
$firstname=$row['first_name'];
$lastname=$row['last_name'];
$log=$log_teacher;
$qst="insert into ads (username, first_name, last_name, message, data, login) values ('$nam', '$firstname', '$lastname', '$message', '$data', '$log')";
$qry=mysql_query($qst);
}
}
?>
</body>
</html>
9.17. Fișierul post_msg_view.phtml
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>View</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/post_msg.lang";
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
print"<input type='hidden' name='t'>";
$qst1="select * from ads order by ID desc";
$qry1=mysql_query($qst1);
$nrrow=mysql_num_rows($qry1);
for($i=1; $i<=$nrrow; $i++)
{
$row=mysql_fetch_array($qry1);
$usr[$i]=$row['username'];
$first[$i]=$row['first_name'];
$last[$i]=$row['last_name'];
$msg[$i]=$row['message'];
$msg[$i]=strip_tags($msg[$i]); // scot toate tag-urile HTML
$msg[$i]=nl2br($msg[$i]); //convertesc new line in <br>
$dat[$i]=$row['data'];
$log[$i]=$row['login'];
}
$afis=6;
echo "<table border='1' cellpadding='2' cellspacing='3' width='97%'>";
echo "<tr>";
echo "<td width='10%' align='center'><font size='3'><b>$data_nam</b></font></td>";
echo "<td width='10%' align='center'><font size='3'><b>$log_nam</b></font></td>";
echo "<td width='10%' align='center'><font size='3'><b>$user_nam</b></font></td>";
echo "<td width='15%' align='center'><font size='3'><b>$first_nam</b></font></td>";
echo "<td width='15%' align='center'><font size='3'><b>$last_nam</b></font></td>";
echo "<td width='40%' align='center'><font size='3'><b>$message_nam</b></font></td>";
echo "</tr>";
if ($afis >= $nrrow)
{
$afis=$nrrow;
for($i=1; $i<=$afis; $i++)
{
echo "<tr>";
echo "<td width='10%' align='center'><font size='3'>$dat[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$log[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$usr[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$first[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$last[$i]</font></td>";
echo "<td width='40%' align='left'><font size='3'>$msg[$i]</font></td>";
echo "</tr>";
}
}
else
{
$inf=$t+1;
$sup=$t+$afis;
if($sup>$nrrow)
{
$sup=$nrrow;
}
for($i=$inf; $i<=$sup; $i++)
{
echo "<tr>";
echo "<td width='10%' align='center'><font size='3'>$dat[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$log[$i]</font></td>";
echo "<td width='10%' align='center'><font size='3'>$usr[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$first[$i]</font></td>";
echo "<td width='15%' align='center'><font size='3'>$last[$i]</font></td>";
echo "<td width='40%' align='left'><font size='3'>$msg[$i]</font></td>";
echo "</tr>";
}
$t=$t+$afis;
if ($t<=$afis)
{
print" ";
}
else
{
print"</p><a href='javascript:history.go(-1)' onMouseOver=\"self.status='Preview'\"><img src='img/$language/back.jpg' border=0></a>";
}
if($t>=$nrrow)
{
print" ";
}
else
{
print"<a href='post_msg_view.phtml?t=$t' onMouseOver=\"self.status='Next'\"><img src='img/$language/preview.jpg' border=0></a>";
}
}
echo"</table>";
?>
</body>
</html>
9.18. Fișierul post_list_exam.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>List exams – Teachers</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/list_exam.lang"; // configurarile pentru listare examen
require "lib/ie.lib";
?>
<form method="POST" action="prof_list_exam.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$exam_name_nam :"?></b></font></td>
<td width="85%"><?ie_prof_exam_name('exam_setup', $nam)?></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="30%"></td>
<td width="70%"><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
$exm=strtr($exam_name, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$exm=$nam."_".$exm;
list ($class, $exam) = split ('_', $exam_name); // extrag numele examenului si a cursului
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$temp=$nam."_"."temp";
$qstr="select * from exam_setup where class='$class' and exam='$exam'";
$qry=mysql_query($qstr);
$row=mysql_fetch_array($qry);
$quest_no=$row['question_no'];
$altern=$row['alternative_answer'];
if ($result = mysql_query ("SELECT username FROM $temp"))
{
$qs="drop table $temp";
$qry=mysql_query($qs);
}
$qstr="CREATE TABLE $temp (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), class text, exam text, alternative_answer char(2), quest_no char(4))";
$qry=mysql_query($qstr);
// completez tabelul nou format
$qst="insert into $temp (username, class, exam, alternative_answer, quest_no)
values ('$nam', '$class', '$exam', '$altern', '$quest_no')";
$qry=mysql_query($qst);
ie_reload_frame('index_center','view_exam_prof.phtml');
}
?>
</body>
</html>
9.19. Fișierul setup_exam.phtml
<?
setcookie ("exam");
setcookie ("class");
setcookie ("exam","$exam_name");
setcookie ("cla","$select_class");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Setup exam</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_exam.lang"; // configurarile pentru creare
require "lib/ie.lib";
?>
<form method="POST" action="setup_exam.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="20%"><font size="3"><b><?echo"$select_class_nam :"?></b></font></td>
<td width="80%"><?ie_class('class', $nam)?></td>
</tr>
<tr>
<td width="20%"><font size="3"><b><?echo"$exam_name_nam :"?></b></font></td>
<td width="80%"><input type="text" name="exam_name" size="20"></td>
</tr>
<tr>
<td width="20%"><font size="3"><b><?echo"$max_q_no_nam :"?></b></font></td>
<td width="80%"><select size="1" name="question_no">
<option value="10">10
<option value="20">20
<option value="30">30
<option value="40">40
</select></td>
</tr>
<tr>
<td width="20%"><font size="3"><b><?echo"$max_alter_ans_nam :"?></b></font></td>
<td width="80%"><select size="1" name="alternative_answer">
<option value="3">3
<option value="4">4
<option value="5">5
</select></td>
</tr>
<tr>
<td width="20%"><font size="3"><b><?echo"$time_nam :"?></b></font></td>
<td width="80%"><select size="1" name="time">
<option value="20">20
<option value="30">30
<option value="40">40
</select></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td width="10%"> </td>
<td width="90%"><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
$conn=mysql_connect("$host","$user","$pass"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from exam_setup where exam='$exam_name' and class='$select_class' and username='$nam'";
$qry=mysql_query($qstr);
$rows=mysql_num_rows($qry);
if ($rows==0) // se verifica sa nu mai fie un examen identic pt. acest profesor
{
if ($exam_name !='')
{
$qst="insert into exam_setup (username, class, exam, question_no, alternative_answer, time)
values ('$nam', '$select_class', '$exam_name', '$question_no', '$alternative_answer', '$time')";
$qry=mysql_query($qst);
ie_reload_frame('index_center','create_exam.phtml');
}
else
{
ie_error('ex_examen_name');
}
}
else
{
ie_error('ex_create_exam');
}
}
?>
</body>
</html>
9.20. Fișierul stud_list_class.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Create Class</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_class.lang"; // configurarile pentru modificare curs
require "cfg/lang/$language/list_class.lang"; // configurarile pentru listare curs
require "lib/ie.lib";
?>
<form method="POST" action="stud_list_class.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$class_name_nam :"?></b></font></td>
<td width="85%"><?ie_stud_class_name('class')?></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="30%"></td>
<td width="70%"><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
list ($num, $curs) = split ('_', $class_name); // extrag numele examenului si a cursului
$class=strtr($class_name, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from $class";
$qry=mysql_query($qstr);
$row=mysql_fetch_array($qry);
$classname=$row['classname'];
$classname=strstr($classname, "_"); // tai nuleme profesorului
$classname=strtr($classname, "_", " "); //inlocuiesc '_' cu ' '
$classname=trim($classname); // scot eventualele spatii de la inceput si sfirsit
$bibl=$row['bibname'];
$bibl=nl2br($bibl); //convertesc new line in <br>
$fis=$row['calefis'];
echo "<hr>";
$dt="teachers/".$num."/".$curs;
// afisez toate fisierele din director
$handle=opendir($dt);
$i=0;
while ($file = readdir($handle))
{
if ($file != "." && $file != ".." && $file != "categ")
{
$i++;
$toate[$i]=$file;
}
}
$nrtoate=$i;
echo "<b><font size='4'><u>Files on server<br><br></u></font></b>";
for($x=1; $x<=$nrtoate; $x++)
{
echo "<a href='teachers/$num/$curs/$toate[$x]'>$toate[$x]</a><br>";
}
echo "<hr><div align='center'>
<center>
<table border='0' cellpadding='0' cellspacing='0' width='80%'>
<tr>
<td width='15%'><font size='3'><b>$biblio_name_nam :</b></font></td>
<td width='85%'>$bibl</td>
</tr>
</table>
</center>
</div>
</form>";
}
?>
</body>
</html>
9.21. Fișierul stud_list_exam.phtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Create Class</title>
</head>
<body background="img/background.gif">
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/list_exam.lang"; // configurarile pentru listare examen
require "lib/ie.lib";
?>
<form method="POST" action="stud_list_exam.phtml?sub=ok">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="15%"><font size="3"><b><?echo"$exam_name_nam :"?></b></font></td>
<td width="85%"><?ie_stud_exam_name('exam_setup')?></td>
</tr>
</table>
<p> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="30%"></td>
<td width="70%"><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>
<?
// in cazul in care flagg-ul sub=ok se executa pasii pentru inregistrarea
//informatiilor in tabel
if ($sub==ok)
{
//$class=strtr($exam_name, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
list ($class, $exam) = split ('_', $exam_name); // extrag numele examenului si a cursului
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from exam_setup where class='$class' and exam='$exam'";
$qry=mysql_query($qstr);
$temp="$nam"."_"."temp";
// verific existenta tabelului $temp
if ($result = mysql_query ("SELECT username FROM $temp"))
{
// daca exista $temp, inseamna ca stud. nu a terminat un examen si se continua
ie_reload_frame('index_center','view_exam.phtml?sub=exista');
}
else
{
// daca nu exista $temp, studentul poate sa sustina un examen nou
// extrag informatiile din tabelul exam_setup
$row=mysql_fetch_array($qry);
$classname=$row['class'];
$exam=$row['exam'];
$quest_no=$row['question_no'];
$answ=$row['alternative_answer'];
$time=$row['time'];
$usernam=$row['username'];
// creez tabelul in care se pastreaza evolutia temporara a raspunsurilor studentilor la un examen
$qstr="CREATE TABLE $temp (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), class text, exam text, question_no char(2),
alternative_answer char(2), time char(3))";
$qry=mysql_query($qstr);
// completez tabelul nou format
$qst="insert into $temp (username, class, exam, question_no, alternative_answer, time)
values ('$usernam', '$classname', '$exam', '$quest_no', '$answ', '$time')";
$qry=mysql_query($qst);
ie_reload_frame('index_center','view_exam.phtml?sub=nu_exista');
}
}
?>
</body>
</html>
9.22. Fișierul test_exam.phtml
<?
require "cfg/general.conf"; // fisierul de configurare general
require "lib/ie.lib";
$temp="$nam"."_"."temp";
echo "$temp";
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
if ($result = mysql_query ("SELECT username FROM $temp"))
{
// daca exista $temp, inseamna ca stud. nu a terminat un examen si se continua
ie_reload_frame('index_center','view_exam.phtml?sub=exista');
}
else
{
// daca nu exista $temp, studentul poate sa sustina un examen nou
ie_reload_frame('index_center','stud_list_exam.phtml');
}
?>
9.23. Fișierul view_exam.phtml
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_class.lang"; // configurarile pentru modificare curs
require "cfg/lang/$language/list_class.lang"; // configurarile pentru listare curs
require "lib/ie.lib";
$temp="$nam"."_"."temp";
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$qstr="select * from $temp";
$qry=mysql_query($qstr);
$row=mysql_fetch_array($qry);
$classname=$row['class'];
$exam=$row['exam'];
$quest_no=$row['question_no'];
$altern=$row['alternative_answer'];
$time=$row['time'];
$usernam=$row['username'];
$tim=1000*$time; //se transforma sec. in milcrosec.
//verific daca studentul este inscris in aceasta clasa
$clasa=$usernam."_".$classname."_class";
$clasa=strtr($clasa, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$qftr="select * from $clasa where username='$nam'";
$qfy=mysql_query($qftr);
$rows_f=mysql_num_rows($qfy);
if ($rows_f > 0)
{
$exm="$usernam"."_"."$classname"."_"."$exam";
$exm=strtr($exm, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
if ($sub1 !='next')
{
if ($sub=='exista')
{
$rows=mysql_num_rows($qry);
$nr_crt=$rows-1;
$inreg=$rows-1;
}
else
{
}
}
$nr_crt++;
$inreg++;
}
else if ($rows_f==0)
{
$qtr="select * from $clasa";
$qty=mysql_query($qtr);
$nr_rows=mysql_num_rows($qty);
if ($nr_rows < 25)
// daca sunt inscrisi mai putin de 25 studenti se permite o noua inscriere
{
$exm="$usernam"."_"."$classname"."_"."$exam";
$exm=strtr($exm, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
if ($sub1 !='next')
{
if ($sub=='exista')
{
$rows=mysql_num_rows($qry);
$nr_crt=$rows-1;
$inreg=$rows-1;
}
else
{
}
}
$nr_crt++;
$inreg++;
$qyr="select * from inscrisi where username='$nam'";
$qyt=mysql_query($qyr);
$row_s=mysql_fetch_array($qyt);
$first=$row_s['first_name'];
$last=$row_s['last_name'];
$qst="insert into $clasa (username, first, last) values ('$nam', '$first', '$last')";
$qys=mysql_query($qyt);
}
else
{
echo "ATENTIE: Nu va mai puteti inscrie, deoarece exista deja 25 de studenti in clasa.<br>";
echo " ";
echo" Va rugam mai reveniti.";
$qs="drop table $temp";
$qry=mysql_query($qs);
exit;
}
//ie_reload_frame('index_center','view_exam.phtml');
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>View exam</title>
<SCRIPT LANGUAGE="JavaScript">
function go() {
open("<?echo"view_exam.phtml?kk=auto&nr_crt=$nr_crt&inreg=$inreg";?>", "index_center");
}
</script>
</head>
<body onLoad="timeout = setTimeout('go()',<?echo"$tim";?>);" background="img/background.gif">
<input type="hidden" name="sub">
<?
if ($kk=='auto')
{
if ($nr_crt<=$quest_no)
{
for ($i=1; $i<=$altern; $i++)
{
$temp="$nam"."_"."temp";
$alter="alter table $temp add cor_$i char(3)";
$qry=mysql_query($alter);
}
if ($altern==3)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3)
values ('$correct_1', '$correct_2', '$correct_3')";
}
}
else if ($altern==4)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3, cor_4)
values ('$correct_1', '$correct_2', '$correct_3', '$correct_4')";
}
}
else if ($altern==5)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3, cor_4, cor_5)
values ('$correct_1', '$correct_2', '$correct_3', '$correct_4', '$correct_5')";
}
}
$qry=mysql_query($qst);
$auto='auto';
ie_afis_exam($altern, $nr_crt, $exm, $inreg,$auto);
}
else
{
// nu mai sunt intrebari
$name=$nam;
end_exam ($exm, $temp, $name);
}
}
else if ($sub1 !='next')
{
if ($sub=='exista')
{
ie_afis_exam($altern, $nr_crt, $exm, $inreg);
}
else
{
ie_afis_exam($altern, $nr_crt, $exm, $inreg);
}
}
else if ($put=='ok')
{
if ($sub1=='next' & $nr_crt<=$quest_no)
{
for ($i=1; $i<=$altern; $i++)
{
$temp="$nam"."_"."temp";
$alter="alter table $temp add cor_$i char(3)";
$qry=mysql_query($alter);
$qtr="select * from $temp";
$qty=mysql_query($qtr);
$rows=mysql_num_rows($qty);
}
if ($altern==3)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3)
values ('$correct_1', '$correct_2', '$correct_3')";
}
}
else if ($altern==4)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3, cor_4)
values ('$correct_1', '$correct_2', '$correct_3', '$correct_4')";
}
}
else if ($altern==5)
{
if ($rows < $nr_crt) // se evita utilizarea butonului Back
{
$qst="insert into $temp (cor_1, cor_2, cor_3, cor_4, cor_5)
values ('$correct_1', '$correct_2', '$correct_3', '$correct_4', '$correct_5')";
}
}
$qry=mysql_query($qst);
ie_afis_exam($altern, $nr_crt, $exm, $inreg);
}
else if ($nr_crt>$quest_no)
{
// nu mai sunt intrebari – partea manuala
$name=$nam;
end_exam ($exm, $temp, $name, $nam);
}
}
?>
</body>
</html>
9.24. Fișierul view_exam_prof.phtml
<?
require "cfg/general.conf"; // fisierul de configurare general
require "cfg/lang/$language/create_class.lang"; // configurarile pentru modificare curs
require "cfg/lang/$language/list_class.lang"; // configurarile pentru listare curs
require "lib/ie.lib";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>View exam – Teacher</title>
</head>
<body background="img/background.gif">
<?
$conn=mysql_connect("$host","$user"); //conectarea la serverul mysql
$database=mysql_select_db("ie"); //conectarea la baza de date "ie"
$temp=$nam."_"."temp";
$qstr="select * from $temp";
$qry=mysql_query($qstr);
$row=mysql_fetch_array($qry);
$username=$row['username'];
$class=$row['class'];
$exam=$row['exam'];
$quest_no=$row['quest_no'];
$altern=$row['alternative_answer'];
$exm=$username."_".$class."_".$exam;
$exm=strtr($exm, " ", "_"); // caracterul spatiu este inlocuit cu, caracterul '_'
$qtr="select * from $exm";
$qty=mysql_query($qtr)
or die ("Query failed!!");
$rows=mysql_num_rows($qty);
if ($sub1 !='next')
{
$nr_crt=1;
$inreg=1;
ie_afis_exam_prof($altern, $nr_crt, $exm, $inreg);
}
else if ($put=='ok')
{
$nr_crt++;
$inreg++;
if ($sub1=='next' & $nr_crt<= $quest_no)
{
if ($altern==3)
{
if ($rows > $inreg-2)
{
// exista inregistrare in tabel
update ($exm, quest, $question, $inreg);
update ($exm, ans_1, $answer_1, $inreg);
update ($exm, ans_2, $answer_2, $inreg);
update ($exm, ans_3, $answer_3, $inreg);
update ($exm, cor_1, $correct_1, $inreg);
update ($exm, cor_2, $correct_2, $inreg);
update ($exm, cor_3, $correct_3, $inreg);
}
else if ($rows <= $inreg)
{
// nu exista inregistrare in tabel
$qst="insert into $exm (username, exam, quest, ans_1, ans_2, ans_3, cor_1, cor_2, cor_3)
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$correct_1', '$correct_2', '$cor
$qry=mysql_query($qst);
}
}
else if ($altern==4)
{
if ($rows > $inreg-2)
{
// exista inregistrare in tabel
update ($exm, quest, $question, $inreg);
update ($exm, ans_1, $answer_1, $inreg);
update ($exm, ans_2, $answer_2, $inreg);
update ($exm, ans_3, $answer_3, $inreg);
update ($exm, ans_4, $answer_4, $inreg);
update ($exm, cor_1, $correct_1, $inreg);
update ($exm, cor_2, $correct_2, $inreg);
update ($exm, cor_3, $correct_3, $inreg);
update ($exm, cor_4, $correct_4, $inreg);
}
else if ($rows <= $inreg)
{
// nu exista inregistrare in tabel
$qst="insert into $exm (username, exam, quest, ans_1, ans_2, ans_3, ans_4, cor_1, cor_2, cor_3, cor_4)
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$answer_4', '$correct_1', '$corr
$qry=mysql_query($qst);
}
}
else if ($altern==5)
{
if ($rows > $inreg-2)
{
// exista inregistrare in tabel
update ($exm, quest, $question, $inreg);
update ($exm, ans_1, $answer_1, $inreg);
update ($exm, ans_2, $answer_2, $inreg);
update ($exm, ans_3, $answer_3, $inreg);
update ($exm, ans_4, $answer_4, $inreg);
update ($exm, ans_5, $answer_5, $inreg);
update ($exm, cor_1, $correct_1, $inreg);
update ($exm, cor_2, $correct_2, $inreg);
update ($exm, cor_3, $correct_3, $inreg);
update ($exm, cor_4, $correct_4, $inreg);
update ($exm, cor_5, $correct_5, $inreg);
}
else if ($rows <= $inreg)
{
// nu exista inregistrare in tabel
$qst="insert into $exm (username, exam, quest, ans_1, ans_2, ans_3, ans_4, ans_5, cor_1, cor_2, cor_3, cor_4,
values ('$nam', '$exam', '$question', '$answer_1', '$answer_2', '$answer_3', '$answer_4', '$answer_5', '$corre
$qry=mysql_query($qst);
}
}
ie_afis_exam_prof($altern, $nr_crt, $exm, $inreg);
}
}
else if ($nr_crt>$quest_no)
{
// nu mai sunt intrebari
$qs="drop table $temp";
$qry=mysql_query($qs);
}
?>
</body>
</html>
9.25. Fișierul cfg/general.conf
<?
// Variabile pentru conectarea la server-ul de mysql
$host=localhost;
$user=root;
$pass='';
//Limba in care se doreste afisarea pe ecran
global $language;
$language=eng; //English=eng, Romania=ro
global $err; // variabila globala pentru tratarea erorilor
global $log; // variabila globala pentru tratarea log-ului
?>
9.26. Fișierul lib/ie.lib
<?
// librarie cu functii utilizate in cadrul programului
function ie_reload_frame ($frame = '', $page = '')
// functia reincarca un frame
{
echo "<script language='JavaScript'>\n";
echo "<!– Reload $frame to $page\n";
echo "parent.$frame.location='$page';\n";
echo "//–>\n";
echo "</script>\n";
}
function ie_error ($msg = '')
// functie pentru tratarea erorilor
{
require "cfg/general.conf";
$err=$msg;
require "./cfg/lang/$language/error.lang";
$l=1;
}
function ie_username ($tabel = '')
// functia creaza un combo 'username' cu valori din tabelul specificat
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$usr[$i]=$row['username'];
}
echo "<select size=1 cols=20 name=username>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$usr[$i]\">$usr[$i]";
}
echo "</select>";
}
function ie_class_name ($tabel = '', &$user_n)
// functia creaza un combo 'class_name' cu valori din tabelul specificat,
// pentru fiecare profesor in parte
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel where username='$user_n'";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$usr[$i]=$row['class'];
}
echo "<select size=1 cols=20 name=class_name>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$usr[$i]\">$usr[$i]";
}
echo "</select>";
}
function ie_stud_class_name ($tabel = '')
// functia creaza un combo 'class_name' cu valori din tabelul specificat,
// pentru studenti
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel order by class";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$clas[$i]=$row['class'];
$usr[$i]=$row['username'];
$qstr="select * from profesors where username='$usr[$i]'";
$qry=mysql_query($qstr);
$rowp=mysql_fetch_array($qry);
$first[$i]=$rowp['first_name'];
$last[$i]=$rowp['last_name'];
$name[$i]="$first[$i]"." "."$last[$i]";
}
echo "<select size=1 cols=20 name=class_name>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$usr[$i]_$clas[$i]\">$clas[$i] by $name[$i]";
}
echo "</select>";
}
function ie_stud_exam_name ($tabel = '')
// functia creaza un combo 'exam_name' cu valori din tabelul specificat,
// pentru studenti
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel order by class";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$exam[$i]=$row['exam'];
$class[$i]=$row['class'];
$usr[$i]=$row['username'];
$qstr="select * from profesors where username='$usr[$i]'";
$qry=mysql_query($qstr);
$rowp=mysql_fetch_array($qry);
$first[$i]=$rowp['first_name'];
$last[$i]=$rowp['last_name'];
$name[$i]="$first[$i]"." "."$last[$i]";
}
echo "<select size=1 cols=20 name=exam_name>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$class[$i]_$exam[$i]\">$exam[$i] – $class[$i] by $name[$i]";
}
echo "</select>";
}
function ie_prof_exam_name ($tabel = '', &$prof)
// functia creaza un combo 'exam_name' cu valori din tabelul specificat,
// pentru profesori
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel where username='$prof' order by class";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$exam[$i]=$row['exam'];
$class[$i]=$row['class'];
$usr[$i]=$row['username'];
$qstr="select * from profesors where username='$usr[$i]'";
$qry=mysql_query($qstr);
$rowp=mysql_fetch_array($qry);
$first[$i]=$rowp['first_name'];
$last[$i]=$rowp['last_name'];
$name[$i]="$first[$i]"." "."$last[$i]";
}
echo "<select size=1 cols=20 name=exam_name>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$class[$i]_$exam[$i]\">$exam[$i] – $class[$i] by $name[$i]";
}
echo "</select>";
}
function ie_class ($tabel = '', &$usr)
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qs="select * from $tabel where username='$usr'";
$qr=mysql_query($qs);
$nr=mysql_num_rows($qr);
if ($nr !=0)
{
for($i=1; $i<=$nr; $i++)
{
$row=mysql_fetch_array($qr);
$clas[$i]=$row['class'];
//$clas[$i]=strstr($clas[$i], "_"); //tai numele profesorului
$clas[$i]=strtr($clas[$i], "_", " "); // inlocuiesc '_' cu ' '
}
echo "<select size=1 cols=20 name=select_class>";
for($i=1; $i<=$nr; $i++)
{
echo"<OPTION value=\"$clas[$i]\">$clas[$i]";
}
echo "</select>";
}
else
{
ie_error('no_class_def');
}
}
function ie_afis (&$altern, &$nr_crt)
// functia realizeaza tabelul de intrebari in functie de parametrii primiti
{
require "cfg/general.conf";
$nr_crt++;
echo "<form method=\"POST\" action=\"create_exam.phtml?put=ok&sub=next&nr_crt=$nr_crt\">";
echo "<div align=\"center\"><center>";
$nr=$nr_crt-1;
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"80%\">
<tr>
<td width=\"20%\"><font size=\"3\"><b>Question no $nr</b></font></td>
<td width=\"80%\"><textarea rows=\"3\" name=\"question\" cols=\"55\"></textarea></td>
</tr>
</table>
<br>";
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"98%\">";
for ($i=1; $i<=$altern; $i++)
{
echo "<tr>
<td width=\"20%\"><font size=\"3\"><b>Answer no $i </b></font></td>
<td width=\"30%\"><input type=\"text\" name=\"answer_$i\" size=\"61\"></td>
<td width=\"25%\" align=\"center\"><b><font size=\"3\">correct</font></b></td>
<td width=\"25%\"><select size=\"1\" name=\"correct_$i\">
<option value=\"Yes\">Yes
<option value=\"No\">No
</select></td>
</tr>";
}
echo "</table>";
echo "</center></div>";
echo "<input type=\"submit\" value=\"Next question\" name=\"B1\"></td>";
$nr_crt++;
return $nr_crt;
}
function ie_afis_exam (&$altern, &$nr_crt, &$exm, &$inreg, &$auto)
// functia creaza formul necesar sustinerii unui examen
{
require "cfg/general.conf";
echo "<form method=\"POST\"action=\"view_exam.phtml?put=ok&sub1=next&nr_crt=$nr_crt&inreg=$inreg&kk=\">";
echo "<div align=\"left\"><left>";
$nr=$nr_crt;
$reg=$inreg-1;
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
//echo "Exm: $exm";
$qtr="select * from $exm order by ID";
$qty=mysql_query($qtr)
or die ("Query failed!!");
mysql_data_seek ($qty, $reg);
$row1=mysql_fetch_array($qty);
for ($i=0; $i<= $altern; $i++)
{
$quest1=$row1['quest'];
$answ1[$i]=$row1['ans_1'];
}
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\width=\"80%\">
<tr>
<td width=\"20%\"><font size=\"4\"><b>Question no $nr: </b></font></td>
<td width=\"80%\"><font size=\"3\"><b>$quest1</b></font></td>
</tr>
</table>
<br>
</left>";
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"98%\">";
for ($i=1; $i<=$altern; $i++)
{
echo "<tr>
<td width=\"10%\"><font size=\"3\"><b>Answer no $i: </b></font></td>
<td width=\"55%\"><font size=\"3\">$answ1[$i]</font></td>
<td width=\"10%\" align=\"center\"><b><font size=\"3\">correct</font></b></td>
<td width=\"30%\"><select size=\"1\" name=\"correct_$i\">
<option value=\"Yes\">Yes
<option value=\"No\">No
</select></td>
</tr>";
}
echo "</table>";
echo "</center></div>";
echo "<input type=\"submit\" value=\"Next question\" name=\"B1\"></td>";
$nr_crt++;
$inreg++;
return $inreg and $nr_crt;
}
function ie_afis_exam_prof (&$altern, &$nr_crt, &$exm, &$inreg, &$auto)
// functia creaza formul necesar modificarii unui examen
{
require "cfg/general.conf";
echo "<form method=\"POST\"action=\"view_exam_prof.phtml?put=ok&sub1=next&nr_crt=$nr_crt&inreg=$inreg\">";
echo "<div align=\"left\"><left>";
$nr=$nr_crt;
$reg=$inreg-1;
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qtr="select * from $exm order by ID";
$qty=mysql_query($qtr)
or die ("Query failed!");
$rows=mysql_num_rows($qty);
if ($rows > $reg)
{
mysql_data_seek ($qty, $reg);
$row1=mysql_fetch_array($qty);
$quest=$row1['quest'];
$ans_1=$row1['ans_1'];
$ans_2=$row1['ans_2'];
$ans_3=$row1['ans_3'];
$ans_4=$row1['ans_4'];
$ans_5=$row1['ans_5'];
$cor_1=$row1['cor_1'];
$cor_2=$row1['cor_2'];
$cor_3=$row1['cor_3'];
$cor_4=$row1['cor_4'];
$cor_5=$row1['cor_5'];
}
for ($i=0; $i<= $altern; $i++)
{
$quest1=$row1['quest'];
$answ1[$i]=$row1['ans_1'];
}
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"80%\">
<tr>
<td width=\"20%\"><font size=\"3\"><b>Question no $nr</b></font></td>
<td width=\"80%\"><textarea rows=\"3\" name=\"question\" cols=\"55\">$quest</textarea></td>
</tr>
</table>
<br>";
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"98%\">";
for ($i=1; $i<=$altern; $i++)
{
$an=ans."_".$i;
$answ=$$an;
$co=cor."_".$i;
$corect=$$co;
if ($corect=='Yes')
{
echo "<tr>
<td width=\"20%\"><font size=\"3\"><b>Answer no $i </b></font></td>
<td width=\"30%\"><input type=\"text\" name=\"answer_$i\" value=\"$answ\" size=\"61\"></td>
<td width=\"25%\" align=\"center\"><b><font size=\"3\">correct</font></b></td>
<td width=\"25%\"><select size=\"1\" name=\"correct_$i\">
<option selected value=\"Yes\">Yes
<option value=\"No\">No
</select></td>
</tr>";
}
else if ($corect=='No')
{
echo "<tr>
<td width=\"20%\"><font size=\"3\"><b>Answer no $i </b></font></td>
<td width=\"30%\"><input type=\"text\" name=\"answer_$i\" value=\"$answ\" size=\"61\"></td>
<td width=\"25%\" align=\"center\"><b><font size=\"3\">correct</font></b></td>
<td width=\"25%\"><select size=\"1\" name=\"correct_$i\">
<option value=\"Yes\">Yes
<option selected value=\"No\">No
</select></td>
</tr>";
}
else if ($corect=="")
{
echo "<tr>
<td width=\"20%\"><font size=\"3\"><b>Answer no $i </b></font></td>
<td width=\"30%\"><input type=\"text\" name=\"answer_$i\" value=\"$answ\" size=\"61\"></td>
<td width=\"25%\" align=\"center\"><b><font size=\"3\">correct</font></b></td>
<td width=\"25%\"><select size=\"1\" name=\"correct_$i\">
<option value=\"Yes\">Yes
<option value=\"No\">No
</select></td>
</tr>";
}
}
echo "</table>";
echo "</center></div>";
echo "<input type=\"submit\" value=\"Next question\" name=\"B1\"></td>";
echo "</form>";
$nr_crt++;
$inreg++;
return $inreg and $nr_crt;
}
function end_exam (&$exam_name, &$temp, &$name, &$stud)
// functia verifica raspunsurile de la un examen si le inscrie in tabelul fiecarui student
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qtr="select * from $exam_name"; //tabelul de examen
$qty=mysql_query($qtr);
$row=mysql_fetch_array($qty);
$rows=mysql_num_rows($qty);
for ($i=0; $i<$rows; $i++)
{
mysql_data_seek ($qty, $i);
$row=mysql_fetch_array($qty);
$rasp_c_1[$i]=$row['cor_1'];
$rasp_c_2[$i]=$row['cor_2'];
$rasp_c_3[$i]=$row['cor_3'];
$rasp_c_4[$i]=$row['cor_4'];
$rasp_c_5[$i]=$row['cor_5'];
}
$qfr="select * from $temp"; //tabelul temp al studentului
$qfy=mysql_query($qfr);
$row1=mysql_fetch_array($qfy);
$rows1=mysql_num_rows($qfy);
$ex=$row1['exam'];
$cl=$row1['class'];
$user=$row1['username'];
for ($i=1; $i<$rows1; $i++)
{
mysql_data_seek ($qfy, $i);
$row1=mysql_fetch_array($qfy);
$rasp_s_1[$i]=$row1['cor_1'];
$rasp_s_2[$i]=$row1['cor_2'];
$rasp_s_3[$i]=$row1['cor_3'];
$rasp_s_4[$i]=$row1['cor_4'];
$rasp_s_5[$i]=$row1['cor_5'];
}
for ($i=0; $i<=$rows1; $i++)
{
if ($rasp_c_1[$i]!="" and $rasp_s_1[$i+1]!="" and $rasp_c_2[$i]!="" and $rasp_s_2[$i+1]!="" and $rasp_c_3[$i]!="" and
{
if ($rasp_c_1[$i]==$rasp_s_1[$i+1] and $rasp_c_2[$i]==$rasp_s_2[$i+1] and $rasp_c_3[$i]==$rasp_s_3[$i+1])
{
$total++;
}
}
}
$create="create table $name (total char(3), exam char(50), class char(50), prof char(50), nota char (3), data char(20))";
$qry=mysql_query($create);
$zi=date(d);
$luna=date(m);
$an=date(Y);
$data=$zi.'/'.$luna.'/'.$an;
$qfr="select * from exam_setup where username='$user' and class='$cl' and exam='$ex'"; //tabelul exam_setup
$qfy=mysql_query($qfr);
$row1=mysql_fetch_array($qfy);
$quest=$row1['question_no'];
$nota=(10/$quest)*$total+1;
$qst="insert into $name (total, exam, class, prof, nota, data)
values ('$total', '$ex', '$cl', '$user', '$nota', '$data')";
$qry=mysql_query($qst);
// verific daca studentul a promovat sau nu examenul sustinut
if ($nota >= 5) // studentul a promovat daca nota este mai mare sau egala cu 5
{
$qfr="select * from inscrisi where username='$stud'";
$qfy=mysql_query($qfr);
$row2=mysql_fetch_array($qfy);
$first=$row2['first_name'];
$last=$row2['last_name'];
//echo "$last";
// scriu in tabelul promovati
$qst="insert into promovati (username, first, last, exam, class, prof, nota, data)
values ('$stud', '$first', '$last', '$ex', '$cl', '$user', '$nota', '$data')";
$qry=mysql_query($qst);
// eliberez locul din clasa
$clasa=$user."_".$cl."_class";
$qsu="delete from $clasa where username='$stud'";
$qry=mysql_query($qsu);
}
else if ($nota < 5) // studentul nu a promovat examenul
{
// verific daca a sustinut examenul de 2 ori
$qvr="select * from $stud where exam='$ex' and class='$cl' and prof='$user'";
$qvy=mysql_query($qvr);
$rows_v=mysql_num_rows($qvy);
if ($rows_v >=2)
{
//studentul a sustinut al 2 examen la aceeasi materie
// eliberez locul din clasa
$clasa=$user."_".$cl."_class";
$qsu="delete from $clasa where username='$stud'";
$qry=mysql_query($qsu);
}
}
$qs="drop table $temp";
$qry=mysql_query($qs);
ie_reload_frame('index_center','index_center.phtml');
}
function update (&$exm, $row, &$row_set, &$inreg)
// face update pe un tabel
{
require "cfg/general.conf";
$conn=mysql_connect("$host","$user","$pass");
$database=mysql_select_db("ie");
$qst="update $exm set $row='$row_set' where ID=$inreg-1";
$qry=mysql_query($qst);
}
?>
9.27. Fișierul templates/ie.templ
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>IE Templates</title>
<csscriptdict>
<script><!–
CSStopExecution = false;
CSInit = new Array;
function CSScriptInit() {
if(typeof(skipPage) != "undefined") { if(skipPage) return; }
idxArray = new Array;
for(var i=0;i<CSInit.length;i++)
idxArray[i] = i;
CSAction2(CSInit, idxArray);
}
CSAg = window.navigator.userAgent; CSBVers = parseInt(CSAg.charAt(CSAg.indexOf("/")+1),10);
function IsIE() { return CSAg.indexOf("MSIE") > 0;}
function CSIEStyl(s) { return document.all.tags("div")[s].style; }
function CSNSStyl(s) { return CSFindElement(s,0); }
function CSFindElement(n,ly) { if (CSBVers < 4) return document[n];
var curDoc = ly ? ly.document : document; var elem = curDoc[n];
if (!elem) { for (var i=0;i<curDoc.layers.length;i++) {
elem = CSFindElement(n,curDoc.layers[i]); if (elem) return elem; }}
return elem;
}
function CSClickReturn () {
var bAgent = window.navigator.userAgent;
var bAppName = window.navigator.appName;
if ((bAppName.indexOf("Explorer") >= 0) && (bAgent.indexOf("Mozilla/3") >= 0) && (bAgent.indexOf("Mac") >= 0))
return true; // dont follow link
else return false; // dont follow link
}
function CSButtonReturn () {
var bAgent = window.navigator.userAgent;
var bAppName = window.navigator.appName;
if ((bAppName.indexOf("Explorer") >= 0) && (bAgent.indexOf("Mozilla/3") >= 0) && (bAgent.indexOf("Mac") >= 0))
return false; // follow link
else return true; // follow link
}
CSIm = new Object();
function CSIShow(n,i) {
if (document.images) {
if (CSIm[n]) {
var img = (!IsIE()) ? CSFindElement(n,0) : document[n];
if (img && typeof(CSIm[n][i].src) != "undefined") {img.src = CSIm[n][i].src;}
if(i != 0)
self.status = CSIm[n][3];
else
self.status = " ";
return true;
}
}
return false;
}
function CSILoad(action) {
im = action[1];
if (document.images) {
CSIm[im] = new Object();
for (var i=2;i<5;i++) {
if (action[i] != '') { CSIm[im][i-2] = new Image(); CSIm[im][i-2].src = action[i]; }
else CSIm[im][i-2] = 0;
}
CSIm[im][3] = action[5];
}
}
CSStopExecution = false;
function CSAction(array) {
return CSAction2(CSAct, array);
}
function CSAction2(fct, array) {
var result;
for (var i=0;i<array.length;i++) {
if(CSStopExecution) return false;
var actArray = fct[array[i]];
if(actArray == null) return false;
var tempArray = new Array;
for(var j=1;j<actArray.length;j++) {
if((actArray[j] != null) && (typeof(actArray[j]) == "object") && (actArray[j].length == 2)) {
if(actArray[j][0] == "VAR") {
tempArray[j] = CSStateArray[actArray[j][1]];
}
else {
if(actArray[j][0] == "ACT") {
tempArray[j] = CSAction(new Array(new String(actArray[j][1])));
}
else
tempArray[j] = actArray[j];
}
}
else
tempArray[j] = actArray[j];
}
result = actArray[0](tempArray);
}
return result;
}
CSAct = new Object;
// –></script>
</csscriptdict>
9.28. Fișierul templates/index_admin.templ
<?
require "cfg/lang/$language/index.lang";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Add teacher',/*URL*/'<? echo "img/"; echo "$language"; echo"/add_teacher.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/add_teacher_push.gif"; ?>',/*URL*/'','<? echo "$but1_admin" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Delete teacher',/*URL*/'<? echo "img/"; echo "$language"; echo"/delete_teacher.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/delete_teacher_push.gif"; ?>',/*URL*/'','<? echo "$but2_admin" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Button',/*URL*/'<? echo "img/"; echo "$language"; echo"/view_logs.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/view_logs_push.gif"; ?>',/*URL*/'','<? echo "$but3_admin" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Log out',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out_push.gif"; ?>',/*URL*/'','<? echo "$but4_admin" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/add_teacher_push.gif";?>" st="<? echo "$but1_admin" ?>"><a href="add_prof.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Add teacher',1)" onmouseout="return CSIShow(/*CMP*/'Add teacher',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/add_teacher.gif"; ?>" width="141" height="28" name="Add teacher" border="0" alt="<? echo "$but1_admin" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/delete_teacher_push.gif"; ?>" st="<? echo "$but2_admin" ?>"><a href="del_prof.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Delete teacher',1)" onmouseout="return CSIShow(/*CMP*/'Delete teacher',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/delete_teacher.gif"; ?>" width="141" height="28" name="Delete teacher" border="0" alt="<? echo "$but2_admin" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/view_logs_push.gif"; ?>" st="<? echo "$but3_admin" ?>"><a href="#" onmouseover="return CSIShow(/*CMP*/'Button',1)" onmouseout="return CSIShow(/*CMP*/'Button',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/view_logs.gif"; ?>" width="141" height="28" name="Button" border="0" alt="<? echo "$but3_admin" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_out_push.gif"; ?>" st="<? echo "$but4_admin" ?>"><a href="./log_out.phtml" onmouseover="return CSIShow(/*CMP*/'Log out',1)" onmouseout="return CSIShow(/*CMP*/'Log out',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_out.gif"; ?>" width="141" height="28" name="Log out" border="0" alt="<? echo "$but4_admin" ?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.29. Fișierul templates/index_prof.templ
<?
require "cfg/lang/$language/index.lang";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Classes-Exams',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_exames.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_exames_push.gif"; ?>',/*URL*/'','<? echo "$but1_prof" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Utilities',/*URL*/'<? echo "img/"; echo "$language"; echo"/utilities.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/utilities_push.gif"; ?>',/*URL*/'','<? echo "$but2_prof" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Class Ads',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_ads.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_ads_push.gif"; ?>',/*URL*/'','<? echo "$but3_prof" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Chat',/*URL*/'<? echo "img/"; echo "$language"; echo"/chat.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/chat_push.gif"; ?>',/*URL*/'','<? echo "$but4_prof" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Log-out',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out_push.gif";?>',/*URL*/'','<? echo "$but5_prof" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/class_exames_push.gif"; ?>" st="<? echo "$but1_prof" ?>"><a href="index_left.phtml?res=login&in=prof-class" target="index_left" onmouseover="return CSIShow(/*CMP*/'Classes-Exams',1)" onmouseout="return CSIShow(/*CMP*/'Classes-Exams',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/class_exames.gif"; ?>" width="141" height="28" name="Classes-Exams" border="0" alt="<? echo "$but1_prof" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/utilities_push.gif"; ?>" st="<? echo "$but2_prof" ?>"><a href="index_left.phtml?res=login&in=prof-utils" target="index_left" onmouseover="return CSIShow(/*CMP*/'Utilities',1)" onmouseout="return CSIShow(/*CMP*/'Utilities',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/utilities.gif";?>" width="141" height="28" name="Utilities" border="0" alt="<? echo "$but2_prof" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/class_ads_push.gif"; ?>" st="<? echo "$but3_prof" ?>"><a href="post_msg.phtml?log=prof" target="index_center" onmouseover="return CSIShow(/*CMP*/'Class Ads',1)" onmouseout="return CSIShow(/*CMP*/'Class Ads',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/class_ads.gif";?>" width="141" height="28" name="Class Ads" border="0" alt="<? echo "$but3_prof" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/chat_push.gif";?>" st="<? echo "$but4_prof" ?>"><a href="./chat/index.php3" target="_new" onmouseover="return CSIShow(/*CMP*/'Chat',1)" onmouseout="return CSIShow(/*CMP*/'Chat',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/chat.gif";?>" width="141" height="28" name="Chat" border="0" alt="<? echo "$but4_prof" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_out_push.gif";?>" st="<? echo "$but5 _prof" ?>"><a href="./log_out.phtml" onmouseover="return CSIShow(/*CMP*/'Log-out',1)" onmouseout="return CSIShow(/*CMP*/'Log-out',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_out.gif";?>" width="141" height="28" name="Log-out" border="0" alt="<? echo "$but5_prof" ?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.30. Fișierul templates/index_prof_class.templ
<?
require "cfg/lang/$language/index.lang";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'New class',/*URL*/'<? echo "img/"; echo "$language"; echo"/new_class.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/new_class_push.gif";?>',/*URL*/'','<? echo "$but1_prof_class" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Modify classes',/*URL*/'<? echo "img/"; echo "$language"; echo"/mod_class.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/mod_class_push.gif";?>',/*URL*/'','<? echo "$but2_prof_class" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'New exam',/*URL*/'<? echo "img/"; echo "$language"; echo"/new_exam.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/new_exam_push.gif";?>',/*URL*/'','<? echo "$but3_prof_class" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Modify exam',/*URL*/'<? echo "img/"; echo "$language"; echo"/mod_exam.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/mod_exam_push.gif";?>',/*URL*/'','<? echo "$but4_prof_class" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Back',/*URL*/'<? echo "img/"; echo "$language"; echo"/back.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/back_push.gif";?>',/*URL*/'','<? echo "$but5_prof_class" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/new_class_push.gif";?>" st="<? echo "$but1_prof_class" ?>"><a href="create_class.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'New class',1)" onmouseout="return CSIShow(/*CMP*/'New class',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/new_class.gif";?>" width="141" height="28" name="New class" border="0" alt="<? echo "$but1_prof_class" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/mod_class_push.gif";?>" st="<? echo "$but2_prof_class" ?>"><a href="modif_class.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Modify classes',1)" onmouseout="return CSIShow(/*CMP*/'Modify classes',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/mod_class.gif";?>" width="141" height="28" name="Modify classes" border="0" alt="<? echo "$but2_prof_class" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/new_exam_push.gif";?>" st="<? echo "$but3_prof_class" ?>"><a href="setup_exam.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'New exam',1)" onmouseout="return CSIShow(/*CMP*/'New exam',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/new_exam.gif";?>" width="141" height="28" name="New exam" border="0" alt="<? echo "$but3_prof_class" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/mod_exam_push.gif";?>" st="<? echo "$but4_prof_class" ?>"><a href="prof_list_exam.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Modify exam',1)" onmouseout="return CSIShow(/*CMP*/'Modify exam',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/mod_exam.gif";?>" width="141" height="28" name="Modify exam" border="0" alt="<? echo "$but4_prof_class" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/back_push.gif";?>" st="<? echo "$but5_prof_class" ?>"><a href="index_left.phtml?res=login&in=prof" target="index_left" onmouseover="return CSIShow(/*CMP*/'Back',1)" onmouseout="return CSIShow(/*CMP*/'Back',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/back.gif";?>" width="141" height="28" name="Back" border="0" alt="<? echo "$but5_prof_class" ?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.31. Fișierul templates/index_prof_utils.templ
<?
require "cfg/lang/$language/index.lang";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Search student',/*URL*/'<? echo "img/"; echo "$language"; echo"/search_student.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/search_student_push.gif";?>',/*URL*/'','<? echo "$but1_prof_utils" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Delete student',/*URL*/'<? echo "img/"; echo "$language"; echo"/delete_student.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/delete_student_push.gif";?>',/*URL*/'','<? echo "$but2_prof_utils" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Back',/*URL*/'<? echo "img/"; echo "$language"; echo"/back.gif";?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/back_push.gif";?>',/*URL*/'','<? echo "$but3_prof_utils" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/search_student_push.gif";?>" st="<? echo "$but1_prof_utils" ?>"><a href="find_stud.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Search student',1)" onmouseout="return CSIShow(/*CMP*/'Search student',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/search_student.gif";?>" width="141" height="28" name="Search student" border="0" alt="<? echo "$but1_prof_utils" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/delete_student_push.gif";?>" st="<? echo "$but2_prof_utils" ?>"><a href="del_stud.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'Delete student',1)" onmouseout="return CSIShow(/*CMP*/'Delete student',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/delete_student.gif";?>" width="141" height="28" name="Delete student" border="0" alt="<? echo "$but2_prof_utils" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/back_push.gif";?>" st="$but3_prof_utils"><a href="index_left.phtml?res=login&in=prof" target="index_left" onmouseover="return CSIShow(/*CMP*/'Back',1)" onmouseout="return CSIShow(/*CMP*/'Back',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/back.gif";?>" width="141" height="28" name="Back" border="0" alt="<? echo "$but3_prof_utils";?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.32. Fișierul templates/index_stud.templ
<?
require "cfg/lang/$language/index.lang";
?>
<csactiondict>
<script><!–
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'List classes',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_classes.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_classes_push.gif" ?>',/*URL*/'','<? echo "$but1_stud" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'List exams',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_exams.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_exams_push.gif"; ?>',/*URL*/'','<? echo "$but2_stud" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'List rezultates',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_rezultates.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/list_rezultates_push.gif"; ?>',/*URL*/'','<? echo "$but3_stud" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Class ads',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_ads.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/class_ads_push.gif"; ?>',/*URL*/'','<? echo "$but4_stud" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Chat',/*URL*/'<? echo "img/"; echo "$language"; echo"/chat.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/chat_push.gif"; ?>',/*URL*/'','<? echo "$but5_stud" ?>');
CSInit[CSInit.length] = new Array(CSILoad,/*CMP*/'Log out',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out.gif"; ?>',/*URL*/'<? echo "img/"; echo "$language"; echo"/log_out_push.gif"; ?>',/*URL*/'','<? echo "$but6_stud" ?>');
// –></script>
</csactiondict>
</head>
<body bgcolor="#A8A8A8" onload="CSScriptInit();">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/list_classes_push.gif"; ?>" st="<? echo "$but1_stud" ?>"><a href="stud_list_class.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'List classes',1)" onmouseout="return CSIShow(/*CMP*/'List classes',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/list_classes.gif"; ?>" width="141" height="28" name="List classes" border="0" alt="<? echo "$but1_stud" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/list_exams_push.gif"; ?>" st="<? echo "$but2_stud" ?>"><a href="test_exam.phtml" target="index_center" onmouseover="return CSIShow(/*CMP*/'List exams',1)" onmouseout="return CSIShow(/*CMP*/'List exams',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/list_exams.gif"; ?>" width="141" height="28" name="List exams" border="0" alt="<? echo "$but2_stud" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/list_rezultates_push.gif"; ?>" st="<? echo "$but3_stud" ?>"><a href="list_stud_exam.phtml?tip=student" target="index_center" onmouseover="return CSIShow(/*CMP*/'List rezultates',1)" onmouseout="return CSIShow(/*CMP*/'List rezultates',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/list_rezultates.gif"; ?>" width="141" height="28" name="List rezultates" border="0" alt="<? echo "$but3_stud" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/class_ads_push.gif"; ?>" st="<? echo "$but4_stud" ?>"><a href="post_msg.phtml?log=stud" target="index_center" onmouseover="return CSIShow(/*CMP*/'Class ads',1)" onmouseout="return CSIShow(/*CMP*/'Class ads',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/class_ads.gif"; ?>" width="141" height="28" name="Class ads" border="0" alt="<? echo "$but4_stud" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/chat_push.gif"; ?>" st="<? echo "$but5_stud" ?>"><a href="./chat/index.php3" target="_new" onmouseover="return CSIShow(/*CMP*/'Chat',1)" onmouseout="return CSIShow(/*CMP*/'Chat',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/chat.gif"; ?>" width="141" height="28" name="Chat" border="0" alt="<? echo "$but5_stud" ?>"></a></csobj></td>
</tr>
<tr>
<td><csobj w="141" h="28" t="Button" ht="<? echo "img/"; echo "$language"; echo"/log_out_push.gif"; ?>" st="<? echo "$but6_stud" ?>"><a href="./log_out.phtml" onmouseover="return CSIShow(/*CMP*/'Log out',1)" onmouseout="return CSIShow(/*CMP*/'Log out',0)" onclick="return CSButtonReturn()"><img src="<? echo "img/"; echo "$language"; echo"/log_out.gif"; ?>" width="141" height="28" name="Log out" border="0" alt="<? echo "$but6_stud" ?>"></a></csobj></td>
</tr>
</table>
</body>
</html>
9.33. Fișierul chat/index.php3
<?php
$u="$nam";
require("config/config.lib.php3");
require("config/languages/".c_lang_file);
require("lib/config.lib.php3");
require("lib/db.lib.php3");
require("lib/clean.lib.php3");
if(isset($e) && $e != "")
{
$temp = new db;
$temp->query("delete from ".c_usr_tbl." where user like '$u' and room like '$e'");
}
if(isset($u))
{
if($u != "")
{
$temp = new db;
$temp->query("select user from ".c_usr_tbl." where user like '$u'");
if($temp->num_rows() > 0)
{
$error = l_err_usr_1;
}
setcookie("cookieusername", $u, time() + 60*60*24*365); // cookie expires in one year
$cookieusername = $u;
}
else
{
$error = l_err_usr_2;
}
}
if(!isset($error))
{
$r2 = ereg_replace("[ ,;*]", "_", $r2);
if(($r0 != "" || $r1 != "" || $r2 != "") && $n != "")
{
if($r2 != "")
{
$r = htmlentities($r2);
$liste = new db;
$liste->query("select distinct type from ".c_msg_tbl." where room like '$r'");
if($liste->num_rows() > 0)
{
list($t) = $liste->next_record();
}
}
else
{
$t = 1;
$r = htmlentities(($r0 != "") ? $r0 : $r1);
}
setcookie("cookieroom", $r, time() + 60*60*24*365); // cookie expires in one year
$cookieroom = $r;
setcookie("cookieroomtype", $t, time() + 60*60*24*365); // cookie expires in one year
$cookieroomtype = $t;
?>
<html>
<head>
<title><?php echo($appname." ".$appversion); ?></title>
</head>
<frameset cols="*,130" border=0>
<frameset rows="*,50" border=0>
<frame src="messages.php3?<?php echo("u=$u&r=$r&d=$d&n=$n"); ?>" name="messages" marginwidth=3 marginheight=3>
<frame src="input.php3?<?php echo("u=$u&r=$r&t=$t"); ?>" name="input" marginwidth=0 marginheight=0 scrolling="no" noresize>
</frameset>
<frameset rows="*,50" border=0>
<frame src="users.php3?<?php echo("u=$u&r=$r&t=$t&d=$d&n=$n"); ?>" name="users" marginwidth=3 marginheight=3>
<frame src="link.php3" name="link" marginwidth=0 marginheight=0>
</frameset>
</frameset>
</html>
<?php
exit;
}
}
?>
<html>
<head>
<title><?php echo($appname." ".$appversion); ?></title>
<link rel="stylesheet" href="config/style.css" type="text/css">
<script language="javascript">
<!–
function users_popup()
{
window.open("users_popup.php3","users_popup","width=180,height=300,scrollbars=yes,resizable=yes");
}
// –>
</script>
</head>
<body>
<center>
<form action="index.php3" method=post>
<span class=title><?php echo($appname." ".$appversion); ?></span>
<p>
<?php echo(l_wel_1." ".c_msg_del. " ".l_mins);?>
<p>
<?php
$defaultroomfound = 0;
$liste = new db;
if($liste->query("select distinct user from ".c_usr_tbl." order by user"))
{
$nb = $liste->num_rows();
echo(l_cur_1." <a href=\"javascript:users_popup();\">".$nb." ".($nb > 1 ? l_users : l_user)."</a> ".l_cur_2."<p>");
}
if(isset($error))
{
echo("<p><span class=error>$error</span></p>");
}
?>
<table border=0 cellpadding=3 class=table>
<tr>
<td align=center>
<table border=0>
<tr>
<th colspan=2 class=tabtitle><?php echo(l_set_1); ?></th>
</tr>
<tr>
<td valign=top>
<input type=hidden name="u" size=11 maxlength=10 value="<?php echo($cookieusername); ?>">
</td>
</tr>
<tr>
<td align=right valign=top><?php echo(l_set_3); ?> :</td>
<td valign=top>
<select name="n">
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20" selected>20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="70">70</option>
<option value="100">100</option>
</select>
</td>
</tr>
<tr>
<td align=right valign=top><?php echo(l_set_4); ?> :</td>
<td valign=top>
<select name="d">
<option value="3">3 <?php echo(l_secs); ?></option>
<option value="5">5 <?php echo(l_secs); ?></option>
<option value="10" selected>10 <?php echo(l_secs); ?></option>
<option value="15">15 <?php echo(l_secs); ?></option>
<option value="30">30 <?php echo(l_secs); ?></option>
<option value="60">1 <?php echo(l_min); ?></option>
<option value="120">2 <?php echo(l_mins); ?></option>
<option value="180">3 <?php echo(l_mins); ?></option>
</select>
</td>
</tr>
<tr>
<td colspan=2> </td>
</tr>
<tr>
<th colspan=2 class=tabtitle><?php echo(l_set_5); ?></th>
</tr>
<tr>
<td align=right valign=top><?php echo(l_set_6); ?> :</td>
<td valign=top>
<select name="r0">
<option value=""><?php echo(l_set_7); ?></option>
<?php
$defaultroomsstring = "#";
for($i = 0; $i < count($defaultchatrooms); $i++)
{
$tmproom = ereg_replace("[ ,;*]", "_", $defaultchatrooms[$i]);
$defaultroomsstring .= htmlentities($tmproom)."#";
echo("<option value=\"".htmlentities($tmproom)."\"");
if(htmlentities($tmproom) == $cookieroom)
{
echo(" selected");
$defaultroomfound = 1;
}
echo(">".$tmproom."</option>");
}
?>
</select>
</td>
</tr>
<tr>
<td align=right valign=top><?php echo(l_set_8); ?> :</td>
<td valign=top>
<select name="r1">
<option value=""><?php echo(l_set_7); ?></option>
<?php
$liste = new db;
$liste->query("select distinct room from ".c_msg_tbl." where type = 1 order by room");
while(list($room) = $liste->next_record())
{
if(!ereg("#${room}#", $defaultroomsstring))
{
echo("<option value=\"${room}\"");
if(htmlentities($room) == $cookieroom && $defaultroomfound == 0)
{
echo(" selected");
$defaultroomfound = 1;
}
echo(">${room}</option>");
}
}
?>
</select>
</td>
</tr>
<tr>
<td align=right valign=top>
<?php echo(l_set_9." "); ?>
<select name="t">
<option value="1" <?php if($cookieroomtype == 1 && $defaultroomfound == 0) echo("selected"); ?>><?php echo(l_set_10); ?></option>
<option value="0" <?php if($cookieroomtype == 0 && $defaultroomfound == 0) echo("selected"); ?>><?php echo(l_set_11); ?></option>
</select>
<?php echo(" ".l_set_12); ?> :
</td>
<td valign=top>
<input type="text" name="r2" size=11 maxlength=10 <?php if($defaultroomfound == 0) echo("value=\"${cookieroom}\""); ?>>
</td>
</tr>
</table>
<p>
<?php echo(l_set_13." "); ?>
<input type="submit" value="<?php echo(l_set_14); ?>"> …
</td>
</tr>
</table>
<span class="copy">
© 2000 chira dinu alexandru –
<?php echo($appname); ?>
</span>
</form>
</center>
</body>
</html>
9.33. Fișierul chat/input.php3
<?php
require("config/config.lib.php3");
require("config/languages/".c_lang_file);
require("lib/config.lib.php3");
require("lib/db.lib.php3");
require("lib/clean.lib.php3");
if(trim($m) != "")
{
$m = ereg_replace("&", "&", htmlspecialchars($m));
// smileys
$m = ereg_replace(":\)", "<img src=\"images/smile1.gif\" width=15 height=15 alt=\":)\">", $m);
$m = ereg_replace(":d", "<img src=\"images/smile2.gif\" width=15 height=15 alt=\":d\">", $m);
$m = ereg_replace(":o", "<img src=\"images/smile3.gif\" width=15 height=15 alt=\":o\">", $m);
$m = ereg_replace(":\(", "<img src=\"images/smile4.gif\" width=15 height=15 alt=\":(\">", $m);
$m = ereg_replace(";)", "<img src=\"images/smile5.gif\" width=15 height=15 alt=\";)\">", $m);
$m = ereg_replace(":p", "<img src=\"images/smile6.gif\" width=15 height=15 alt=\":p\">", $m);
$m = ereg_replace("8)", "<img src=\"images/smile7.gif\" width=15 height=15 alt=\"8)\">", $m);
$m = ereg_replace(":\?", "<img src=\"images/smile8.gif\" width=15 height=22 alt=\":?\">", $m);
// images
if(ereg("#img[[:space:]]+([[:alnum:]/:-_.]+)", $m, $regsimg))
{
$m = ereg_replace($regsimg[0], "<img src=\"".$regsimg[1]."\">", $m);
}
// links
if(ereg("#link[[:space:]]+([[:alnum:]=?#/:-_.]+)[[:space:]]+(.+)[[:space:]]+#/link", $m, $regslnk))
{
$m = ereg_replace($regslnk[0], "<a href=\"".$regslnk[1]."\" target=_blank>".$regslnk[2]."</a>", $m);
}
$m = "<font color=\"".$c."\">".$m."</font>";
$temp = new db;
$temp->query("insert into ".c_msg_tbl." (type, room, user, time, message) values ($t, '$r', '$u', ".time().", '$m')");
}
function addcolor($name, $code)
{
global $c;
echo("<option value=\"".$code."\"");
if($c == $code) echo(" selected");
echo(">".$name."</option>");
}
?>
<html>
<head>
<title><?php echo($appname); ?></title>
<link rel="stylesheet" href="config/style.css" type="text/css">
</head>
<body class=frame>
<form name="form" action="input.php3" method=post>
<input type="hidden" name="u" value="<?php echo($u); ?>">
<input type="hidden" name="r" value="<?php echo($r); ?>">
<input type="hidden" name="t" value="<?php echo($t); ?>">
<input type="text" name="m" size="50" maxlength="299">
<select name="c">
<?php
while(list($colorname, $colorcode) = each($defaulttextcolors))
{
addcolor($colorname, $colorcode);
}
?>
</select>
<input type="submit" value="ok">
</form>
<?php
if(trim($m) != "")
{
?>
<script language="javascript">
<!–
if (navigator.appversion.substring(0,1) > 3)
{
document.form.m.focus();
parent.messages.location = parent.messages.document.url;
}
// –>
</script>
<?php
}
?>
</body>
</html>
9.34. Fișierul chat/messages.php3
<?php
require("config/config.lib.php3");
require("config/languages/".c_lang_file);
require("lib/config.lib.php3");
require("lib/db.lib.php3");
require("lib/clean.lib.php3");
?>
<html>
<head>
<meta http-equiv="expires" content="sun, 28 dec 1997 09:32:45 gmt">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="refresh" content="<?php echo($d); ?>; url=messages.php3?<?php echo("u=$u&r=$r&d=$d&n=$n"); ?>">
<title><?php echo($appname); ?></title>
<link rel="stylesheet" href="config/style.css" type="text/css">
</head>
<body class=mainframe>
<?php
$lastmaj = new db;
if($lastmaj->query("select * from ".c_usr_tbl." where room like '$r' and user like '$u'"))
{
if($lastmaj->num_rows() > 0)
{
$lastmaj->query("update ".c_usr_tbl." set time = ".time()." where room like '$r' and user like '$u'");
}
else
{
$lastmaj->query("insert into ".c_usr_tbl." (room, user, time) values ('$r', '$u', ".time().")");
}
}
$messages = new db;
if($messages->query("select time, user, message from ".c_msg_tbl." where room like '$r' order by time desc"))
{
if($messages->num_rows() > 0)
{
$nb = 0;
while((list($time, $user, $message) = $messages->next_record()) && ($nb < $n))
{
$nb++;
echo("<p class=msg><span class=time>".date("h\hi", $time)."</span> <b>[{$user}]</b> ${message}</p>");
}
}
else
{
echo("no message …");
}
}
?>
</body>
</html>
9.35. Fișierul chat/users.php3
<?php
require("config/config.lib.php3");
require("config/languages/".c_lang_file);
require("lib/config.lib.php3");
require("lib/db.lib.php3");
require("lib/clean.lib.php3");
?>
<html>
<head>
<meta http-equiv="expires" content="sun, 28 dec 1997 09:32:45 gmt">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="refresh" content="30; url=users.php3?<?php echo("u=$u&r=$r&t=$t&d=$d&n=$n"); ?>">
<title><?php echo($appname); ?></title>
<link rel="stylesheet" href="config/style.css" type="text/css">
<script type="text/javascript" language="javascript">
<!–
function users_popup()
{
window.open("users_popup.php3","users_popup","width=180,height=300,scrollbars=yes,resizable=yes");
}
function userclick(user)
{
var msgbox = top.input.window.document.form.m;
msgbox.value = user + "> " + msgbox.value;
msgbox.focus();
}
function clickhandler()
{
var targetid, srcelement, targetelement;
srcelement = window.event.srcelement;
if(srcelement.classname == "room")
{
targetid = srcelement.id + "_d";
targetelement = document.all(targetid);
if (targetelement.style.display == "none")
{
targetelement.style.display = "";
srcelement.src = "images/open.gif";
}
else
{
targetelement.style.display = "none";
srcelement.src = "images/closed.gif";
}
}
}
document.onclick = clickhandler;
// –>
</script>
</head>
<body class=frame>
<center>
<a href="index.php3?<?php echo("u=$u&e=$r"); ?>" target="_top"><?php echo(l_exit); ?></a>
<p>
<a href="javascript:users_popup();"><?php echo(l_detach); ?></a>
</center>
<p>
<?php
echo("<b>$r</b>");
$users = new db;
$users->query("select user from ".c_usr_tbl." where room like '$r' order by user");
echo("<span class=small> (".$users->num_rows().")</span><br>");
while(list($user) = $users->next_record())
{
if($user != $u)
{
echo("- <a href=\"javascript:userclick('$user');\" class=user>$user</a><br>");
}
else
{
echo("- $user<br>");
}
}
?>
</p>
<?php
$others = new db;
$others->query("select distinct room from ".c_msg_tbl." where room not like '$r' and type = 1 order by room");
if($others->num_rows() > 0)
{
while(list($other) = $others->next_record())
{
$othersusers = new db;
$othersusers->query("select user from ".c_usr_tbl." where room like '$other' order by user");
if($othersusers->num_rows() > 0)
{
echo("<img class=\"room\" id=\"${other}\" src=\"images/closed.gif\" style=\"cursor: hand\" width=11 height=9>");
echo("<a href=\"index.php3?u=$u&r1=$other&t=$t&d=$d&n=$n&e=$r\" target=\"_top\">$other</a><span class=small> (".$othersusers->num_rows().")</span><br>");
echo("<span id=\"${other}_d\" style=\"display: none\">");
while(list($otheruser) = $othersusers->next_record())
{
echo("- $otheruser<br>");
}
echo("<p></p></span>");
}
}
}
?>
</p>
</body>
</html>
9.36. Fișierul chat/users_popup.php3
<?php
require("config/config.lib.php3");
require("config/languages/".c_lang_file);
require("lib/config.lib.php3");
require("lib/db.lib.php3");
require("lib/clean.lib.php3");
?>
<html>
<head>
<meta http-equiv="expires" content="sun, 28 dec 1997 09:32:45 gmt">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="refresh" content="30; url=users_popup.php3">
<?php
$rooms = new db;
$rooms->query("select distinct u.room from ".c_usr_tbl." u, ".c_msg_tbl." m where u.room like m.room and m.type = 1");
$nbrooms = $rooms->num_rows();
$users = new db;
$users->query("select distinct u.user from ".c_usr_tbl." u, ".c_msg_tbl." m where u.room like m.room and m.type = 1");
$nbusers = $users->num_rows();
if($nbusers > 0)
{
echo("<title>".$nbusers." ".($nbusers > 1 ? l_users : l_user)."/".$nbrooms." ".($nbrooms > 1 ? l_rooms : l_room)."</title>");
}
else
{
echo("<title>".l_no_user."</title>");
}
?>
<link rel="stylesheet" href="config/style.css" type="text/css">
<script type="text/javascript" language="javascript">
<!–
function clickhandler()
{
var targetid, srcelement, targetelement;
srcelement = window.event.srcelement;
if(srcelement.classname == "room")
{
targetid = srcelement.id + "_d";
targetelement = document.all(targetid);
if (targetelement.style.display == "none")
{
targetelement.style.display = "";
srcelement.src = "images/open.gif";
}
else
{
targetelement.style.display = "none";
srcelement.src = "images/closed.gif";
}
}
}
document.onclick = clickhandler;
// –>
</script>
</head>
<body class=frame>
<center><a href="index.php3" target="_blank"><?php echo(l_chat); ?></a></center>
<p>
<?php
if($users->num_rows() > 0)
{
$others = new db;
$others->query("select distinct room from ".c_msg_tbl." where type = 1 order by room");
if($others->num_rows() > 0)
{
while(list($other) = $others->next_record())
{
$othersusers = new db;
$othersusers->query("select user from ".c_usr_tbl." where room like '$other' order by user");
if($othersusers->num_rows() > 0)
{
echo("<img class=\"room\" id=\"${other}\" src=\"images/".($nbusers > 10 ? "closed" : "open").".gif\" style=\"cursor: hand\" width=11 height=9>");
echo("<b>$other</b><span class=small> (".$othersusers->num_rows().")</span><br>");
echo("<span id=\"${other}_d\" style=\"display: ".($nbusers > 10 ? "none" : "")."\">");
while(list($otheruser) = $othersusers->next_record())
{
echo("- $otheruser<br>");
}
echo("<p></p></span>");
}
}
}
}
else
{
echo(l_no_user);
}
?>
</p>
</body>
</html>
9.37. Fișierul chat/lib/clean.lib
<?php
$chat = new db;
$chat->query("delete from ".c_msg_tbl." where time < ".(time() – c_msg_del * 60));
$chat->query("delete from ".c_usr_tbl." where time < ".(time() – c_usr_del * 60));
?>
9.38. Fișierul chat/lib/db.lib
<?php
class db
{
var $host = c_db_host; // hostname of our mysql server
var $database = c_db_name; // logical database name on that server
var $user = c_db_user; // database user
var $password = c_db_pass; // database user's password
var $link_id = 0; // result of mysql_connect()
var $query_id = 0; // result of most recent mysql_query()
var $record = array(); // current mysql_fetch_array()-result
var $row; // current row number
var $errno = 0; // error state of query
var $error = "";
function halt($msg)
{
echo("</td></tr></table><b>database error:</b> $msg<br>\n");
echo("<b>mysql error</b>: $this->errno ($this->error)<br>\n");
die("session halted.");
}
function connect()
{
if($this->link_id == 0)
{
$this->link_id = mysql_connect($this->host, $this->user, $this->password);
if (!$this->link_id)
{
$this->halt("link_id == false, connect failed");
}
$selectresult = mysql_select_db($this->database, $this->link_id);
if(!$selectresult)
{
$this->errno = mysql_errno($this->link_id);
$this->error = mysql_error($this->link_id);
$this->halt("cannot select database <i>".$this->database."</i>");
}
}
}
function query($query_string)
{
$this->connect();
$this->query_id = mysql_query($query_string,$this->link_id);
$this->row = 0;
$this->errno = mysql_errno();
$this->error = mysql_error();
if (!$this->query_id)
{
$this->halt("invalid sql: ".$query_string);
}
return $this->query_id;
}
function next_record()
{
$this->record = mysql_fetch_array($this->query_id);
$this->row += 1;
$this->errno = mysql_errno();
$this->error = mysql_error();
$stat = is_array($this->record);
if (!$stat)
{
mysql_free_result($this->query_id);
$this->query_id = 0;
}
return $this->record;
}
function seek($pos)
{
$status = mysql_data_seek($this->query_id, $pos);
if ($status) $this->row = $pos;
return;
}
function num_rows()
{
return mysql_num_rows($this->query_id);
}
function num_fields()
{
return mysql_num_fields($this->query_id);
}
function field_value($name)
{
return $this->record[$name];
}
function affected_rows()
{
return @mysql_affected_rows($this->link_id);
}
}
?>
9.39. Fișierul chat/config/config.lib
<?php
define("C_LANG_FILE", "english.lang.php3");
define("C_DB_HOST", "localhost");
define("C_DB_NAME", "ie");
define("C_DB_USER", "root");
define("C_DB_PASS", "");
define("C_MSG_TBL", "messages");
define("C_USR_TBL", "users");
define("C_MSG_DEL", 30);
define("C_USR_DEL", 1);
$DefaultChatRooms = array("Public", "Default");
$DefaultTextColors = array( "Black" => "#000000",
"Red" => "#FF0000",
"Green" => "#009900",
"Blue" => "#0000FF",
"Purple" => "#990099",
"Dark red" => "#990000",
"Dark green" => "#006600",
"Dark blue" => "#000099",
"Maroon" => "#996633",
"Aqua blue" => "#006699");
?>
9.40. Fișierul admin_table/chat_mesages.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE messages (
type tinyint(4) DEFAULT '0' NOT NULL,
room text NOT NULL,
user text NOT NULL,
time int(11) DEFAULT '0' NOT NULL,
message longtext NOT NULL
)";
$qry=mysql_query($qstr);
?>
9.41. Fișierul admin_table/chat_users.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE users (
room text NOT NULL,
user text NOT NULL,
time int(11) DEFAULT '0' NOT NULL
)";
$qry=mysql_query($qstr);
?>
9.42. Fișierul admin_table/create_add_prof.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE profesors (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), password char(15), first_name char(25),
last_name char(25), email char(20), specialty char(30), address text)";
$qry=mysql_query($qstr);
?>
9.43. Fișierul admin_table/create_admin.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE admin (username char(10), password char(15))";
$qry=mysql_query($qstr);
?>
9.44. Fișierul admin_table/create_class_name.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE class (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), class text, username char(10))";
$qry=mysql_query($qstr);
?>
9.45. Fișierul admin_table/create_exam_setup.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE exam_setup (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), class text, exam text, question_no char(2),
alternative_answer char(2), time char(3))";
$qry=mysql_query($qstr);
?>
9.46. Fișierul admin_table/create_inscriere.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE inscrisi (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), password char(15), first_name char(25),
last_name char(25), email char(20), address text, zi char(2), luna char(20),
an char(4))";
$qry=mysql_query($qstr);
?>
9.47. Fișierul admin_table/create_post_msg.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE ads (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID), username char(10), first_name char(25), last_name char(25), message text, data char(10), login char(25))";
$qry=mysql_query($qstr);
?>
9.48. Fișierul admin_table/create_promovati.phtml
<?
$conn=mysql_connect("localhost","root");
$database=mysql_select_db("ie");
$qstr="CREATE TABLE promovati (ID int(8) NOT NULL AUTO_INCREMENT, PRIMARY
KEY(ID), username char(10), first char(25), last char(25),
exam char(40), class char(40),
prof char(40), nota char(3), data char(18))";
$qry=mysql_query($qstr);
?>
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: . Educatie Interactiva Utilizand Php Ul (ID: 148966)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
