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ářů(9129)
Alisalic - 2017-04-29  00:01:31
 Absolutely NEW update of SEO/SMM software "XRumer 16.0 + XEvil":
captcha recognition of Google, Facebook, Bing, Hotmail, SolveMedia, Yandex,
and more than 8400 another categories of captcha,
with highest precision (80..100%) and highest speed (100 img per second).
You can connect XEvil 3.0 with all most popular SEO/SMM programms: XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other programms.

Interested? You can find a lot of introducing videos about XEvil in YouTube.
See you later ;)
ArteurMit - 2017-04-28  23:56:40
 Все знают, что лидером среди почтовиков по праву считается проект SEOsprint. Но у него в интернете есть большое количество аналогов и копий. Об этом будет более подробно рассказано в статье. В сети сайты делятся на 2 вида, которые похожи на SEOsprint:

1. Копии Сеоспринт

2. Аналоги Сеоспринт

Далее будут разобраны приличные копии вебсайта SEOsprint, какие не однодневки, а функционируют уже несколько лет и по некоторым личным показателям превзошли сам проект SEOsprint.

Аналоги SEOsprint http://zarabotok--doma.ru

Wmmail

Данный почтовик возможно отнести к наиболее старым среди ему подобных, на нем зарегистрировано не меньше пользователей, чем на Сеоспринт и заданий на нем не меньше. На данном проекте оплата идет в долларах, и этим он превосходит Сеоспринт. На данном проекте можно построить свой доход на написании статей, такой возможности нет на СеоСпринт. Все средства, которые были заработаны на продаже текстов и выполнении другой работы можно вывести на популярные платёжные системы:

1. Яндекс.Деньги

2. Вебмани

3. Пайер

Можно сказать, с уверенностью, что Wmmail возможно по праву считать лучшей копией сайта Сеоспринт. Для рекламодателей данный проект также представляет ценность, потому что на нем находятся более 600 000 пользователей, которые помогут рекламодателю продвинуть свой проект.

Wmzona

Данный проект можно считать достойным конкурентом Сеоспринт, он начал свою деятельность в 2004 году. Заработать на проекте модно множеством способов:

• Выполнение задач

• Майнинг на видеокарте

• Серфинг веб-сайтов

• Чтение писем

• Имеется возможность собирать бесплатные биткоины

Вся оплата производится в долларах, а вывести заработанные наличные можно лишь на Вебмани кошелек, минималка для вывода составляет 0,5 $.

SOCPUBLIC

Данный почтовик можно отнести к старым ресурсам, который радует, как исполнителей, так и рекламодателей, на проекте их насчитывается более 1 млн. Недавно, в 2014 году на ресурсе произошли изменения, был изменён дизайн сайта и произошла смена скрипта. Это сказалось наилучшим образом на работе проекта, также прибавилось заданий и появилось больше возможностей для рекламы. На данном проекте очень часто проводятся розыгрыши, призом является денежное вознаграждение. Все заработанные деньги имеется возможность вывести на множество популярных платежных систем:

1. Яндекс.Деньги

2. WebMoney

3. Qiwi

4. Perfect Money

5. Payeer

