Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP5 OOP küsimused märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele eelmine  1, 2, 3, 4  järgmine
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
raido357
HV veteran

liitunud: 26.09.2002




sõnum 16.10.2009 00:54:27 vasta tsitaadiga

Eespool olevad postitused on küll vanad aga miks mitte kasutada MySQL Improved varianti ja prepared statemente ?
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.10.2009 08:51:43 vasta tsitaadiga

kuidas need käivad
_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.10.2009 09:54:19 vasta tsitaadiga

ja mis asjad täpselt need exceptionid on? manualis nagu natukene oli kirjas, kuid ei saa hästi pihta
_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 16.10.2009 10:07:08 vasta tsitaadiga

Veateated.
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.10.2009 10:59:51 vasta tsitaadiga

exceptionitest veel. keegi oskab seletada throw, catch jne... manualis erit nagu kirjas pole.

kas üldiselt oleks parem neid kasutada, selle lihtsa die() asemel?

      if(empty($this->text))
         throw new Exception('jama');


see annab mulle sellise errori:

Fatal error: Uncaught exception 'Exception' with message 'jama' in C:\xampp\htdocs\uus\kala.php:14 Stack trace: #0 C:\xampp\htdocs\uus\kala.php(19): Proov->ValidateText() #1 C:\xampp\htdocs\uus\kala.php(27): Proov->PrintText() #2 {main} thrown in C:\xampp\htdocs\uus\kala.php on line 14

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 16.10.2009 11:01:12 vasta tsitaadiga

http://php.net/manual/en/language.exceptions.php
Example 1 näitab kenasti ära mõtte.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.10.2009 11:03:05 vasta tsitaadiga

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}


mis asja siin tehakse? try, catch jne

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 16.10.2009 11:23:27 vasta tsitaadiga

Kui ühtegi exceptionit ei vista (viga), siis catch osa ei rakendu, kui visatakse exception, siis saad seda catch lõigu sees töödelda, antud juhul väljastatakse exceptioni sõnum (getMessage()).
Otsetõlkes on need kaks väljendit siis proovi ja püüa, kui ta ei suuda edukalt proovi lõiku teha, siis püütakse error kinni ja php scripti käivitumist ei peatata, saad kenasti kasutajale errori saata.
tsitaat:
If an exception is not caught, a PHP Fatal Error will be issued
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 16.10.2009 14:41:53 vasta tsitaadiga

Umm, hetkel tundub see asi siin jalgratta leiutamisena ja mugavuse aknast väljaviskamisena et mingit huvitavat asja proovida.
Mis on näiteks häda sellel, et panna verifytext tagastama true ja false ja seda hiljem kontrollida ?

function verifyText() {
return !empty($this->text);
}

function printText() {
if(!$this->VerifyText()) echo 'tekst puudub';
else echo $this->text;
}

Antud moodus on ju palju mugavam ja loogilisem kirjutada kui nii:
function verifyText() {
if empty($this->text) throw new Exception('tekst puudub');
}

function printText() {
try{
$this->VerifyText();
echo $this->text;
}catch{
echo 'tekst puudub';
}
}

Exceptionitega koodi on palju raskem lugeda ja hiljem hallata. Exceptionitel on oma aeg ja koht, aga mingi taoline lihtlabane kontroll ei ole nüüd küll selline koht... (näiteks redirecti tegemine redirectexception klassiga ja selle püüdmisega on täitsa ok kasutus, aga iga pisikest kontrolli niimoodi "paremaks" teha üritades on suht pointless...)

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.10.2009 15:54:28 vasta tsitaadiga

ma tegelt kirjutan siin ühe gd classi, kus siis tahan kontrollida, et $this->image mis on loodud imagecreatefrom abil on olemas!
kuna see peab 100% olema, siis die('pilt puudub!') oleks ok ja mingit muud keemiat vaja pole?

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 16.10.2009 20:21:10 vasta tsitaadiga

No, minu meelest nii hardcore lähenemist ei ole ikka, et kuskil klassi sees teed die('käi kurele'); kui ühte pilti pole, kuna sellisel juhul sa pead seda klassi hakkama muuta kui tahad teist teksti kuvada jne. Ja kui tahad erinevat teksti kuvada eri kohtadest kasutades, siis on jälle jama majas.

