Politechnika Częstochowska Wydział Inżynierii Mechanicznej i Informatyki Projektowanie systemów użytkowych II Zdalny wybór Prac Dyplomowych Diana Kisiała Tomasz Jewiarz Jacek Kucharzewski Informatyka, gr.i rok V Częstochowa 2006/2007
Założenia systemu Celem projektu jest zbudowanie aplikacji internetowej pozwalającej na zdalny wybór tematów prac dyplomowych oraz zdalną komunikację Student Promotor. System powinien pozwalać: Studentowi na: o Założenie własnego konta o Przeglądanie listy promotorów wraz z propozycją ich tematów o Rezerwowanie wybranego tematu o Komunikację z promotorem z interfejsu serwisu Promotorowi na : o Dodawanie oraz edycje tematów prac dyplomowych o Edycję swoich danych o Komunikację ze studentem z interfejsu serwisu o Dodawanie i edycję terminów prac dyplomowych Dziekanatowi na : o Dodawanie i edycję kont ze szczególnym uwzględnieniem konta promotora o Aktywacja konta studenta 2
Przypadki użycia 3
Opis przypadków użycia: 1. Przypadek użycia: Logowanie 1.1. Opis Logowanie umożliwia użytkownikowi wejście do zaawansowanych funkcji systemu w zależności od praw jakie otrzyma może wykonywać różnego rodzaju operacje na swoim koncie. Z logowania korzystają wszyscy aktorzy w systemie : Dziekanat, Student i Promotor. 1.2. Przepływ zdarzeń Przypadek użycia rozpoczyna się w momencie gdy użytkownik otworzy stronę główną serwisu 1.2.1.1.System wyświetla pusty formularz z 2 polami do wypełnienia : login i hasło 1.2.1.2.Użytkownik uzupełnia login i hasło, a następnie wciska przycisk Zaloguj 1.2.1.3.System weryfikuje dane użytkownika i otwiera stronę z opcjami, z których może korzystać. 1.3. Specjalne wymagania Nie ma specjalnych wymagań 1.4. Warunki początkowe: Przed rozpoczęciem tego przypadku użycia użytkownik zarejestrował się w systemie. 1.5. Warunki końcowe Nie ma żadnych warunków końcowych 1.6. Rozszerzenia Nie ma żadnych rozszerzeń 2. Przypadek użycia : Przeglądanie tematów i promotorów 2.1. Opis: Ten przypadek użycia pozwala studentowi przeglądać propozycje tematów prac dyplomowych oferowanych przez promotorów. Z tego przypadku użycia korzysta aktor : Student 2.2. Przepływ zdarzeń Przypadek użycia rozpoczyna się w momencie gdy Student wybierze z menu opcję Promotorzy i Tematy prac dyplomowych 2.2.1. Tematy prac dyplomowych 2.2.1.1.Student wybiera opcję Promotorzy i Tematy prac dyplomowych 2.2.1.2.System odczytuje dostępną listę promotorów 2.2.1.3.Student wybiera z listy promotora 2.2.1.4.System odczytuje dostępną listę wolnych tematów dla wybranego promotora wraz z informacją o promotorze 2.2.1.5.System wyświetla informacje o wybranym temacie oraz opcję Zarezerwuj temat 2.2.1.6.Student wybiera Zarezerwuj temat 2.2.1.7.System zmienia status tematu z Wolny na Zajęty oraz wysyła wypełniony formularz do promotora z kopią do studenta. 2.3. Specjalne wymagania Nie ma żadnych wymagań. 2.4. Warunki początkowe: Przed rozpoczęciem tego przypadku użycia użytkownik zalogował się w systemie. 4
2.5. Warunki końcowe Nie ma żadnych warunków końcowych 2.6. Rozszerzenia Nie ma żadnych rozszerzeń 3. Przypadek użycia : Dodaj / edytuj temat 3.1. Opis: Ten przypadek użycia pozwala Promotorowi dodać lub edytować istniejący już temat prac dyplomowych. Z tego przypadku użyci korzysta Aktor: Promotor 3.2. Przepływ zdarzeń Przypadek użycia rozpoczyna się w momencie gdy Promotor wybierze z menu opcję Tematy prac dyplomowych 3.2.1. Tematy prac dyplomowych 3.2.1.1.Promotor wybiera opcję Tematy prac dyplomowych 3.2.1.2.System odczytuje dostępną listę tematów z możliwością ich edycji oraz opcją Dodaj nowy temat 3.2.1.3.Promotor wybiera opcję Dodaj nowy temat 3.2.1.4.System wyświetla formularz z następującymi polami do wypełniana : temat pracy, opis tematu. 3.2.1.5.Promotor wypełnia pola, a następnie wciska przycisk Zapisz 3.3. Przepływy alternatywne 3.3.1. Edytuj temat 3.3.1.1.Promotor wybiera opcję Tematy prac dyplomowych 3.3.1.2.System odczytuje dostępną listę tematów z możliwością ich edycji oraz opcją Dodaj nowy temat 3.3.1.3.Promotor wybiera opcję Edytuj temat 3.3.1.4.System wyświetla formularz z następującymi polami do edycji : temat pracy, opis tematu, dla ilu osób temat, specjalne wymagania. 3.3.1.5.Promotor edytuje pola, a następnie wciska przycisk Zapisz 3.4. Specjalne wymagania Promotor może edytować tylko temat, który nie ma statusu Zajęty 3.5. Warunki początkowe: Przed rozpoczęciem tego przypadku użycia użytkownik zalogował się w systemie. 3.6. Warunki końcowe Nie ma żadnych warunków końcowych 3.7. Rozszerzenia Nie ma żadnych rozszerzeń 5
6 Diagram Encji : STUDENT PK studentid Rok Index FK1 SpecjalnoscId Typ FK3 UzytkownicyId FK4 TematId SPECJALNOSC PK specjalnoscid Nazwa FK1 KierunekId TEMATY_PRAC PK tematid Temat Opis Status FK1 PromotorId Zaproponowany WYDZIAL PK wydzialid Nazwa INSTYTUT PK instytutid Nazwa FK1 WydzialId UZYTKOWNICY PK uzytkownikid FK1 RolaId Status Imie Nazwisko Email Login HAslo ROLE PK roleid Nazwa Promotor PK promotorid FK1 UzytkownikId FK2 InstytutId Tytul text OBRONA PK obronaid FK1 TematId Data WIADOMOSC PK wiadomosciid FK1 studentid FK2 PromotorId Tytul Tresc Data kierunek KIERUNEK PK kieerunekid Nazwa FK1 WydzialId
Opis tabel : ROLE Tabela przechowująca informację o rolach jakie użytkownicy mogą spełniać w systemie, na podstawie, których użytkownik dostaje odpowiednie prawa. Np. Dziekanat, Promotor czy Student Struktura tabeli: CREATE TABLE `role` ( `rolaid` int(11) unsigned NOT NULL auto_increment, `nazwa` char(20) default NULL, PRIMARY KEY (`rolaid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; UZYTKOWNICY Tabela zawiera informację o wszystkich użytkownikach systemie. Przechowuje takie dane jak : Imię, Nazwisko, Email, Login, Hasło, informację o tym czy użytkownik jest aktywny w systemie oraz jaką spełnia w nim rolę. Struktura tabeli: CREATE TABLE `uzytkownicy` ( `uzytkownikid` char(32) NOT NULL default '', `rolaid` int(4) default NULL, `imie` char(100) default NULL, `nazwisko` char(100) default NULL, `mail` char(100) default NULL, `login` char(100) default NULL, `haslo` char(100) default NULL, `status` char(1) default NULL, PRIMARY KEY (`uzytkownikid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; STUDENT Tabel ta przechowuje wszystkie informacje odnośnie studentów: Nr indexu, specjalność, typ studiów ( dzienne, zaoczne itp. ) Struktura tabeli: CREATE TABLE `student` ( `studentid` char(32) NOT NULL default '', `uzytkownikid` char(32) default NULL, `indeks` char(10) default NULL, `rok` int(4) default NULL, `wydzial` int(6) default NULL, `kierunek` int(6) default NULL, 7
`specjalnosc` int(6) default NULL, `typ` int(1) default NULL, `promotorid` char(32) default NULL, `tematid` char(32) default NULL, PRIMARY KEY (`studentid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; SPECJALNOSC Tabela przechowująca wszystkie specjalności na uczelni Struktura tabeli: CREATE TABLE `specjalnosc` ( `specjalnoscid` int(6) unsigned NOT NULL auto_increment, `kierunekid` int(6) default NULL, `nazwa` char(150) default NULL, PRIMARY KEY (`specjalnoscid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; KIERUNEK Tabela przechowująca wszystkie kierunki studiów Struktura tabeli: CREATE TABLE `kierunek` ( `kierunekid` int(6) unsigned NOT NULL auto_increment, `wydzialid` int(6) default NULL, `nazwa` char(150) default NULL, PRIMARY KEY (`kierunekid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; WYDZIAL Tabela przechowująca listę wydziałów na uczelni Struktura tabeli: CREATE TABLE `wydzial` ( `wydzialid` int(6) unsigned NOT NULL auto_increment, `nazwa` char(150) default NULL, PRIMARY KEY (`wydzialid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; INSTYTUT Tabela przechowująca wszystkie instytuty na uczelni Struktura tabeli: 8
CREATE TABLE `instytut` ( `instytutid` int(6) unsigned NOT NULL auto_increment, `wydzialid` int(6) default NULL, `nazwa` char(150) default NULL, PRIMARY KEY (`instytutid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; PROMOTOR Tabela zawierająca informację o promotorze tytuł naukowy, krótką informację oraz instytut, w którym pracuje Struktura tabeli: CREATE TABLE `promotor` ( `promotorid` varchar(32) NOT NULL default '', `uzytkownikid` varchar(32) default NULL, `wydzial` int(6) default NULL, `instytut` int(6) default NULL, `tytul` varchar(25) default NULL, `info` text, PRIMARY KEY (`promotorid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; WIADOMOSC Tabela przechowująca wszystkie wiadomości jakie zostały przesłane między użytkownikami. Struktura tabeli: CREATE TABLE `wiadomosc` ( `wiadomoscid` int(11) unsigned NOT NULL auto_increment, `studentid` varchar(32) default NULL, `promotorid` varchar(32) default NULL, `tytul` varchar(150) default NULL, `tresc` text, `kierunek` tinyint(1) default NULL COMMENT '0 - student 1- promotor', `data` varchar(11) default NULL, PRIMARY KEY (`wiadomoscid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; TEMAT_PRAC Tabela przechowująca informację o tematach prac dyplomowych. Zawiera : temat pracy, krótki opis, promotora tematu oraz czy temat jest jeszcze wolny. 9
Struktura tabeli: CREATE TABLE `temat` ( `tematid` int(11) unsigned NOT NULL auto_increment, `temat` varchar(255) default NULL, `opis` text, `status` char(1) default NULL, `promotorid` varchar(32) default NULL, `zaproponowany` varchar(32) default NULL, PRIMARY KEY (`tematid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; OBRONA Tabela zawierająca informację o terminach obrony prac dyplomowych. Struktura tabeli: CREATE TABLE `obrona` ( `obronaid` int(11) unsigned NOT NULL auto_increment, `tematid` int(11) default NULL, `data` date default NULL, PRIMARY KEY (`obronaid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 10
Diagramy czynności: Logowanie: Rys. 1. Diagram czynności - Logowanie 11
Rejestracja studenta : Rys. 2. Diagram czynności Rejestracja Studenta 12
Aktywacja konta Studenta przez administratora: Rys. 3. Diagram czynności Aktywacja konta Studenta 13
Wybór tematu pracy: Rys. 4. Diagram czynności wybór tematu pracy dyplomowej 14
Diagramy komunikacji Zarządzanie wiadomościami: Rys. 6. Diagram komunikacji wybór tematu pracy dyplomowej Proponowanie tematu przez Studenta: Rys. 7. Diagram komunikacji propozycja tematu 15
Realizacja Serwisu: Strona główna: Po wejściu na stronę główną serwisu pojawia się panel logowania, pozwalający na wejście w zaawansowane funkcje serwisu. Rys.8. Panel główny serwisu Dodatkowo, każdy użytkownik niezarejestrowany może dokonać rejestracji wybierając opcję Rejestracja Po wybraniu tej opcji wyświetla się formularz rejestracyjny, który należy wypełnić pola, a następnie wybrać Zarejestruj. Aby można było się zalogować na swoje konto, należy udać się do Dziekanatu w celu weryfikacji danych oraz aktywacji konta. Rejestracja : Rys.9. Formularz rejestracyjny dla Studenta 16
Panel dziekanatu: Panel ten pozwala na zarządzanie Studentami oraz Promotorami. Zarządzanie Studentami : Rys.10. Panel główny Dziekanatu Po wybraniu z menu opcji Studenci wyświetla się lista wszystkich zarejestrowanych studentów. Użytkownik Dziekanat może aktywować nowo powstałe konto oraz usunąć konto nieaktywne z różnych przyczyn : np. dane studenta są niezgodne z prawdą, student nie zgłosił się w przeciągu 7 dni z prośbą o aktywację konta itp. Lista Studentów : Rys.11. Lista studentów 17
Jedną z głównych funkcji Dziekanatu jest rejestracja nowych Promotorów oraz zarządzanie już istniejącymi. Zarządzanie Promotorami : Rys. 12. Zarządzanie promotorami W celu rejestracji nowego promotora należy wybrać opcję Promotorzy, a następnie Dodaj promotora. Następnie wypełnić formularz i wybrać opcję Zarejestruj Dodawanie nowego Promotora : Rys. 13. Formularz do rejestracji nowego Promotora 18
Po rejestracji nowy Promotor pojawi się na Liście Promotorów : Lista Promotorów : Rys. 14. Lista promotorów 19
Konto Promotora : Każdy Promotor po zalogowaniu się na swoje konto może : Przejrzeć listę Studentów piszących u niego pracę Zmienić swoje dane Wysłać wiadomość do swoich Studentów Dodać nowy temat Pracy Dyplomowej Przyjąć oraz zatwierdzić temat przysłany przez Studenta Rys.15. Panel główny Promotora Zarządzanie tematami : Każdy Promotor może edytować swoje tematy prac dyplomowych. W tym celu należy wybrać opcję Prace dyplomowe, a następnie pojawi się Panel, w którym można dodać nową propozycję tematu, wyświetlić tematy tuż istniejące oraz zedytować je. Tematy posortowane są według następujących kategorii : Aktualne czyli wszystkie te, które są w trakcie pisania przez Studentów Moje propozycje czyli propozycje tematów Promotora Propozycje studentów czyli wszystkie propozycje tematów przyslane przez Studentów, które może zatwierdzić bądź odrzucić Archiwum czyli wszystkie tematy po obronie. 20
Rys.16. dodawanie nowego tematu. Dodawanie daty obrony : W momencie zatwierdzenia daty obrony pracy dyplomowej Promotor może wprowadzić termin w panelu. Rys.17. Dodawanie terminu obrony pracy 21
Panel wiadomości : Jedną z ważniejszych opcji panelu jest możliwość komunikacji pomiędzy Studentem a Promotorem. Panel Wiadomości pozwala na wysłanie wiadomości do pojedynczego Studenta z listy Studentów, którzy są zapisani do danego Promotora. Aby przejrzeć listę wiadomości należy wybrać opcję Wiadomości. Następnie z wybieralnych list można wybrać następujące opcje : Wiadomości odebrane Wiadomości wysłane Wiadomości od konkretnego Studenta lub wszystkich Studentów Rys.18. Obsługa wiadomości 22
Panel Studenta : Student po rejestracji i aktywacji swojego konta, może się zalogować do swojego panelu, w którym jako pierwszą z opcji, która może wybrać, pojawi się możliwość wybrania promotora oraz tematu pracy. Rys. 19. Panel główny Studenta Wybór tematu: Aby wybrać temat należy wybrać opcję Wybierz promotora oraz temat pracy dyplomowej. Następnie pojawi się panel,w którym można przejrzeć wszystkie wolne tematy wybranych promotorów. Każdy temat zawiera krótki opis czego dotyczy oraz opcję Zarezerwuj. Jeżeli Student posiada swój własny temat, który chce zaproponować wybranemu Promotorowi może wybrać opcję Zaproponuje własny temat, a następnie wprowadzić wszystkie potrzebne informacje: temat, opis oraz wysłać do Promotora. 23
Rys. 20. Lista tematów Panel Studenta po wyborze tematu : Po wybraniu tematu w panelu Studenta pojawiają się nowa opcja: możliwość wysyłania i odbierania wiadomości do swojego Promotora. Rys. 21. Wiadomości 24
Przykład rozwiązania Klasa do obsługi Tematów: <?PHP /**yo4cms Zdalny system wyboru pracy dyplomowej * @author Tomasz Jewiarz Diana Kisiała Jacek Kucharzewski * @version 1.0 */ /**Temat klasa sluzaca do zarzadzania tematem pracy * */ class Temat { var $DB; var $temat; /**Page(&$DB) * Konstruktor * @param &$DB - wskaznik na obiekt polaczenia z baza danych */ function Temat(&$DB) { $this->db = &$DB; $this->temat=array(); /**listatematow($idpromotor) * Tworzy tablice z informacjami o tematach proponowanych przez promotora * @param $idpromotor */ function listatematow($idpromotor){ $i=0; $sql="select * FROM ".TABDB_TEMAT." WHERE promotorid like '".$idpromotor."' AND status like 'p' AND zaproponowany is null ORDER BY temat ASC"; $l=0; $wynik = $this->db->query($sql); while($wiersz = $wynik- >fetchrow(db_fetchmode_assoc)){ $this->temat[$l]['tematid']=$wiersz['tematid']; $this->temat[$l]['temat']=$wiersz['temat']; $this->temat[$l]['opis']=$wiersz['opis']; $this->temat[$l]['promotorid']=$idpromotor; $l++; 25
/**listatematow2($idpromotor,$status) * Tworzy tablice z informacjami o tematach przypisanych do promotora * z wyroznieniem na status tematu * @param $idpromotor * @param $status 0 - temat realizowany * 1 - temat proponowany przez promotora * 2 - temat proponowany przez studenta * 3 - tamat archiwalny */ function listatematow2($idpromotor,$status){ $i=0; switch($status){ case '0':$status='z';break; case '1':$status='p';break; case '2':$status='s';break; case '3':$status='a';break; if($status=='z' or $status=='s'){ $q=""; else{ $q=" AND zaproponowany is null "; $sql="select * FROM ".TABDB_TEMAT." WHERE promotorid like '".$idpromotor."' AND status like '".$status."' ".$q." ORDER BY temat ASC"; $l=0; $wynik = $this->db->query($sql); while($wiersz = $wynik- >fetchrow(db_fetchmode_assoc)){ $this->temat[$l]['tematid']=$wiersz['tematid']; $this->temat[$l]['temat']=$wiersz['temat']; $this->temat[$l]['opis']=$wiersz['opis']; $this->temat[$l]['promotorid']=$idpromotor; if($status=='z' or $status=='a' or $status=='s'){ $sql2="select * FROM ".TABDB_STUDENT." a, ".TABDB_UZYTKOWNICY." b WHERE tematid like '".$wiersz['tematid']."' AND a.uzytkownikid like b.uzytkownikid";//echo $sql; $wynik2 = $this->db->query($sql2); $wiersz2 = $wynik2- >fetchrow(db_fetchmode_assoc); 26
$this- >temat[$l]['studentid']=$wiersz2['studentid']; $this->temat[$l]['imie']=$wiersz2['imie']; $this- >temat[$l]['nazwisko']=$wiersz2['nazwisko']; $this->temat[$l]['rok']=$wiersz2['rok']; $data=$this->db->getone("select data FROM ".TABDB_OBRONA." WHERE tematid=".$wiersz['tematid'].""); if($data){ $this->temat[$l]['data']=$data; else{ $this->temat[$l]['data']='0000-00-00'; $l++; /**listamoichpropozycji($idstudent) * Tworzy liste propozycji tematow studenta * @param $idstudent * @return $l - ilosc propozycji studenta */ function listamoichpropozycji($idstudent){ $i=0; $sql="select * FROM ".TABDB_TEMAT." a, ".TABDB_PROMOTOR." b, ".TABDB_UZYTKOWNICY." c WHERE a.promotorid like b.promotorid AND b.uzytkownikid like c.uzytkownikid AND a.status like 'p' AND a.zaproponowany like '".$idstudent."' ORDER BY a.temat ASC"; //echo $sql; $l=0; $wynik = $this->db->query($sql); while($wiersz = $wynik- >fetchrow(db_fetchmode_assoc)){ $this->temat[$l]['tematid']=$wiersz['tematid']; $this->temat[$l]['temat']=$wiersz['temat']; $this->temat[$l]['opis']=$wiersz['opis']; $this- >temat[$l]['promotorid']=$wiersz['promotorid']; $this->temat[$l]['promotor']=$wiersz['tytul'].' '.$wiersz['nazwisko'].' '.$wiersz['imie']; $this->temat[$l]['studentid']=$idstudent; $l++; return $l; 27
/**rezerwuj($idtemat,$idstudent,$idpromotor) * Rezerwuje temat pracy * @param $idtemat * @param $idstudent * @param $idpromotor * @return 1 - zarezerwowano 0 - nie zarezerwowano */ function rezerwuj($idtemat,$idstudent,$idpromotor){ $sql="select status FROM ".TABDB_TEMAT." WHERE tematid=".$idtemat.""; if('p'==$this->db->getone($sql)){ $this->db->query("update ".TABDB_TEMAT." SET status='z' WHERE tematid=".$idtemat.""); $this->db->query("update ".TABDB_STUDENT." SET promotorid =".$idpromotor.", tematid =".$idtemat." WHERE studentid like '".$idstudent."'"); return 1; else{ return 0; /**zglospropozycje($idstudent,$idpromotor,$tytul,$opis) * student zglasza propozycje tematu * @param $idstudent * @param $idpromotor * @param $tytul * @param $opis * @return 1 */ function zglospropozycje($idstudent,$idpromotor,$tytul,$opis){ $fields_values = array( 'temat' => securitytxt($tytul), 'opis' => securitytxt($opis), 'status' => 's', 'promotorid' => $idpromotor, 'zaproponowany' => $idstudent ); $this->db->autoexecute(tabdb_temat, $fields_values, DB_AUTOQUERY_INSERT); $sql="select tematid FROM ".TABDB_TEMAT." WHERE status like 's' AND zaproponowany like '".$idstudent."'"; $tematid=$this->db->getone($sql); $this->db->query("update ".TABDB_STUDENT." SET tematid =".$tematid." WHERE studentid like '".$idstudent."'"); return 1; 28
/**saveedit($idtemat,$tytul,$opis) * zapisuje zmiany tematu po edycji * @param $idtemat * @param $tytul * @param $opis * @return 1 */ function saveedit($idtemat,$tytul,$opis){ $fields_values = array( 'temat' => securitytxt($tytul), 'opis' => securitytxt($opis) ); $this->db->autoexecute(tabdb_temat, $fields_values, DB_AUTOQUERY_UPDATE,"tematId=".$idtemat); return 1; /**savenew($idpromotor,$tytul,$opis) * Dodanie nowego tematu przez promotora * @param $idpromotor * @param $tytul * @param $opis * @return 1 */ function savenew($idpromotor,$tytul,$opis){ $fields_values = array( 'temat' => securitytxt($tytul), 'opis' => securitytxt($opis), 'status' => 'p', 'promotorid' => $idpromotor ); $this->db->autoexecute(tabdb_temat, $fields_values, DB_AUTOQUERY_INSERT); return 1; /**delete($tematid) * Usuwa temat * @param $tematid * @return 1 */ function delete($tematid){ $this->db->query("delete FROM ".TABDB_TEMAT." WHERE tematid =".$tematid); return 1; /**savedata($tematid,$data) * zapisuje date obrony pracy 29
* @param $tematid * @param $data * @return 1 */ function savedata($tematid,$data){ $ile=$this->db->getone("select count(obronaid) FROM ".TABDB_OBRONA." WHERE tematid=".$tematid.""); if($ile==1){ $fields_values = array( 'data' => $data ); $this->db->autoexecute(tabdb_obrona, $fields_values, DB_AUTOQUERY_UPDATE,"tematId=".$tematId); elseif($ile==0){ $fields_values = array( 'tematid' => $tematid, 'data' => $data ); $this->db->autoexecute(tabdb_obrona, $fields_values, DB_AUTOQUERY_INSERT);?> 30