На любом из предложенных проектах исполнитель может построить свой заработок, при этом не нужно опасаться, что проекты окажутся обманными и не выплатят все заработанные деньги. А на каком сайте лучше работать, поймет сам исполнитель, если попробует трудиться на любом из предложенных почтовиков. Перейти на сайт
GerardZek - 2017-04-28  23:53:42
 фартовый вебресурс [url=http://dip-shop.com/]Купить свидетельство, диплом курсов повара Москва[/url]
Naidachen - 2017-04-28  22:21:39
 I really like and appreciate your article post.Really looking forward to read more. Fantastic. [url=http://2e00pztj.tumblr.com/]Pierre[/url]
Abaguehype - 2017-04-28  22:08:14
 [url=http://safe-store-usa.com/#ibuprofen-erectile-dysfunction]erectile dysfunction only with partner[/url] history of pharmacy [url=http://best-store-us.com/#pomegranate-juice-and-erectile-dysfunction]viagra number[/url] short hills pharmacy [url=http://best-store-usa.com/#do-i-need-a-prescription-to-buy-viagra]target pharmacy nicollet mall[/url] cpt code for erectile dysfunction [url=http://usa-safe-store.com/#health-spectrum-pharmacy]walmart pharmacy cialis price[/url] 24 hour pharmacy seattle
Abaguehype - 2017-04-28  21:00:15
 [url=http://safe-store-usa.com/#kentucky-board-of-pharmacy]cialis for daily use dosage[/url] viagra hearing loss [url=http://usa-best-store.com/#pharmacy-technician-salary-walgreens]rite care pharmacy[/url] pharmacy technician school [url=http://usa-best-store.com/#over-the-counter-cialis]viagra gel sachets[/url] lake pharmacy [url=http://us-best-store.com/#does-generic-viagra-work-the-same]public pharmacy[/url] jewel pharmacy
Patrickfup - 2017-04-28  18:55:55
 order online cheap Cialis Strong Pack-60 in UK/GB non prescription needed ; purchase cheap online Cialis Strong Pack-60 in UK c.o.d. NO PRESCRIPTION

[url=http://worldmailes.com/pharm/go.php?sid=1&search=Cialis Strong Pack-60] [u][b]>>> Want to buy Cialis Strong Pack-60 with Discount? CLICK HERE! https://tr.im/trustedpharmacy




http://www.bravo.pl/blog/ultdocs/requip-cheapest-prices--fast-shipping-requip-cheap-c-o-d--no-rx/ids,344424/ida,1235202/ - order cheap Requip NO PRESCRIPTION pharmacy; - USA Online Pharmacy Trimox prescriptions online
http://www.bravo.pl/blog/ultdocs/zovirax-cheap-pricefast-shipping--cheapest-prices-zovirax-no-prescription-pharmacy/ids,344424/ida,1234079/ - buying Zovirax tablet without script; - How To Purchase Mildonium ove
ight without prescription
http://www.bravo.pl/blog/ultdocs/septilin-fast-shipping-cheapest-pills-septilin-pharmacy-without-a-prescription/ids,344424/ida,1235192/ - where can i purchase Septilin from Approved Pharmacy; - Lowest Price Of Rocaltrol without script pharmacy
http://www.bravo.pl/blog/ultdocs/geriforte-best-price--cheap-online-order-geriforte-delivery-no-prescription/ids,344424/ida,1233408/ - how to order Geriforte from a usa pharmacy without a prescription; - Purchase in USA Online Lida Daidaihua no rx, fast worldwide shipping
http://www.bravo.pl/blog/ultdocs/endep-what-isside-effects---fda-approved-endep-pharmacy-no-prescription/ids,344424/ida,1231876/ - discount price Endep pharmacy without prescription; - Buy in Australia Discount Super Pack no prescription
http://www.bravo.pl/blog/ultdocs/risperdal-cheap-price-purchase-at-low-price-risperdal-no-prescription/ids,344424/ida,1234954/ - licensed pharmacy Risperdal shipped by cash on delivery; - Cheap Price Of Cipro for sale online
http://www.bravo.pl/blog/ultdocs/abilify-price-in-usa--cheapest-price-to-order-abilify-without-doctor-prescription/ids,344424/ida,1235155/ - cheap price of Abilify pay with mastercard,visa,ach,echeck; - Order in Australia Cheap Online Levitra Pack-30 overseas with no prescriptions
http://www.bravo.pl/blog/ultdocs/viagra-jelly-cheap-pricefast-shipping--quiqly-delivery-viagra-jelly-without-dr-prescription/ids,344424/ida,1232722/ - cheapest price to order Viagra Jelly without script; - Fast Delivery Detrol next day delivery
http://www.bravo.pl/blog/ultdocs/lamisil-price-in-usa--online-pharmacy-lamisil-ove
ight-without-prescription/ids,344424/ida,1232758/ - low prices Lamisil online visa no rx; - Buy in USA Discount Ceclor next day delivery
http://www.bravo.pl/blog/ultdocs/zocor-cheap-pricefast-shipping--how-can-i-buy-zocor-pay-cod-no-prescription/ids,344424/ida,1233494/ - purchase at low price Zocor pharmacy NO PRESCRIPTION; - Order Low Price Viagra no prescription ove
ight
http://www.bravo.pl/blog/ultdocs/aristocort-fast-shipping--where-to-order-aristocort-next-day-shipping-product/ids,344424/ida,1233322/ - online Aristocort with VISA or MasterCard; - Where Can I Buy in USA Zestoretic with no prescriptions
http://www.bravo.pl/blog/ultdocs/detrol-how-to-useside-effects---buy-discount-detrol-no-dr-approval-cash-on-delivery/ids,344424/ida,1235115/ - safe order Detrol NO PRESCRIPTION required; - Fda Approved Fosamax delivery no prescription
http://www.bravo.pl/blog/ultdocs/combimist-l-inhaler-how-to-useside-effects--order-combimist-l-inhaler-ove
ight-saturday-delivery-no-prescription/ids,344424/ida,1234679/ - safe order Combimist L Inhaler shipped by cash on delivery; - Quality Generic Eldepryl no prescription next day delivery
http://www.bravo.pl/blog/ultdocs/terramycin-supply-from-india--lowest-prices-terramycin-with-ove
ight-delivery/ids,344424/ida,1234161/ - generic drugs Terramycin pharmacy WITHOUT a PRESCRIPTION; - Pharmacies in Canada That Sell Levitra Pack-60 - how to use,side effects,information
http://www.bravo.pl/blog/ultdocs/wellbutrin-sr-best-buy--price-of-wellbutrin-sr-ove
ight-without-dr-approval/ids,344424/ida,1232310/ - how to order Wellbutrin SR cash on delivery online prescriptions; - Buy Cheap in USA Prevacid in no prescription
http://www.bravo.pl/blog/ultdocs/starlix-cheap-pricefast-shipping--buy-online-starlix-ove
ight-no-prescription/ids,344424/ida,1232028/ - generic drugs Starlix saturday delivery; - How To Order in Canada Voltaren next day delivery no rx
http://www.bravo.pl/blog/ultdocs/artane-cheapest-prices--cheapest-price-to-order-artane-no-prescription-pharmacy/ids,344424/ida,1233496/ - where can i purchase Artane with cash on delivery,no rx; - Order Furadantin pharmacy no prescription
http://www.bravo.pl/blog/ultdocs/betapace-cheapest-prices--indian-generic-betapace-without-prescription/ids,344424/ida,1234378/ - buy safety Betapace next day delivery; - Buying in GB / UK Generic Calcium Carbonate without a prescription
http://www.bravo.pl/blog/ultdocs/viagra-professional-cheap-pricefast-shipping--low-price-viagra-professional-cheap-c-o-d--no-rx/ids,344424/ida,1234996/ - how can i buy Viagra Professional NO SCRIPT required express delivery; - Order in United States cheapest Zetia c.o.d. saturday delivery
http://www.bravo.pl/blog/ultdocs/harvoni-supply-from-india--wholesale-cheapest-harvoni-no-prescription-pharmacy/ids,344424/ida,1232839/ - ordering online Harvoni next day shipping product; - Purchase in Canada At Low Price Danazol no prescription fast delivery
http://www.bravo.pl/blog/ultdocs/elimite-cheap-price-purchase-cheap-online-elimite-at-discounted-prices/ids,344424/ida,1234003/ - where can i purchase Elimite no dr approval cash on delivery; - Purchase Cheap Online in Australia Vitria with no rx
http://www.bravo.pl/blog/ultdocs/kamagra-soft-cheap-pricefast-shipping--cheapest-prices-kamagra-soft-saturday-delivery/ids,344424/ida,1234267/ - how to order Kamagra Soft overseas with NO PRESCRIPTIONs; - Online in GB / UK Glucovance no rx required
http://www.bravo.pl/blog/ultdocs/esidrix-cheapest-prices-cheapest-esidrix-no-rx-required/ids,344424/ida,1233126/ - buy at low price Esidrix from a usa pharmacy without a prescription; - Ordering Online Catapres non prescription
http://www.bravo.pl/blog/ultdocs/lozol-in-uk--purchase-at-lowest-price-lozol-from-a-usa-pharmacy-without-a-prescription/ids,344424/ida,1233352/ - lowest price Lozol ove
ight NO PRESCRIPTION; - Order Low Price Catapres next day no prescription needed
http://www.bravo.pl/blog/ultdocs/lukol-in-canada-cheap-online-pharmacy-lukol-next-day-no-prescription-needed/ids,344424/ida,1232110/ - best place to buy Lukol ove
ight without prescription; - How To Buy Artane from u.s. pharmacy no prescription
http://faceactivities.com/groups/sinemet-cr-best-buyhow-much-sinemet-cr-from-a-canadian-pharmacy/ - order online at low cost Sinemet Cr shipped ove
ight without a prescription - GB / UK Online Pharmacy Altace - how to use,side effects,information
Grigoriyfremn - 2017-04-28  18:37:24
 Пол дня анализировал материалы сети, при этом к своему удивлению обнаружил неплохой вебсайт. Вот смотрите: [url=http://7plit.ru/catalog/aksessuary/tekstil/tekstil-dlya-kuhni/fartuki/]Фартуки[/url] . Для моих близких данный ресурс оказал незабываемое впечатление. До встречи!
Sammyflued - 2017-04-28  16:33:01
 cialis billig
cialis billig kaufen ohne rezept
cialis ohne rezept
[url=https://apothekegenerika.com/viagra/]look[/url]
cialis 5mg preise
cialis 10mg preise
viagra kaufen ohne rezept
South-berwick-pharmacy - 2017-04-28  15:54:47
 [url=http://safe-shopping-us.com/#what-is-viagra-medicine]erectile dysfunction blogs[/url] natural alte
atives to viagra [url=http://best-store-usa.com/#cheap-viagra-professional]cialis daily pill[/url] wallmart pharmacy [url=http://usa-safe-store.com/#generic-viagra-buy-online]how to buy viagra online without prescription[/url] female viagra how it works [url=http://best-store-us.com/#can-low-blood-pressure-cause-erectile-dysfunction]levitra not working[/url] cheapest generic cialis online
Cvs-pharmacy-grand-rapids-mi - 2017-04-28  15:54:46
 [url=http://best-store-usa.com/#sildenafil-cvs]pharmacy tech trainee jobs[/url] liquid tadalafil [url=http://best-store-usa.com/#sildenafil-price-walmart]wegmans pharmacy dewitt[/url] cialis online forum [url=http://usa-safe-store.com/#stop-&-shop-pharmacy]erectile dysfunction at 22[/url] where to buy real viagra online [url=http://best-store-us.com/#cost-of-viagra-tablet]late night pharmacy[/url] alte
ative to viagra
Tioneliftaddeni - 2017-04-28  15:47:00
 РѕС‡РёСЃС‚итель тион
https://www.youtube.com/watch?v=RAp5SkZzhBM

вентиляция квартира
вентиляция дом
бризер о2
бризер купить
Tioneliftaddeni - 2017-04-28  15:46:38
 РѕС‡РёСЃС‚итель тион
https://www.youtube.com/watch?v=RAp5SkZzhBM

вентиляция квартира
вентиляция дом
бризер о2
бризер купить
Herbal-treatments-for-erectile-dysfunction - 2017-04-28  14:37:32
 [url=http://best-store-usa.com/#pharmacy-tech-classes]caremark pharmacy phone number[/url] pharmacy onesource [url=http://safe-shopping-us.com/#cvs-pharmacy-number]us pharmacy online viagra[/url] viagra alte
atives [url=http://safe-shopping-usa.com/#best-over-the-counter-erectile-dysfunction]kaiser roseville pharmacy[/url] icore pharmacy [url=http://best-store-usa.com/#cialis-2.5-mg-daily]st vincent de paul pharmacy[/url] cialis 30 mg
Viagra-online-forum - 2017-04-28  14:37:31
 [url=http://safe-shopping-usa.com/#side-effects-of-viagra-tablets]over the counter viagra at walgreens[/url] viagra side effects webmd [url=http://safe-store-usa.com/#canadian-pharmacy-viagra-reviews]nasal spray for erectile dysfunction[/url] cialis canada online pharmacy no prescription [url=http://safe-store-usa.com/#20mg-cialis-cost]viagra meaning[/url] how does the female viagra work [url=http://usa-best-store.com/#viagra-impotence]bilo pharmacy hours[/url] viagra online pharmacy usa
Student-doctor-network-pharmacy - 2017-04-28  12:37:25
 [url=http://best-store-us.com/#cialis-plus]tadalafil sildenafil[/url] how to buy viagra over the counter [url=http://us-best-store.com/#erectile-dysfunction-kegel]cialis information[/url] levitra tablets side effects [url=http://usa-best-store.com/#cialis-tips]viagra in germany[/url] generic levitra [url=http://safe-shopping-us.com/#advanced-pharmacy]cialis one a day cost[/url] eaton pharmacy
Erectile-dysfunction-tablets-uk - 2017-04-28  11:36:46
 [url=http://us-safe-store.com/#alcohol-and-cialis]viagra canadian pharmacy[/url] when women take viagra [url=http://usa-best-store.com/#how-to-cure-erectile-dysfunction]viagra cialis online[/url] pharmacy shelving [url=http://us-safe-store.com/#pharmacy-schools-in-pa]walmart pharmacy denton tx[/url] safe generic viagra online [url=http://safe-shopping-us.com/#how-many-men-suffer-from-erectile-dysfunction]tablets like viagra[/url] levitra 60 mg
What-is-the-cost-of-cialis - 2017-04-28  10:25:16
 [url=http://us-best-store.com/#calcium-erectile-dysfunction]how do i take cialis[/url] how to become a pharmacy technician [url=http://usa-safe-store.com/#cheapest-viagra-online-pharmacy]cialis no prescription canada[/url] viagra pills for men for sale [url=http://safe-store-us.com/#viagra-50-mg]24 hr pharmacies near me[/url] cialis tadalafil 10mg tablets [url=http://safe-shopping-us.com/#cialis-for-bph-treatment]viagra for female[/url] sildenafil female
RickyHub - 2017-04-28  09:42:34
 [url=https://www.voiceofdance.com/]別れさせ屋[/url]
.
Antongyday - 2017-04-28  09:22:13
 Греющийся кабель [url=http://kc-centr.ru/samoreguliruyushhijsya-greyushhij-kabel-lavita/obogrev-truboprovodov-gws/samoreguliruyushhij-kabel-gws-srl-24-2-lavita]Огромный выбор GWS/SRL/SMS/GRX/RGS/ISR/VMS/SRF/TMS[/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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.