Mõistlikum ja hiljem paremini kasutatav lahendus on see, et sa ise peale pildi laadimist ja enne klassi edasist kasutamist kontrollid läbi funktsiooni IsImageLoaded() {return !empty($this->image);} staatust vms. Niimoodi on põhiklass asjalik ja minimaalne, ja seda kasutav kood ise juba kontrollib ja majandab errorite või hoiatuste kuvamisega, või äärmisel juhul lihtsalt ignoreerib errorit ja proovib uuesti tegevust teha jne jne. Sa ei saa kõiki võimalikke erijuhte baasklassi toppida vaid ikkagi nende koht on seal koodis, mis seda baasklassi kasutab.
Kui on vajadus kasutajale html lehte ilusama error teatega näidata, siis klassi seest tulev die muudab selle võimatuks, aga kõrgemal koodis pildi laadimist kontrollides, on parem kontroll olukorra üle.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
raido357
HV veteran

liitunud: 26.09.2002




sõnum 18.10.2009 19:45:52 vasta tsitaadiga

keevitaja kirjutas:
kuidas need käivad


SELECT:


$yhendus = new mysqli("localhost", "kasutaja1", "salasona1", "minuDB");
$kask = $yhendus->prepare("SELECT id, nimi, asi FROM naide");
$kask->bind_result($id, $nimeke $asjandus);
$kask->execute();

while($kask->fetch != NULL) {
  echo $id." / ".$nimeke." / ".$asjandus
}

$yhendus->close();



INSERT:


$yhendus = new mysqli("localhost", "kasutaja1", "salasona1", "minuDB");
$kask = $yhendus->prepare("INSERT INTO naide (nimi) VALUES(?)");
$kask->bind_param("s", $_POST[uusNimi]);   //s = string
$kask->execute();
$yhendus->close();


mysql_real_escape_string kasutus ei ole vajalik, sellisel viisil.
Kommentaarid: 78 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 70
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 19.10.2009 10:22:23 vasta tsitaadiga

no ma kasutan sqlit nii:

php:
  1. class Mysql
  2. {
  3.         private $link;
  4.        
  5.         private function sformat($arg_list)
  6.         {
  7.                 $query = $arg_list[0];
  8.                
  9.                 for($i = 1;$i < count($arg_list);$i++) $new_list[] = $arg_list[$i];
  10.                        
  11.                 $string = vsprintf($query, $new_list);
  12.                
  13.                 return $string;
  14.         }
  15.        
  16.         public function connect()
  17.         {
  18.                 $this->link = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
  19.                 return mysql_select_db(SQL_DB, $this->link);
  20.         }
  21.        
  22.         public function query($query)
  23.         {
  24.                 return mysql_query($query, $this->link);
  25.         }
  26.        
  27.         public function squery()
  28.         {
  29.                 $query = $this->sformat(func_get_args());
  30.                
  31.                 return $this->query($query);
  32.         }
  33.        
  34.         public function assoc($sql)
  35.         {
  36.                 return mysql_fetch_assoc($sql);
  37.         }
  38.        
  39.         public function num_rows($sql)
  40.         {
  41.                 return mysql_num_rows($sql);
  42.         }
  43.        
  44.         public function insert_id()
  45.         {
  46.                 return mysql_insert_id();
  47.         }
  48. }
  49. $db = new Mysql;
  50. $db->connect();
  51.  
  52. $q = "select id from %s where name='%s'";
  53. $r = $db->squery($q, $id, $name);

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
lehm2
Kreisi kasutaja


liitunud: 19.09.2004




sõnum 19.10.2009 15:07:42 vasta tsitaadiga

Aga milleks, leiutada ratast ? icon_rolleyes.gif
_________________
Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust !
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Celos
Kreisi kasutaja
Celos

liitunud: 23.08.2005




sõnum 19.10.2009 17:58:07 vasta tsitaadiga

lehm2 kirjutas:
Aga milleks, leiutada ratast ? icon_rolleyes.gif


Eks õppimise eesmärgil võib endale igasuguseid ülesandeid püstitada.
Kommentaarid: 16 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 15
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 21.10.2009 11:08:48 vasta tsitaadiga

