plik artykuly_class.inc.php
<?php /* @Projekt: System Ocen Artykułów @Plik: artykuly_class.inc.php @Opis: Obłsuga i zarządzanie artykułami @Data: 12 maj 2005 @Autor: Marcin Bancerz @Inne: Praca zaliczeniowa z przedmiotu P.S.I. */ // klasa class artykuly { var $artykul; // zmienna do tablicy danych atrykulu // konstruktor klasy (PHP4) function artykuly() { $this->artykul['aid'] = 0; // id artykulu $this->artykul['uid'] = 0; // id uzytkownika $this->artykul['a_tytul'] = ''; // tytul artykulu $this->artykul['a_tresc'] = ''; // tresc artykulu $this->artykul['a_data'] = ''; // data i czas dodania artykulu $this->artykul['a_ocena'] = 0; // laczna srednia ocen arykulu } // funkcja ustawia wartosc dla zmiennej function SetValue($zmienna,$wartosc) { $this->artykul[$zmienna] = $wartosc; } // funkcja pobiera wartosc dla zmiennej function GetValue($zmienna) { return $this->artykul[$zmienna]; } // funkcja ustawia wartosci dla calego artykulu function SetArticle($aid = '',$uid,$a_tytul,$a_tresc,$a_data,$a_ocena) { $this->SetValue('aid',$aid); $this->SetValue('uid',$uid); $this->SetValue('a_tytul',$a_tytul); $this->SetValue('a_tresc',$a_tresc); $this->SetValue('a_data',$a_data); $this->SetValue('a_ocena',$a_ocena); } // funkcja laczy sie z baza danych, pobiera wskazany artykul i ustawia zmienne function GetArticle($aid) { // polaczenie z baza $db = new db(); // pobiera zawartosc danego artykulu $db->DoSql(\"SELECT * FROM artykuly WHERE a_id=$aid\"); $res = $db->Result(); // pobiera sume ocen komentarzy $db->DoSql(\"SELECT SUM(a_ocena) FROM komentarze WHERE a_id='$aid'\"); $res2 = $db->Result(); // pobiera ilosc komentarzy odnoszacych sie do artykulu $db->DoSql(\"SELECT k_id FROM komentarze WHERE a_id='$aid'\"); $res3 = $db->Result(); // wyliczanie sredniej $suma = $res2[0]; $ilosc = $res3[0]; if ((!$suma==0)or(!$ilosc==0)) $ocena = $suma/$ilosc; else $ocena = 0; // ustawienie wartosci zmiennych $this->SetArticle($res[0],$res[1],$res[2],$res[3],$res[4],$ocena); // usuniecie polaczenia z baza } function ArtykulIstnieje($aid) { // sprawdza czy identyfikator artykulu zostal przydzielony if (!$aid=='') { $db = new db(); $db->DoSql(\"SELECT a_id FROM artykuly WHERE a_id='$aid'\"); if ($db->DBError) echo \"Nieudana pobranie ilości rekordów! Linia: \".__LINE__.\" w pliku \".__FILE__.\"<br>\"; return ($db->NumOfRows()>0); } // jesli nie, zwraca falsz else return False; } // zapisuje biezace dane artykulu do bazy function SaveArticle() { $db = new db(); if ($this->ArtykulIstnieje($this->GetValue('aid'))==TRUE) { // jesli artykul nie istnieje zapisuje nowy $db->DoSql(\"INSERT INTO artykuly VALUES('','$this->artykul['uid']')\"); if ($db->DBError) echo \"Nieudane dodanie rekordu! Linia: \".__LINE__.\" w pliku \".__FILE__.\"<br>\"; $this->SetValue('aid',$db->AddedID()); $this->GetArticle($this->GetValue('aid')); } else { // jesli istnieje aktualizuje go $n_uid = $this->GetValue('uid'); $aid = $this->GetValue('aid'); $db->DoSql(\"UPDATE artykuly SET u_id='$n_uid' WHERE a_id=$aid\"); if ($db->DBError) echo \"Nieudana aktualizacja rekordu! Linia: \".__LINE__.\" w pliku \".__FILE__.\"<br>\"; } } } ?>
plik db_class.inc.php
<?php /* @Projekt: System Ocen Artykułów @Plik: artykuly_class.inc.php @Opis: Obłsuga i zarządzanie baza danych @Data: 12 maj 2005 @Autor: Marcin Bancerz @Inne: Praca zaliczeniowa z przedmiotu P.S.I. */ class db { var $dbhost; // serwer bazy danych var $dbuser; // uzytkownik bazy danych var $dbpass; // haslo do bazy danych var $dbbase; // nazwa bazy danych var $h_dblink; // uchwyt do polaczenia var $h_dbbase; // uchwyt do wybranej bazy var $result; // wartosc wyniku zapytania var $DBError; // przechowuje stan bledu // konstruktor klasy function db() { $this->dbhost = \"xxx\"; $this->dbuser = \"xxxt\"; $this->dbpass = \"xxx\"; $this->dbbase = \"xx\"; $this->h_dblink = mysql_connect($this->dbhost,$this->dbuser,$this->dbpass) or $this->DBError = True; if ($this->DBError) { exit; } } // wykonuje zapytanie SQL function DoSql($sql) { } // zwraca wiersz w postaci tablicy function Result() { } // zwraca liczbe wierszy z zapytania function NumOfRows() { } // zwraca id dodanego rekordu function AddedID() { } } ?>
plik index.php (do testow, zadnego interfejsu jeszcze nie ma):
<html> <head> <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-2\"> <title></title> </head> <body> <?php //ini_set(\"display_errors\",0); //error_reporting(0); include 'db_class.inc.php'; include 'artykuly_class.inc.php'; $art = new artykuly(); $art->GetArticle(1); $art->SetValue('uid',5); $art->SaveArticle(); $art->GetArticle(1); ?> </body> </html>
na koniec dodam strukture bazy:
/* Created 2005-05-12 Modified 2005-05-12 Project System ocen artykułów Model SOA Company FallNet Webdesign Author Marcin Bancerz Version 1.0 Database mySQL 4.0 */ DROP TABLE IF EXISTS komentarze; DROP TABLE IF EXISTS artykuly; DROP TABLE IF EXISTS uzytkownicy; CREATE TABLE uzytkownicy ( u_id Int NOT NULL AUTO_INCREMENT, u_nick Varchar(20), u_email Varchar(20), PRIMARY KEY (u_id)) TYPE = MyISAM ROW_FORMAT = DEFAULT; CREATE TABLE artykuly ( a_id Int NOT NULL AUTO_INCREMENT, u_id Int NOT NULL, a_tytul Tinytext, a_tresc Text, a_data Timestamp(14), PRIMARY KEY (a_id)) TYPE = MyISAM ROW_FORMAT = DEFAULT; CREATE TABLE komentarze ( k_id Int NOT NULL AUTO_INCREMENT, u_id Int NOT NULL, a_id Int NOT NULL, k_tytul Tinytext, k_tresc Text, a_ocena Tinyint, a_data Timestamp(14), PRIMARY KEY (k_id)) TYPE = MyISAM ROW_FORMAT = DEFAULT; ALTER TABLE artykuly ADD INDEX IX_napisal (u_id); ALTER TABLE artykuly ADD FOREIGN KEY (u_id) REFERENCES uzytkownicy (u_id) ON DELETE restrict ON UPDATE restrict; ALTER TABLE komentarze ADD INDEX IX_komentuje (u_id); ALTER TABLE komentarze ADD FOREIGN KEY (u_id) REFERENCES uzytkownicy (u_id) ON DELETE restrict ON UPDATE restrict; ALTER TABLE komentarze ADD INDEX IX_jest_komentowany (a_id); ALTER TABLE komentarze ADD FOREIGN KEY (a_id) REFERENCES artykuly (a_id) ON DELETE restrict ON UPDATE restrict;
czy to co tutaj podalem ma chociaz cos wspolnego z php obiektowym? Co jest np niezgodne z tymi zasadami?
i mam maly problem z :
<?php function DoSql($sql) { } ?>
gdy tak mam niestety mysql_query nie wykonuje sie.. (dlatego jest // w orginale), chcialem po prostu zastapic Die() wlasna "obsluga błędów" (prowizoryczną) lecz taki zaspis nie działa.. jak sprawdzić czy mysql_query nie zwraca błędu?
pozdrawiam