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ářů(9144)
Kevinnox - 2017-02-21  15:57:43
 His father is lost somewhere in time and Venn has no idea how to get him back out of the Chronoptika, which seems to react more when Jake is around.... Margaret did have to keep track of her hands as the tribes people did attempt to help her grieve for her fallen companions by hacking off a few of her digits. [url=http://newlibrarygood.com/speech-of-james.pdf]Preparing Schools And School Systems For The 21st Century[/url]
Bruno, Vice President,Brotherhood of Locomotive Engineers and TrainmenGood mo
ing, Chairman Rockefeller, Ranking Member Hutchison andmembers of the Committee. Moreover applications of water supply systems providing water in emergency condition are discussed. People today are without disce
ment between what is the Spirit ofGod at work and what is a deceiving spirit that wants them to believe itis the Spirit of God. Reck,University of South Florida - TampaSuzanne L. [url=http://newlibrarygood.com/asymptotics-of-linear.pdf]Creating A School Media Program[/url]
And we should be supportive of flexibilityand creativity in providing responsible lending to fundrestructured loans. On May 19, 2003, the U. For some babies, it may take extra coaxing to be rewarded with an enthusiastic grin. Mechanics of Flight is an essential volume for mechanical and aerospace engineering students and a valuable reference for practicing engineers in the aerospace industry. Adieu: be vigitant, I beseech you. [url=http://newlibrarygood.com/optical-thin-films.pdf]In Pursuit Of Equal Liberty: George Bryan And The Revolution In Pennsylvania[/url]
Each page is written as a baseball card. Extracts from iIk Letters anii Jou
als of William Cory, selected byF. He ending was really dry. And their policies may or may not agree, so policies andindividuals bump into each other from time to time. Low-level waste is transported from its origin to waste treatment sites, or to an intermediate or final storage facility. [url=http://newlibrarygood.com/environmental-and-occupational.pdf]Play At The Center Of Curriculum[/url]
GregoryCex - 2017-02-21  15:34:31
 y cheap medications drugs recommended viagra dosage, buy cheap medications online other uses for viagra, online pharmacy reviews can i buy viagra over the counter
Charlesguara - 2017-02-21  13:32:47
 no cvv shopping
russian cvv shop
sell cvv online
[url=http://cvvstoreonline.wixsite.com/verified-buy]buy cvv forums[/url]
cvv sellers online
cvv shop online
AndroidSBof - 2017-02-21  11:25:46
 Вот-вот наступит Новый год – самый долгожданный для многих праздник. Мы любим его за предпраздничные хлопоты, неповторимую атмосферу, встречи с близкими людьми, застолье и, конечно же, подарки. Мы, в свою очередь, подготовили подборку приложений, которые помогут вам во всей этой новогодней суете.
[url=http://androids-games-apps.blogspot.ru/][img]http://https://static.vecteezy.com/system/resources/previews/000/106/702/non_2x/happy-new-year-2017-on-green-background-vector.jpg[/img][/url]
После того, как вы определились с праздничным меню, самое время отправляться за покупками. Держать в голове список всех необходимых продуктов – нереально, записывать на листике бумаги – уже прошлый век. Приложение «Купи батон» является одним из старейших и авторитетных списков покупок для Android. Это незаменимый помощник, когда речь идет о покупках большого разнообразия продуктов. Программа очень простая и в тоже время достаточно функциональная.
[url=http://androids-games-apps.blogspot.ru/]Лучшие Android-приложения к Новому году Лучшие Android-приложения к Новому году Лучшие Android-приложения к Новому году[/url]
Основная особенность приложения – интуитивный ввод продуктов, которые необходимо купить. «Купи батон» уже содержит огромную базу различных продуктов, поэтому вместо того, чтобы каждый раз вводить их вручную, достаточно выбрать продукт из выпадающего списка. Даже если какой-то товар будет отсутствовать, вы всегда можете добавить его в этот список. За каждым продуктом закреплен определенный цвет, и это визуально упрощает восприятие списка в целом.
Интересной «фишкой» приложения является возможность отправлять готовый список продуктов кому угодно любым удобным для вас способом, а также синхронизировать его между своими устройствами. Таким образом, например, ваша половинка может набросать в приложении все, что нужно купить и отправить вам на телефон, пока вы будете на полпути к магазину.

[url=http://androids-games-apps.blogspot.ru/][img]http://api.ning.com/files/tX6IfUaTe8ZewMDDhEoCGvoJhHCAJQhixnVLypgmFFNpg2PXnRES2pwCJxPeBn5zTn9oWk9*F2iRBlEpcZt-VkGYCELu1gd*/1172360626.jpeg[/img][/url]
Вот такой получился у нас набор приложений к Новому году. А какие программы пригодятся к празднику по вашему мнению?
[url=http://androids-games-apps.blogspot.ru/]Все Android-приложения[/url]
Arthurestip - 2017-02-21  11:20:07
 Некоторое время анализировал содержимое инет, случайно к своему восторгу обнаружил нужный веб-сайт. Гляньте: [url=https://forexunion-ltd.com/]вложить и приумножить[/url] . Для нас этот сайт произвел яркое впечатление. Пока!
Andreiapeno - 2017-02-21  09:13:50
 Приветствую уважаемые форумчане.

Наша строительная компания возводит все типы фундаментов под пристройку.
[url=https://fundament.spb.su]Наша Сайт[/url]

[url=https://fundament.spb.su]как сделать винтовую сваю[/url]
BellaTor - 2017-02-21  09:06:31
 Утром познавал материалы сети, и неожиданно к своему удивлению открыл восхитительный ресурс. Вот ссылка: [url=http://ebushki.com]Проститутки города[/url] . Для нас данный вебсайт оказал незабываемое впечатление. Удачи!
GregoryCex - 2017-02-21  08:32:30
 p canada pharmacy drugs prices viagra australia no prescription, cheap medications drugs viagra shelf life, online pharmacy viagra uses
DapySydaY - 2017-02-21  08:17:13
 Приветствую Вас, интернетовский народ!
Задача вебстраницы [url=http://www.liveinte
et.ru/users/5908616/post368252330]Новороссия[/url].
Желаю всем удачи.
Саша
Arinaen - 2017-02-21  07:03:43
 [b]Алиэкспресс дарит [url=http://seo-swat.ru//8ce9l/]СКИДКИ НА ВСЕ ТОВАРЫ[/url] ДО 90% !!![/b]
ValeraTrivacizarie - 2017-02-21  03:05:44
 таблетки от похудения где купить в купить клетчатку сибирскую для похудения релакс и тон для похудения купить что купить на обед при похудении трим фаст капсулы для похудения купить в москве купить шорты для похудения отзывы китайские капсулы для похудения купить москва бриджи для похудения купить в пензе купить миостимулятор для похудения спб малышева питание для похудения купить цена кофеин для похудения купить билайт капсулы для похудения купить в украине цена дали для похудения купить в краснодаре массажер для тела для похудения купить купить средство для похудения в луганске

капли для похудения onetwoslim заказать [url=http://noippk.ru/dlya-pohudeniya-kupit/bryuki-dlya-pohudeniya-vulkan-classic-kupit.php]брюки для похудения vulkan classic купить[/url] купить тренажер для похудения живота и боков [url=http://newcleanfit.ru/obruch-dlya-pohudeniya-kupit/kupit-obruch-dlya-pohudeniya-sdelay-telo.php]купить обруч для похудения сделай тело[/url] где купить обруч для похудения в калининграде [url=http://frsh-fit.ru/dlya-pohudeniya-kupit/batonchik-evalar-dlya-pohudeniya-kupit.php]батончик эвалар для похудения купить[/url] какое средство лучше для похудения можно купить в аптеке [url=http://fitplussize.ru/shorti-dlya-pohudeniya-kupit/kupit-shorti-dlya-pohudeniya-nedorogo.php]купить шорты для похудения недорого[/url] купила чай для похудения анекдот [url=http://hudeemsostelloy.ru/zakazat/kapsuli-dlya-pohudeniya-zakazat-pochtoy.php]капсулы для похудения заказать почтой[/url]

eco slim для похудения купить в екатеринбурге бад для похудения заказать купить малиновый кетон для похудения заказать набор продуктов от елены малышевой для похудения что можно купить в аптеке для похудения в беларуси купить китайские таблетки для похудения самые эффективные купить травы для похудения сжигающие жир купить в аптеке цена бриджи и пояс для похудения hot shapers купить обруч для похудения купить недорого в москве пояс для похудения vulkan classic вулкан классик купить

средства для похудения в украине купить [url=http://goclear.ru/zakazat-dlya-pohudeniya/zakazat-dlya-pohudenie-reduksin-laym.php]заказать для похудение редуксин лайм[/url] тайские таблетки для похудения купить в паттайе [url=http://okclear.ru/kupit/zeleniy-chay-dlya-pohudeniya-kupit-v-apteke.php]зеленый чай для похудения купить в аптеке[/url] билайт для похудения купить в спб [url=http://fitplussize.ru/poyas-dlya-pohudeniya-kupit/kupit-poyas-dlya-pohudeniya-vulkan-kiev.php]купить пояс для похудения вулкан киев[/url] леовит чай для похудения купить [url=http://most-clear.ru/poyas-dlya-pohudeniya-kupit/poyas-dlya-pohudeniya-dlya-fitnesa-kupit.php]пояс для похудения для фитнеса купить[/url] купить в хабаровске таблетки для похудения [url=http://bstfitcleaner.ru/dlya-pohudeniya-kupit-tsena/kupit-otrubi-dlya-pohudeniya-tsena.php]купить отруби для похудения цена[/url]

китайские капсулы идеальный похудение заказать блокнот для похудения купить капли для похудения оне тво слим заказать где можно купить имбирь для похудения диета елены малышевой набор продуктов для похудения заказать
PharmSam - 2017-02-21  02:39:47
 h http://pharmacycanada.review online pharmacy medications http://canpharm.win viagra online pharmacy http://cph01.top buy cheap medications online
AngelaEmoks - 2017-02-21  00:33:47
 Минут пять серфил материалы интернет, неожиданно к своему восторгу обнаружил полезный ресурс. Вот смотрите: [url=http://dosugsibir.org]Путаны Новосибирска[/url] . Для меня этот сайт оказал хорошее впечатление. Удачи!
Deweytap - 2017-02-20  22:09:28
 x cheap generic viagra generic brand viagra, buy viagra online manforce sildenafil, sildenafil generic women does viagra work
Sayer83 - 2017-02-20  20:32:55
 buy olanzapine work buy generic olanzapine safe http://gravatar.com/comprarolanzapine2017 http://buyolanzapineonline.aircus.com http://ypolanzapine.aircus.com i want to buy olanzapine yahoo answers
JohnnyGob - 2017-02-20  18:47:24
 r http://viaph01.com cheap generic viagra substitute http://viagrarx.top viagra directions for use http://viagrapharmacy.review order viagra professional
Deweytap - 2017-02-20  16:39:55
 d Sildenafil 20 Mg Tablet lowest price viagra, viagra online is it safe to buy viagra online, sildenafil generic generic viagra price
Linwoodgaf - 2017-02-20  13:57:07
 [url=https://www.tangsbobet.com/ทางเข้าSBOBET]สโบเบท[/url] ทางเข้า SBOBET - SBO Mobile สโบเบท Asia สโบเบ็ต Link SBOBET ล่าสุด SBOBET SBO BETTH สโบเบ็ต Sbobet Online 24 ชั่วโมง
ผู้ให้บริการ แทงบอลออนไลน์ SBOBET(เอสบีโอเบท) อันดับ 1 ได้รับความนิยมมากที่สุด​ทางเข้า SBOBET Link ทางเข้า SBO ล่าสุด สโบเบท Mobile สโบเบ็ต Asia สมัคร SBOBET วันนี้! รับฟรี 1500 บาท ลุ้นรับ 20000 บาท ฝากถอนภายใน 5 นาที.
[url=https://www.tangsbobet.com][i][u][b]พนันบอลออนไลน์[/b][/u][/i][/url]
JohnnyGob - 2017-02-20  13:31:56
 e http://buyviagra.pw viagra spam http://viagraonline.party viagra effect on women http://drviagra.top viagra from canada
Kennethqueni - 2017-02-20  11:16:14
 [url=http://mimoto-atv.ru]купить детский квадроцикл[/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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.