for($i = 1;$i < count($arg_list);$i++) $new_list[] = $arg_list[$i];

Antud koht lausa karjub SQL injectionit näkku icon_biggrin.gif
Korrektne oleks
$new_list[] = mysql_real_escape_string($arg_list[$i]);


Probleemiks siis kõige tavalisem user inputi usaldamine, näidiskood ärakasutamiseks:

//$_GET['name'] väärtuseks on: olematunimiplapla' union SELECT username,password FROM users WHERE id='2'#
$name = $_GET['name'];
$q = "select väli1,väli2 from mingitabel where name='%s'";
$r = $db->squery($q, $name);
//päring mis baasi tehakse on järgnev
//select väli1,väli2 from mingitabel where name='olematunimiplapla' union SELECT username,password FROM users WHERE id='2'#'
//# kommenteerib välja kõik järgnevad märgid mis muudab päringu stringi korrektseks

Antud näite põhjal valitakse baasist hoopis teisest tabelist väärtuseid kui progejal plaanis oli.
Mitte kunagi ei tohi inputi usaldada, pisut oskajama häkkeri kätes tähendab progejapoolne usaldavus veebilehe või lausa terve serveri metsa keeramist, olenevalt kui laialdaselt ja kui kriitilistes kohtades sellised input usaldamise kohad koodis levinud on

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 30.10.2009 19:32:25 vasta tsitaadiga

mul nüüd lsb (alates PHP 5.3) küsimus:

php:
  1. <?php
  2. class A {
  3.     protected static $text;
  4.    
  5.     public static function init($one = '', $two = '') {
  6.         $obj = new self;
  7.        
  8.         $obj->one = $one;
  9.         $obj->two = $two;
  10.         $obj->static_text = static::$text;
  11.        
  12.         return $obj;
  13.     }
  14.    
  15.     public function output_text() {
  16.         echo 'siin peaks olema tekst: ' . static::$text;
  17.     }
  18. }
  19.  
  20. class B extends A {
  21.     protected static $text = 'see on staatiline tekst';
  22. }
  23.  
  24. $b = B::init('see on esimine', 'see on teine');
  25.  
  26. echo "esimine: {$b->one}<br>teine: {$b->two},<br>static_text: {$b->static_text}<hr>";
  27.  
  28. $b->output_text();
  29. ?>


kuhu kaob $b->output_text() väljastades see static::$text väärtus??? mis mul valesti on kirjutatud?

samas B::output_text(); jälle töötab

see kah on ok:
$b = new B;
$b->output_text();

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 30.10.2009 20:28:22 vasta tsitaadiga

