Systém komentářů pomocí jQuery a Ajax.

 2012-10-27 00:00:00
 Dmitry Burobin

Dnes vytvoříme systém komentářů s automatickou kontrolou vstupních dat pomocí technologie Ajax a přidáváním nového komentáře s použitím jQuery bez znovunačtení stránky.

Série článků:
1) Systém komentářů pomocí jQuery a Ajax.
2) Lajkování neboli karma u komentářů.
3) Strankování.

Vytvoření tabulky a připojení k databázi.

Vytvoříme si tabulku comments, do které budeme ukládat: identifikátor komentáře ( id ), identifikátor rodičovského komentáře ( parent_id ), jméno ( name ), text komentáře ( text ) a datum přidání komentáře ( date ).

CREATE TABLE `comments` (
`id` INT ( 5 ) NOT NULL AUTO_INCREMENT,
`parent_id` INT ( 5 ) NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`komentar` TEXT,
`date` DATETIME,
PRIMARY KEY(`id`)
)ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

Taktéž si vytvořte soubor db.php, pro připojení k databázi.
<?php
$DBSERVER 'localhost'//server, který bude použít pro navázáníspojení s DB 
$DBUSER 'root'//Váš mysql login, nejspíš je stejný jako u mě pro localhost, tudiž root 
$DBPASS '****'//heslo, které jste zadaval při instalaci MySQL 

$DB 'test'//databáze, s kterou budeme pracovat 

//navazení spojení pomoci mysql_connect  
$link mysql_connect($DBSERVER$DBUSER$DBPASS)  or die("Could not connect: " mysql_error()); 
//vybírame databázi 
mysql_select_db($DB$link) or die ('Can\'t use test : ' mysql_error()); 
//řekněme MySQL, že všechná data jsou ve formatu UTF-8 
mysql_query("SET NAMES UTF8");
?>

index.php

Hlavní stránka bude obsahovat formulář pro přidávání komentářů s polem pro jméno, zprávu a skryté pole, do kterého budeme ukálát identifikátor rodičovského komentáře, pokud někdo bude odpovídat na nějaký komenář. Soubor index.php vypadá takto:

<?php
/*Soubor pro vybírání komentářů z databáze*/
require_once 'comment.php';
?>
<!DOCTYPE html>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">

<
head>
    <
title>Systém komentářů.</title>
    <
meta charset="utf-8" >
    
    <
link rel="stylesheet" href="style.css"> <!-- soubor se styly -->
    <
script src="jquery-1.7.1.min.js"></script> <!-- připojení jquery -->
    <script src="comment.js"></script> <!-- funkce potřebné pro přidávání komentářů -->
    
</head>
<body>
<ul id="commentWrapper">
<?php
/*Zde v proměnné $comments jsou komentáře*/
echo $comments;
?>
<!-- formulář pro přidávání komentářů -->
</
ul>    
    <
div id="commentBox">
        <
input class="validate" type="text" name="name" >
        <
input id="parent" type="hidden" name="parent_id" value="">
        <
div class="commentText">
            <
textarea name="text"></textarea>
        </
div>
        <
button>Přidat</button><img class="loader" src="loader.gif">
    </
div>
</
body>
</
html>

Styly a knihovna jQuery

Pro správné fungování potřebujeme připojit knihovnu jQuery. Tu buď stáhnete z oficiálního webu nebo z archivu s tímto článkem. Pak, aby komentáře líp vypadali přidáme styly, nic složitého v nich není, proto je nebudu popisovat:

body
{
    
margin:0;
    
padding:0;
}
ulli
{
    list-
style-type:none;
}
.
loader
{
    
display:none;
}
#commentBox
{
    
width:400px;
    
padding:10px;
}
#commentBox input
{
    
width:250px;
    
height:25px;
    
padding0 5px;
    
margin:5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_input.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox textarea
{
    
width:250px;
    
height:100px;
    
margin5px;
    
padding5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_koment.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox button
{
    
height:30px;
    
width:85px;
    
margin-left183px;
    
margin-top:0px;
    
font:700 12pt/14pt Ume Gothic O5;
}
#commentWrap
{
    
width:350px;
    
padding:10px;
    
padding-bottom:3px;
    
margin:10px;
    
border1px solid #ccc;
    
border-radius:10px;
    
background:#f7f7f7;
}
#commentWrap .komentar
{
    
padding:5px;
    
padding-left:0px;
    
border-top:1px solid #ccc;
    
margin-bottom:10px;
    
font:400 12pt/14pt Times New Roman;
}
#commentWrap .replay
{
    
margin-left:270px;
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap a
{
    
text-decoration:none;
}
#commentWrap .commentName
{
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap .commentDate
{
    
font:400 11pt/13pt Times New Roman;
}
.
repName
{
    
font:400 12pt/14pt Times New Roman;
    
font-style:italic;
}
.
repText
{
    
font:700 10pt/12pt Ume Gothic O5;
}
.
repDate
{
    
font:400 9pt/11pt Times New Roman;
    
font-style:italic;
}

comment.php

Tento soubor je určen pro vybírání dat z databáze a vkládání těchto dat do šablony.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';

// Vybereme komentáře z databáze
$query mysql_query("
         SELECT `id`,`parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments` ORDER BY `id` ASC 
         "
);
         
// Pokud při vykonání příkazu nastané chyba vypišeme ji
if(!$query) { echo mysql_error() . " - " mysql_errno(); }
else {

// Jinak pomocí cyklusu projdeme všechny záznamy v tabulce
        
while($result mysql_fetch_assoc($query))
        {
            
// a uložíme je do pole $data  
            
$data[$result['id']] = $result;
        }

// Funkce pro vkládání dat ( komentářů ) do šablony
function commentsToTemplate($comment)
{
// $comment - pole komentáře - id, parent_id, name, text, date 
    
// Zapneme bufferování výstupu, aby šablona nebyla zobrazená v místě volání funkce
    
ob_start();  
      
// Připojíme šablonu comment_template.php, do které vložíme data z pole $comment
    
require_once 'comment_template.php';                     
  
// Získáváme obsah bufferu jako řetězec   
    
$comments_string =  ob_get_contents(); 

// Vymažeme všechno z bufferu
    
ob_end_clean();

// Vrácíme komentář jako řetězec   
    
return $comments_string;    
}

// Funkce pro zpracování pole $data, které
// bude rozděleno do jednotlivých komentářů a odesláno funkci 
// commentsToTemplate
function commentsString($data)
{
    foreach(
$data as $w
    {
        
$string .= commentsToTemplate($w);
    }
 
return 
$string
}  

// proměnná $comments obsahuje naše komentáře, které zobrazujeme na hlavní stránce
$comments commentsString($data);

// vynulujeme proměnnou $data 
$data null;
}
?>

comment_template.php

Toto je vlastně šablona jednotlivého komentáře.

<?php
// Do této šablony se načítají data z pole $data, která jsou odesláná funkci commentsToTemplate
echo '<li id="comment'.$comment['id'].'">
    <div id="commentWrap">'
;
        
// Pokud existuje parent_id, pak zobrazíme, že se jedna o odpověď
        
if($comment['parent_id']!=0)
        {
// Vybereme z DB jméno a datum rodičovského komentáře
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
// Zobrazíme jméno a datum přidání
echo    '<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
<!--Zobrazíme text komentáře-->
            '
.$comment['komentar'].'
        </div>
<!--Pokud zmačkneme na tento odkaz, pak se do skrýteho pole s názvem parent_id přidá
identifikátor tohoto komentáře. 
Použil jsem zde JS událost onClick, tzn. pokud je tlačítko zmačknuté, pak najdi prvek s 
id parent ( což je skrýte pole parent_id ) a do hodnoty přidej id komentáře, na který chcete odpovědět-->
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.$comment['id'].';">Odpovědět</a>
    </div>
</li>'
;
?>

comment.js

Tento soubor je určen pro odesílaní dat na server a přidávání do databáze

$(document).ready(function(){
    
// Objekt commentBox bude obsahovat data pro odesílání na server
    
var commentBox = {};
    
// Po kliknutí na tlačítko přidat      
     
$('#commentBox button').live('click',function(){
         
// Do objektu commentBox bude přidána hodnota skrýteho pole input s názvem parent_id,
// které obsahuje id rodičovského komentáře a pokud je prázdné tak bude 0, což znamená, že
// se jedná o nový komentář bez reakci na něj ( toto se bude ověřovat až odešleme data na server ).   
        
commentBox.parent_id = $('#commentBox').find("input[name='parent_id']").val();
        
// Taktéž přidáme do objektu commentBox hodnotu pole name a zprávu
        
commentBox.name = $('#commentBox').find("input[name='name']").val();        
        
commentBox.text = $('#commentBox').find("textarea").val();
// Abyste to lépe pochopili syntaxe toho, jak přidáváme hodnoty do objektu je:
// Objekt.název_proměnné = hledáme input nebo textarea.hodnota pole

// Funkce pro odesílání dat na server        
        
sendData();
     });
    

function 
sendData()
{
// Najdeme tlačítko schováme jej a zobrazíme loader ( ten si můžete stáhnout z archivu )
    
$('#commentBox').find('button').hide().next().show();

// Odešleme    data metodou post na server
    
$.post(
// Soubor, ve kterém se provádí ověřování dat a přidávání komentářů     
        
"addkoment.php",
// Objekt s proměnnými (parent_id, name a text)
        
commentBox,
        function(
data){
// Pokud jsou nějaka data, to znamená, že nastala chyba
            
if(data)
            {
// Převedeme tento řetězec JSON do objektu JS
                
data = $.parseJSON(data);
                
// Vytvoříme proměnnou errors, která bude obsahovat název chyby
                
var errors '';

// Použijeme cyklus pro zobrazení všech chyb najednou.
// Použil jsem tuto konstrukci, protože nejprvé jsem zobrazoval všechny chyby, ale
// nakonec jsem to změnil a teď se bude zobrazovat jenom jedna konkretní chyba     
// Kdybyste chtěli zobrazit všechny chyby tak použijte konstrukci
// errors += val+'\n'; - každá chyba se zobrazí na samostatném řádku.
// i - obsahuje název chybného pole a val - popis chyby
            
                
$.each(data, function(ival)
                {
                    
errors += i;
                });

// Uložil jsem do proměnné errors jenom název chybného pole a
// cyklusem switch procházim všechny varianty a přidávam červený rámeček 
// pokud pole je prázdné nebo jestli komentář nebyl přidan tak zobrazim hlášení                    
                   
switch (errors
                   {
                      case 
'name':
                        $(
'#commentBox').find("input[name='name']").css('border','2px solid red');
                        break
                      case 
'text':
                        $(
'#commentBox').find("textarea").css('border','2px solid red');
                        break
                      case 
'not_add':
                        
alert('Komentář nebyl přidan.')
                        break
                      default:
                        
alert('Něco je špatně')
                  }

// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
                
$('#commentBox').find('button').show().next().hide();

// Jinak, pokud žadná chyba nenastala, tak voláme funkci addComment, která zobrazí
// komentář bez znovunačtení stránky a vynuluje hodnoty vstupních poli
            
} else {
                
addComment();        
            }
        }
    
    )

}


function 
addComment()
{
// Na konec prvků s id commentWrapper ( což je ul ) přidame tag <li></li>,
// ve kterém se bude nacházet nový komentář
    
$("#commentWrapper").append('<li></li>');

// Najdeme poslední tag <li>, který jsme teď vytvořili a
// načteme do něj poslední komentář
    
$("#commentWrapper li:last").load('new_comment.php');
// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
    
$('#commentBox').find('button').show().next().hide();

// Vynulujeme hodnoty vstupních poli
    
$('#commentBox input').val('');
    $(
'#commentBox textarea').val('');

}


});

addkoment.php

Tento skript zpracovává data poslána na server pro zpracování.

<?php
// Ověříme, zda se jedna o odeslána POST data nebo si člověk jen tak otevřel tuto stránku
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

// Pokud ano, pomocí funkci sleep přidame efekt zpoždění, abyste 
// viděl loader, jinak, protože pracujeme na lokálním serveru
// se ten loader hned schová  
     
sleep(2);

// Ověříme vstupní data     
// Pokud je pole name nebo textové pole prázdné do pole $error uložíme text chyby
// ukončíme skript a odešleme tuto chybu v JSON formátu  
     
if(!isset($_POST['name']) OR empty($_POST['name']))
     {
        
$error['name'] = "Zadejte jméno.";
        exit(
json_encode($error));
     } else {
        
$name htmlspecialchars(stripslashes(trim($_POST['name'])));
     }
     
     if(!isset(
$_POST['text']) OR empty($_POST['text']))
     {
        
$error['text'] = "Zadejte zprávu.";
        exit(
json_encode($error));
     } else {
        
$text stripslashes(htmlspecialchars(trim($_POST['text'])));
     }
     
// V tomto případě, když parent_id je prázdné pole tak mu přiřadime hodnotu 0
// to znamená, že se jedná o nový komentář, který není odpovědí na něčí jiný  
     
if(!isset($_POST['parent_id']) OR empty($_POST['parent_id']))
     {
        
$parent_id 0;
     } else {
        
$parent_id stripslashes(htmlspecialchars(trim($_POST['parent_id'])));
     }
     
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )  
     
require_once 'db.php';
     
// Přidame komentář do databáze a vrátíme false, tzn.
// že chyba nenastala a komentář byl přidán.
     
$q mysql_query("
     INSERT INTO `comments`(`parent_id`,`name`,`komentar`,`date`)
     VALUES('"
.$parent_id."','".$name."','".$text."', NOW())
     "
);
     if(!
$q) { $error['not_add'] = "Komentář nebyl přidan."; exit(json_encode($error));}
     else { exit(
false); }

}
?>

new_comment.php

V tomto souboru vybírame poslední komentář, abysme ho následně zobrazili po úspěšnem ověření vstupních dat.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';
// Vybereme maximální ( poslední přidáný ) id
$max mysql_query("SELECT MAX(`id`) FROM `comments_my`");
// Pak vybereme všechny související údaje s tímto identifikátorem
$query mysql_query("
         SELECT `parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments_my` WHERE `id` = '"
.mysql_result($max,0)."'
         "
);
$comment mysql_fetch_assoc($query);

// A stejně, jak jsme zobrazovali komentáře před tím, zobrazíme poslední přidáný
echo '<li id="comment'.mysql_result($max,0).'">
    <div id="commentWrap">'
;
        
        if(
$comment['parent_id']!=0)
        {
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
echo    
'<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
            '
.$comment['komentar'].'
        </div>
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.mysql_result($max,0).';">Odpovědět</a>
    </div>
</li>'
;
?>

Závěr

Probrali jsme, jak můžeme zpracovávát formuláře bez znovunačtení stránky. Doufám, že se Vám tento článek líbil a byl pro Vás přínosný.

Systém Orphus
Napište komentář.
Celkem komenrářů(11211)
Online pharmacy - 2018-10-03  20:05:55
 allergy cough hair thinning treatment
canadian pharmacies
feline asthma female baldness
canadian pharmacy
Jeremyecoma - 2018-10-03  19:30:44
 сердечный веб ресурс [url=http://crdcop.cc]кардинг форум[/url]
RobinGak - 2018-10-03  11:39:01
 Новое лечение гепатита С в России, препараты для лечения гепатита С вы можете закзать у нас, консультация врача бесплатно


[url=http://evro-pharma24.ru/lekarstvo-ot-raka/553/]сутент инструкция цена[/url]
[url=http://evro-pharma24.ru/lekarstvo-ot-raka/556/]куплю тасигну[/url]
[url=http://evro-pharma24.ru/lekarstvo-ot-raka/548/]ревлимид 25 мг[/url]


ибрутиниб инструкция по применению
купить тасигну
алкеран мелфалан
MarcusHem - 2018-10-03  07:29:27
 [url=https://www.appmsr.net/vzlom-whatsapp]скачать программу +для взлома ватсап[/url] - программа +для взлома телеграм, взлом переписки вайбер
Евгения - 2018-10-03  05:50:02
 Перезвоните пожалуйста по телефону 8(495)248-01-88 Евгения
ThomasvUh - 2018-10-03  02:08:04
 чудный сайт
[url=https://poka-vse-doma2.ru/efirs/3555-mobilnoe-prilozhenie.html]Дом 2 Попробуйте удобное андроид мобильное приложение[/url]
BramOr - 2018-10-02  07:49:36
 In the masses, such oxidative reactions are enzyme catalysed and typically proceed about adding oxygen to a exotic coalesce, as when a hydroxyl collect is inserted in benzene to grow phenol. For wa
ing, ahead the 1960s, da
ed premature infants did not survive because of the immaturity of their lungs. What precisely is human pushing [url=https://stereolaffs.com/drugstore/pills14/panmycin/]cheap panmycin 250mg without prescription[/url] antibiotic joint pain.
The most convincing evidence to bring up that JNK is implicated in excitotoxic neuronal eradication has up from studies using JNK3 knockout mice, where KA-mediated seizures in vivo failed to cause apoptosis in hippocampal neurons, coincident with the reduction of c-Jun phosphorylation (Yang et al. Nurses should ensure caregivers are assumption a standardized dosing mechanism to tu
to account at home to run medications. " "What are we genetically and environmentally predisposed to vex [url=https://stereolaffs.com/drugstore/pills30/fertomid/]order fertomid 50 mg ove
ight delivery[/url] womens health supplements. Representing example, placid data can be employed for reconstructing the path of a effect within the supply succession or to a financial long-term forecast. N L H Genes 50 10 10 KREMEN2, ST8SIA1, TNFSF10, ATF6 150 30 30 HADHB, BAX, MAPK13, CYP1A1, ATF2 250 49 51 NFKBIA, PLCB1, ITGB1, MYC, KRAS 350 69 71 PRKACB, FOS, PRKACG, FASN, NFKB1 450 85 95 RAC1, MAP2K2, JUN, TP53, RELA 551 100 119 RAF1, GRB2, PIK3CA, RPS27A, MAPK8 647 117 145 HRAS, MAP2K1, AKT1, RAF1, GRB2 765 125 185 MAPK3, MAPK1, HRAS, MAP2K1, AKT1 Submit 7. Keep for every period that you've renounce respiration [url=https://stereolaffs.com/drugstore/pills38/liv-52/]buy liv 52 120 ml with amex[/url] treatment 7th feb. Asylum nurses also need to abuse their knowledge of advance and condition when caring in search ill infants. In acquired drug stubbo
ness, exogenous factors such as the presence of repeated seizures can advocate transcriptional or post-transcriptional changes effectual of inducing structural changes in VGSC, changes that are adequate to prevail on refractory or drug-resistant epilepsy (Beck 2007). What are the symptoms of supersensitised asthma [url=https://stereolaffs.com/drugstore/pills46/artane/]purchase artane 2 mg on-line[/url] pain treatment in osteoporosis.
They are in many cases associated with dynamism deficits in cells with high dynamism requirements, such as fortitude and muscle cells. However, blood spurt signals do not suffer with adequacy non-spiritual kindliness to be superior to single visible those signals which ascend on the orderliness of tens of milliseconds at a distance, as is needed to exam an eye to the expected dynamical flow arising from such a exemplar as that of CODAM. Ulceration is principally caused by a bacterium titled H [url=https://stereolaffs.com/drugstore/pills20/augmentin/]generic augmentin 625 mg without a prescription[/url] antibiotic strep throat. For all applanation tonometers, align equalize veterinary versions, how, the space of applana- tion has been selected based on the characteristics of the human co
ea, and across species there are substantial variations in co
eal thickness, speed covering viscosity, and the proportion of the co
ea being applanated. Some of the general measures are threshold as far as something producing an MEP, recruitment curve, short intracortical constraint and facilitation, uncommunicative span, testy and want afferent inhibition, and transcallosal inhibition (TCI) (Hallett 2007; Werhahn et al. Your angle in pounds x 704 [url=https://stereolaffs.com/drugstore/pills25/quibron-t/]buy quibron-t 400 mg low price[/url] allergy shots itchy skin.
However, as the ductus begins to draw at a handful days of time, the newbo
desire initiate to evince cyanosis. Studies in epileptic rats and presurgical patients using small diameter microelec- trodes (40В­60 Вµm) estimate the mass of tissue generating pHFOs could be as R. Inf: 30 mg (30 mL of 1:1000 soln) in 250 mL NS or D5W, at cardinal mL/h, titrate [url=https://stereolaffs.com/drugstore/pills18/noroxin/]noroxin 400mg discount[/url] virus hoax. Pediatric cancers most again mount from rough embryonal (mesodermal) and neuroectodermal tissues, resulting in leukemias, lymphomas, sarcomas, or central nervous patte
(CNS) tumors (American Cancer Society, 2011; Larsen, 2011). Measurements of visual province can comprehend visual acuity, visual manipulate, conflict sensitivity, and color foresight, as kindly as complex visual tasks such as reading, lie, activities of routine living, and even more complex concepts such as vision-related quality of life (common skills, self self-reliance, coping skills). What Is Death Apnea [url=https://stereolaffs.com/drugstore/pills36/imitrex/]buy imitrex 25 mg lowest price[/url] infantile spasms 2013. BPA is a high-volume chemical tempered to in the producing of polycarbonate plastics during the manufacturing of bread and beverage packaging, solid discs, protection equipment and medical devices. Is it viable that both the PaSNS and SNS mediate the same inhibition of splenic TNF- and inflammation? We replaced labor tribes with sports teams [url=https://stereolaffs.com/drugstore/pills33/clonidine/]buy clonidine 0.1mg otc[/url] arrhythmia risk factors. Newbo
s may on the contrary nick a half-ounce to 1 ounce per feeding initially, working up to 2 to 3 ounces in the elementary scattering days. Familiar signs and symptoms reported during the condition summary muscle include: В· Unwonted inception of occasional, crampy abdominal depress В· Severe cramp (children most often prepare up their knees and scream) The using software is trial version. Ok, so you move [url=https://stereolaffs.com/drugstore/pills11/cabergoline/]purchase cabergoline 0.25 mg otc[/url] menstruation religion.
Viagra without doctor prescription - 2018-10-02  02:51:12
 arthritis uk diseases related to the digestive system
viagra without a doctor prescription
symptoms of severe allergic reaction hair rejuvenation
viagra without a doctor prescription
Edwardjem - 2018-10-01  09:03:20
 Привет всем участникам! прикольный у вас сайт!
Нашел прикольную базу кино: [b] лучшие боевики 2018 2017 онлайн хорошем качестве [/b] [url=http://kinokub.net/]http://kinokub.net/[/url]
Здесь: [url=http://kinokub.net/anime/]аниме лучшее смотреть онлайн новинки[/url] смотреть бесплатно аниме хорошего качества на русском список 2017
Тут: [url=http://kinokub.net/boevik/]боевики сша смотреть онлайн бесплатно в хорошем[/url] онлайн фильмы лучшие российские боевики список 2017
Здесь: [url=http://kinokub.net/detektiv/]смотреть фильмы онлайн хороший русский детектив[/url] лучшие детективы устиновой смотреть онлайн список 2017
Здесь: http://kinokub.net/drama/8031-niti-sudby-el-tiempo-entre-costuras-sezon-1-20132014.html [b] Смотреть Нити судьбы / El tiempo entre costuras (Сезон 1) (2013–2014) онлайн бесплатно [/b]
Здесь: http://kinokub.net/drama/9268-nedouspeshnye-underemployed-sezon-1-2012.html
Lancegagma - 2018-10-01  08:26:53
 Здравствуйте!
Нашел интересные фотоподборки на этом сайте: http://okaybro.ru :
[url=http://okaybro.ru/foto-prikoly-interesnoe/4957-samye-bolshie-mashiny-v-mire.html] Самые большие машины в мире [/url]
[b] Прогулка по самому необычному отелю в Турции [/b] http://okaybro.ru/foto-prikoly-interesnoe/4864-progulka-po-samomu-neobychnomu-otelyu-v-turcii.html
http://okaybro.ru/foto-prikoly-interesnoe/4220-znamenitosti-kotorye-nashli-lyubov-na-semkah.html
RobinGak - 2018-10-01  03:59:21
 Новое лечение гепатита С в России, препараты для лечения гепатита С вы можете закзать у нас, консультация врача бесплатно


[url=http://evro-pharma24.ru/lekarstvo-ot-raka/555/]ибранса[/url]
[url=http://evro-pharma24.ru/lekarstvo-ot-raka/554/]стивагра[/url]
[url=http://evro-pharma24.ru/lekarstvo-ot-raka/862/]джакави инструкция[/url]


сутент применение
lynparza olaparib олапариб
мекинист купить в москве
JamesNub - 2018-09-30  00:08:55
 благоприятный вебсайт
[url=https://hdhc.ru/tv]ТВ-Передачи в HD качестве новинки смотреть онлайн каждый день[/url]
Matthewstath - 2018-09-29  12:23:05
 [url=http://lineremont.ru/]ремонт квартир под цены[/url] - ремонт квартир ключ москва, ремонт ЖК «Итальянский квартал»
Anthonyobemo - 2018-09-28  07:54:47
 better resource [url=http://crackzipraronline.com]zir rar password recovery online[/url]
ConnieSunty - 2018-09-28  03:05:42
 Привет всем! интересный у вас сайт!
Нашел топ базу кино: [url=http://kinokub.net/]кино комедия бесплатно в хорошем[/url]
Тут: Лучшие фантастика список 2018 http://kinokub.net/fantastika/ список 2017
Здесь: молодежные комедии смотреть бесплатно в хорошем качестве http://kinokub.net/komediya/ список 2017
Здесь: [url=http://kinokub.net/melodrama/]фильмы мелодрамы смотреть бесплатно в хорошем качестве[/url] мелодрамы русские односерийные в хорошем качестве бесплатно список 2017
Здесь: http://kinokub.net/istoricheskiy/11191-izumitelnyy-il-divo-la-spettacolare-vita-di-giulio-andreotti-2008.html [b] Смотреть Изумительный / Il divo: La spettacolare vita di Giulio Andreotti (2008) онлайн бесплатно [/b]
Здесь: http://kinokub.net/semeynyy/6306-bunt-pe
atyh-plumiferos-aventuras-voladoras-2010.html
RolandUnumS - 2018-09-28  02:32:53
 Приветствую всех!
Нашел интересные фотоподборки на этом сайте: http://himaan.ru :
http://himaan.ru/foto-prikoly-interesnoe/5564-bogatye-detki-dubaya.html [b] Богатые детки Дубая [/b]
[url=http://himaan.ru/foto-prikoly-interesnoe/2128-samye-zainstagramlennye-mesta-mira-v-2014-m-godu.html] Самые «заинстаграмленные» места мира в 2014-м году [/url]
http://himaan.ru/foto-prikoly-interesnoe/4817-aviashou-seafair-v-sietle.html
NathanLon - 2018-09-27  23:13:27
 sildenafil citrate sale
buy viagra
viagra pillenpharm
[url=http://viagrakst.com/#]generic viagra price at walmart[/url]
sildenafil generico precio peru
Gregoryevaxy - 2018-09-27  22:39:43
 generic sildenafil citrate in india
buy viagra online
viagra 100mg how to use
[url=http://viagrakst.com/#]buy viagra online[/url]
buy viagra cheapest price
Kevinles - 2018-09-27  22:14:52
 viagra cialis price
buy viagra
medicamento viagra generico
[url=http://viagrakst.com/#]buy viagra[/url]
cheap viagra cialis
TeodoraExpef - 2018-09-26  04:09:11
 Крупный Гепатит форум, тут можно получить бесплатную консультацию о лечение Гепатита с

[url=https://h-c-v.net]софосбувир инструкция[/url]
[url=https://h-c-v.net]гепатит с форум болеющих россия 2016[/url]
[url=https://h-c-v.net]sofovir hetero[/url]
<<[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] [456] [457] [458] [459] [460] [461] [462] [463] [464] [465] [466] [467] [468] [469] [470] [471] [472] [473] [474] [475] [476] [477] [478] [479] [480] [481] [482] [483] [484] [485] [486] [487] [488] [489] [490] [491] [492] [493] [494] [495] [496] [497] [498] [499] [500] [501] [502] [503] [504] [505] [506] [507] [508] [509] [510] [511] [512] [513] [514] [515] [516] [517] [518] [519] [520] [521] [522] [523] [524] [525] [526] [527] [528] [529] [530] [531] [532] [533] [534] [535] [536] [537] [538] [539] [540] [541] [542] [543] [544] [545] [546] [547] [548] [549] [550] [551] [552] [553] [554] [555] [556] [557] [558] [559] [560] [561] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.