leidsin lahenduse! äkki kellelegi abiks:

    public static function init($one = '', $two = '') {
        $obj = new static;

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.04.2010 15:52:26 vasta tsitaadiga

SELECT:


$yhendus = new mysqli("localhost", "kasutaja1", "salasona1", "minuDB");
$kask = $yhendus->prepare("SELECT id, nimi, asi FROM naide");
$kask->bind_result($id, $nimeke $asjandus);
$kask->execute();

while($kask->fetch != NULL) {
  echo $id." / ".$nimeke." / ".$asjandus
}

$yhendus->close();


$kask->bind_result($id, $nimeke $asjandus);
kas seda rida selliselt ei saaks kirjutada, et need väljade muutuja nimetused tekivad automaatselt väljade nimetuste järgi

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mark11
HV vaatleja

liitunud: 28.01.2006




sõnum 16.04.2010 18:18:05 vasta tsitaadiga


function wrap_it($obj, $arr) { call_user_func_array(array($obj, "bind_result"), compact($arr)); }
$fields = array("id", "nimi", "asi");
$kask = $yhendus->prepare("SELECT " . implode($fields, ",") . " FROM naide");
wrap_it($kask, $fields);

põhimõtteliselt selline värk töötaks küll.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 16.04.2010 20:32:33 vasta tsitaadiga

krt, see tundub kuidagi liiga keeruline. siis võiks ise ju neid querysid kontrollida.

põmst ma tahaks ainult, et need queryd oleks prepared (eelvormindatud???). fetchida võiks ka muud muudi äkki?

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 22.04.2010 23:12:01 vasta tsitaadiga

klge olete te kindel selle mysqli prepared statementide headuses? ma siin üritasin nüüd asjast sotti saada ja jõudsin sellisele tulemusele:

php:
  1. <?php
  2. class DB {
  3.     function __construct() {
  4.        $this->connection = new mysqli('localhost', 'root', '', 'test');
  5.     }
  6.    
  7.     function prep_query($query) {
  8.         $this->stmt = $this->connection->prepare($query);
  9.     }
  10.    
  11.     function bind_params($params) {
  12.         $referenced_params = array();
  13.        
  14.         foreach($params as $key => $value) {
  15.             $referenced_params[] = &$params[$key];
  16.             $param_types .= $this->get_param_type($value);
  17.         }
  18.        
  19.         array_unshift($referenced_params, $param_types);
  20.        
  21.         call_user_func_array(array($this->stmt, 'bind_param'), $referenced_params);
  22.         $this->stmt->execute();
  23.     }
  24.    
  25.     function exec_query($query, $params) {
  26.         $this->prep_query($query);
  27.         $this->bind_params($params);
  28.     }
  29.    
  30.     function get_param_type($param) {
  31.         switch(gettype($param)) {
  32.             case 'integer':
  33.                 $param_type = 'i';
  34.                 break;
  35.             case 'double':
  36.                 $param_type = 'd';
  37.                 break;
  38.             case 'string':
  39.                 $param_type = 's';
  40.                 break;
  41.             default:
  42.                 $param_type = 'b';
  43.                 break;
  44.                
  45.         }
  46.        
  47.         return $param_type;
  48.     }
  49. }
  50. $db = new DB();
  51. $db->exec_query("insert into proov(yks, kaks) values(?, ?)", array('see ondsf proov', 43424234));
  52. ?>


ma ei tea, kas nüüd on kõik nii nagu peab, aga igatahes muud moodi ma ei suutnud. eriti nõme on, et parameetrid peab muuta viideteks ja peab muutujate tüübid ette andma. muidugi see bindimine on ka oma olemuselt juba nõme

ehk siis selle minu klassi mõte on see, et ei peaks iga queryga mingit ullu lugulaulu kirjutama

edit: ja kui nüüd hakata veel mõtlema mark11 näite peale, kuidas resulte kätte saada, siis tuleb ikka päris nutu maitse suhu

või kus seda mysqli preparet krt kasutama peaks?

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!


viimati muutis keevitaja 23.04.2010 00:14:34, muudetud 1 kord
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 22.04.2010 23:30:50 vasta tsitaadiga

keevitaja kirjutas:
klge olete te kindel selle mysqli prepared statementide headuses?


Puutusin ka kunagi kokku selle mysqli prepared statementidega. Peale mõningast mässamist jõudsin järeldusele, et nii haiget API-it pole lihtsalt võimalik normaalselt kasutada - lihtsam kui seda kasutada on kirjutada ise andmebaasiklass, mis neid prepared statemente sulle simuleerib kasutades lihtsaid tekstilisi päringuid. Seda ma ka toona tegin.

Ma arvan, et see mysqli liides on algselt kirjutatud C jaoks, kus kõik need viidad jms igati mõttekad on, ja siis on keegi hea inimene selle üks-ühele PHP-sse ringi pannud: tulemuseks on porno.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 23.04.2010 00:17:46 vasta tsitaadiga

jumal tänatud. ma siin kartsin, et panin siin oma katsetamisega mööda täiega kuna väideti, et ma oma eelpool mainutud klassiga leiutan jalgratast...
see mysqli on pealegi veel bugine kah. näiteks long integeri peab sisestama stringina...

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
iceincube
HV veteran
iceincube

liitunud: 18.11.2005




sõnum 23.04.2010 22:54:13 vasta tsitaadiga

Ma kasutaks ka muid asju.
Kuna kasutan ise Zend'i päris palju siis soovitan seda.


Samuti kavas doctrine'i proovida.
Kommentaarid: 39 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 37
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP5 OOP küsimused mine lehele eelmine  1, 2, 3, 4  järgmine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.