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ářů(10301)
EASERARCASSE - 2017-08-27  00:46:38
 Приветсвую, друзья!
Посетите интересный проект: http://boxing-art.ru - тренировки по боксу. Разумеется обучение боксу.И понятношкола бокса москва.
Профиль вебстраницы [url=http://boxing-art.ru/novoe/trener-po-boksu-ekstra-klassa.html]тренер по боксу экстра класса[/url].
Надо полагать удовлетворительно.
Желаю всем удачи, дорогие друзья.
Шурик
RussellMak - 2017-08-26  22:20:27
 wowcure claims that they have the best [url=http://wowcure.com/buy-viagra-online]generic viagra[/url].
and also customers [url=http://wowcure.com/buy-viagra-online]buy viagra[/url] online on high volume from them
I am also their customers of [url=http://wowcure.com/buy-viagra-online]viagra 100mg[/url].
[url=http://wowcure.com]wowcure[/url] also provide [url=http://wowcure.com]pharmacy dropship services[/url] to the [url=http://wowcure.com/buy-viagra-online]viagra pharmacy[/url]
[url=http://wowcure.com/buy-ultram-online]buy ultram online[/url] at http://wowcure.com/buy-ultram-online
[url=http://wowcure.com/buy-Ativan-online]buy ativan online[/url] at http://wowcure.com/buy-Ativan-online
[url=http://wowcure.com/buy-xanax-online]buy xanax online[/url] at http://wowcure.com/buy-xanax-online
[url=http://wowcure.com/hydrocodone]buy hydrocodone online[/url] at http://wowcure.com/hydrocodone
[url=http://wowcure.com/buy-oxycodone]buy oxycodone online[/url] at http://wowcure.com/buy-oxycodone
[url=http://wowcure.com/Buy-Female-Viagra-Online]buy female viagra[/url] at http://wowcure.com/Buy-Female-Viagra-Online
[url=http://wowcure.com/buy-viagra-online]buy viagra online[/url] at http://wowcure.com/buy-viagra-online
[url=http://wowcure.com/Buy-Cialis-online]buy cialis online[/url] at http://wowcure.com/Buy-Cialis-online
[url=http://wowcure.com/buy-levitra-online]buy levitra online[/url] at http://wowcure.com/buy-levitra-online
[url=http://wowcure.com/buy-carisoprodol]buy carisoprodol online[/url] at http://wowcure.com/buy-carisoprodol
[url=http://wowcure.com/buy-fioricet-online]buy fioricet online[/url] at http://wowcure.com/buy-fioricet-online
[url=http://wowcure.com/buy-fioricet-online]buy butalbital online[/url] at http://wowcure.com/buy-fioricet-online
[url=http://wowcure.com/buy-valium-online]buy valium online[/url] at http://wowcure.com/buy-valium-online
[url=http://wowcure.com/buy-mogadon-online]buy mogadon online[/url] at http://wowcure.com/buy-mogadon-online
[url=http://wowcure.com/buy-imovane-online]buy imovane online[/url] at http://wowcure.com/buy-imovane-online
[url=http://wowcure.com/buy-klonopin-online]buy klonopin online[/url] at http://wowcure.com/buy-klonopin-online
[url=http://wowcure.com/buy-ambien-online]buy ambien online[/url] at http://wowcure.com/buy-ambien-online
[url=http://wowcure.com/buy-ambien-online]buy zolpidem online[/url] at http://wowcure.com/buy-ambien-online
[url=http://wowcure.com/buy-adipex-online]buy adipex online[/url] at http://wowcure.com/buy-adipex-online
[url=http://wowcure.com/buy-adipex-online]buy phentermine online[/url] at http://wowcure.com/buy-adipex-online
[url=http://wowcure.com/buy-meridia-online]buy meridia online[/url] at http://wowcure.com/buy-meridia-online
[url=http://wowcure.com/Buy-Reductil-Online]buy reductil online[/url] at http://wowcure.com/Buy-Reductil-Online
[url=http://wowcure.com/Buy-Reductil-Online]buy sibutramine online[/url] at http://wowcure.com/Buy-Reductil-Online
RussellMak - 2017-08-26  17:23:29
 wowcure claims that they have the best [url=http://wowcure.com/buy-viagra-online]generic viagra[/url].
and also customers [url=http://wowcure.com/buy-viagra-online]buy viagra[/url] online on high volume from them
I am also their customers of [url=http://wowcure.com/buy-viagra-online]viagra 100mg[/url].
[url=http://wowcure.com]wowcure[/url] also provide [url=http://wowcure.com]pharmacy dropship services[/url] to the [url=http://wowcure.com/buy-viagra-online]viagra pharmacy[/url]
[url=http://wowcure.com/buy-ultram-online]buy ultram online[/url] at http://wowcure.com/buy-ultram-online
[url=http://wowcure.com/buy-Ativan-online]buy ativan online[/url] at http://wowcure.com/buy-Ativan-online
[url=http://wowcure.com/buy-xanax-online]buy xanax online[/url] at http://wowcure.com/buy-xanax-online
[url=http://wowcure.com/hydrocodone]buy hydrocodone online[/url] at http://wowcure.com/hydrocodone
[url=http://wowcure.com/buy-oxycodone]buy oxycodone online[/url] at http://wowcure.com/buy-oxycodone
[url=http://wowcure.com/Buy-Female-Viagra-Online]buy female viagra[/url] at http://wowcure.com/Buy-Female-Viagra-Online
[url=http://wowcure.com/buy-viagra-online]buy viagra online[/url] at http://wowcure.com/buy-viagra-online
[url=http://wowcure.com/Buy-Cialis-online]buy cialis online[/url] at http://wowcure.com/Buy-Cialis-online
[url=http://wowcure.com/buy-levitra-online]buy levitra online[/url] at http://wowcure.com/buy-levitra-online
[url=http://wowcure.com/buy-carisoprodol]buy carisoprodol online[/url] at http://wowcure.com/buy-carisoprodol
[url=http://wowcure.com/buy-fioricet-online]buy fioricet online[/url] at http://wowcure.com/buy-fioricet-online
[url=http://wowcure.com/buy-fioricet-online]buy butalbital online[/url] at http://wowcure.com/buy-fioricet-online
[url=http://wowcure.com/buy-valium-online]buy valium online[/url] at http://wowcure.com/buy-valium-online
[url=http://wowcure.com/buy-mogadon-online]buy mogadon online[/url] at http://wowcure.com/buy-mogadon-online
[url=http://wowcure.com/buy-imovane-online]buy imovane online[/url] at http://wowcure.com/buy-imovane-online
[url=http://wowcure.com/buy-klonopin-online]buy klonopin online[/url] at http://wowcure.com/buy-klonopin-online
[url=http://wowcure.com/buy-ambien-online]buy ambien online[/url] at http://wowcure.com/buy-ambien-online
[url=http://wowcure.com/buy-ambien-online]buy zolpidem online[/url] at http://wowcure.com/buy-ambien-online
[url=http://wowcure.com/buy-adipex-online]buy adipex online[/url] at http://wowcure.com/buy-adipex-online
[url=http://wowcure.com/buy-adipex-online]buy phentermine online[/url] at http://wowcure.com/buy-adipex-online
[url=http://wowcure.com/buy-meridia-online]buy meridia online[/url] at http://wowcure.com/buy-meridia-online
[url=http://wowcure.com/Buy-Reductil-Online]buy reductil online[/url] at http://wowcure.com/Buy-Reductil-Online
[url=http://wowcure.com/Buy-Reductil-Online]buy sibutramine online[/url] at http://wowcure.com/Buy-Reductil-Online
JeffreyOWNET - 2017-08-26  16:56:44
 Enigma — Шаблоны WordPress. Скачать бесплатно премиум шаблон Вордпресс [url=http://ruwordpress.ru/enigma/]More info![/url]
Promobalp - 2017-08-26  14:41:00
 http://lms.naeyc.org/?cialis-information-medical
http://lms.naeyc.org/?cialis-information-patent
http://lms.naeyc.org/?cialis-information-prescribing
Lonnieundum - 2017-08-26  14:36:06
 fwnzqou

http://www.acgproducciones.es/clarks-sneakers-womens-572.html
http://www.uffg.es/air-jordan-3-on-feet-728.html
http://www.spainlacrosse.es/nike-cortez-nuevos-estilos-393.html
http://www.dongpengvideo.es/louboutin-baratos-nueva-york-505.html
http://www.clinicadeldolo
euromuscular.es/adidas-superstar-de-militar-801.html

[url=http://www.pergolasdemadera.org.es/gafas-ray-ban-polarizadas-ofertas-772.htm]Gafas Ray Ban Polarizadas Ofertas[/url]
[url=http://www.mainlinepower.es/adidas-stan-smith-84-067.html]Adidas Stan Smith 84[/url]
[url=http://www.gprs-controladores.es/oakley-holbrook-oo9102-38-010.html]Oakley Holbrook Oo9102 38[/url]
[url=http://www.planosdecasas.com.es/reebok-npc-altos-655.asp]Reebok Npc Altos[/url]
[url=http://www.tv-gratuite.fr/adidas-stan-smith-cuir-302.htm]Adidas Stan Smith Cuir[/url]
Curtisfum - 2017-08-26  12:52:01
 Мы ценим ваше время и делим с вами общие цели. Ваши продажи для нас главный приоритет.
заказать прогон хрумером логин скайпа SEO2000[/url]

оращайтесь договримся есть примеры работ логин скайпа SEO2000
Etherrug - 2017-08-26  10:54:41
 Приветствую Вас, интернетовский народ!
Обратите внимание на симпатичный вебсайт: http://1koreaclub.ru/ - киа в Медведково. Кроме того hyundai в Алтуфьево И напоследок хендай Алтуфьево.
Цель проекта [url=http://1koreaclub.ru/stati/item/14-kia-v-medvedkovo-v-nashem-salone]Киа в Медведково – в нашем салоне[/url].
Удачи, Вам.
Борис
FrankWak - 2017-08-26  06:06:33
 qbpbtor

http://www.bluerennes.fr/624-nike-air-max-95-ultra-jacquard-pas-cher.php
http://www.ihclatour.ch/nike-presto-flyknit-206.php
http://www.as-assainissement.fr/saucony-triumph-11-homme-094.php
http://www.gamick.fr/new-balance-574-homme-896.html
http://www.iloveshoes.fr/nike-sport-2016-741.html

[url=http://www.schwoerer-regio.fr/polo-ralph-lauren-660.html]Polo Ralph Lauren[/url]
[url=http://www.hd3d.fr/huarache-femme-gris-et-rose-623.html]Huarache Femme Gris Et Rose[/url]
[url=http://www.beatassailant.fr/adidas-ace-17-pogba-852.php]Adidas Ace 17 Pogba[/url]
[url=http://www.treguier-immobilier.fr/chaussure-a-talon-avec-diamant-411.html]Chaussure A Talon Avec Diamant[/url]
[url=http://www.trioelegiaque.fr/adidas-zx-750-gris-verde-013.html]Adidas Zx 750 Gris Verde[/url]
ReviaLek - 2017-08-26  04:33:06
 [url=http://reddy3.spmuz1.ru/map1.html]http://reddy3.spmuz1.ru/map1.html[/url]

http://reddy5.spmuz1.ru/map1.html


http://red3.ghiddns.com/map1.html


[url=http://red3.ghiddns.com/igrushki/84997-prostitutki-po-1000-rublej-individualki-v-moskve.html]проститутки по 1000 рублей индивидуалки в москве[/url] на каких улицах в москве стоят проститутки проститутки по 1000 рублей индивидуалки в москве на каких улицах в москве стоят проститутки http://red3.ghiddns.com/igrushki/84997-prostitutki-po-1000-rublej-individualki-v-moskve.html Кто имеет клиент проститутку или она его
[url=http://reddy4.spmuz1.ru/trampling/21363-kody-v-gta-san-andreas-na-prostitutku.html]коды в гта сан андреас на проститутку[/url] проститутки с грудью от 6 размера москва коды в гта сан андреас на проститутку проститутки с грудью от 6 размера москва http://reddy4.spmuz1.ru/trampling/21363-kody-v-gta-san-andreas-na-prostitutku.html Проститутки индивидуалки москва от 40 до 50 лет
[url=http://red4.ghiddns.com/foto/70228-gde-mozhno-snjat-prostitutku-v-gorode-saratov.html]где можно снять проститутку в городе саратов[/url] проститутки ростова на дону фото и номерами телефонов где можно снять проститутку в городе саратов проститутки ростова на дону фото и номерами телефонов http://red4.ghiddns.com/foto/70228-gde-mozhno-snjat-prostitutku-v-gorode-saratov.html Где можно снять проститутку в москве дешево
[url=http://red2.ghiddns.com/video/84609-chto-delat-esli-muzh-hodit-k-prostitutkam.html]что делать если муж ходит к проституткам[/url] снял проститутку в машине на скрытую камеру что делать если муж ходит к проституткам снял проститутку в машине на скрытую камеру http://red2.ghiddns.com/video/84609-chto-delat-esli-muzh-hodit-k-prostitutkam.html У всех ли был секс с проституткой
[url=http://red2.ghiddns.com/gospozha/98422-chego-hochet-muzhchina-v-sekse-ot-prostitutki.html]чего хочет мужчина в сексе от проститутки[/url] ты выжигай меня проститутками а я тебя дорогими мужчинами чего хочет мужчина в сексе от проститутки ты выжигай меня проститутками а я тебя дорогими мужчинами http://red2.ghiddns.com/gospozha/98422-chego-hochet-muzhchina-v-sekse-ot-prostitutki.html Интимный дневник записки лондонской проститутки читать онлайн
ReviaLek - 2017-08-26  03:59:03
 [url=http://red5.ghiddns.com/map1.html]http://red5.ghiddns.com/map1.html[/url]

http://reddy3.spmuz1.ru/map1.html


http://reddy4.spmuz1.ru/map1.html


[url=http://red1.ghiddns.com/eskort/71802-telefony-individualok-slavjanska-na-kubani-bez-registracii.html]телефоны индивидуалок славянска на кубани без регистрации[/url] у кого был секс опыт с проститутками телефоны индивидуалок славянска на кубани без регистрации у кого был секс опыт с проститутками http://red1.ghiddns.com/eskort/71802-telefony-individualok-slavjanska-na-kubani-bez-registracii.html Можно ли заразится от проститутке если в презервативе
[url=http://red1.ghiddns.com/video/56599-seks-s-prostitutkoj-o-chem-nuzhno-znat.html]секс с проституткой о чем нужно знать[/url] проститутки нижний новгород от 500 до 1000 секс с проституткой о чем нужно знать проститутки нижний новгород от 500 до 1000 http://red1.ghiddns.com/video/56599-seks-s-prostitutkoj-o-chem-nuzhno-znat.html Проститутки с номерами телефона в ростовской области
[url=http://reddy5.spmuz1.ru/bdsm/32796-znakomstvo-s-prostitutkami-dlja-seksa-i-ih.html]знакомство с проститутками для секса и их фото[/url] проститутки в екатеринбурге в районе южного автовокзала знакомство с проститутками для секса и их фото проститутки в екатеринбурге в районе южного автовокзала http://reddy5.spmuz1.ru/bdsm/32796-znakomstvo-s-prostitutkami-dlja-seksa-i-ih.html Где стоят проститутки в москве и области на
[url=http://reddy3.spmuz1.ru/strapon/32416-prostitutki-s-telefonom-bez-registracii-stavropolskij-kraj.html]проститутки с телефоном без регистрации ставропольский край[/url] проститутки москва от 1000 рублей в день проститутки с телефоном без регистрации ставропольский край проститутки москва от 1000 рублей в день http://reddy3.spmuz1.ru/strapon/32416-prostitutki-s-telefonom-bez-registracii-stavropolskij-kraj.html Папа и сын с проституткой смотреть онлайн
[url=http://reddy4.spmuz1.ru/porka/71753-stoit-na-uglu-prostitutka-podhodit-k-nej.html]стоит на углу проститутка подходит к ней[/url] где в москве стоят проститутки на дорогах стоит на углу проститутка подходит к ней где в москве стоят проститутки на дорогах http://reddy4.spmuz1.ru/porka/71753-stoit-na-uglu-prostitutka-podhodit-k-nej.html Как вести себя по телефону с проститутками
Promobalp - 2017-08-26  02:51:17
 http://lms.naeyc.org/?cialis-side-effects
http://lms.naeyc.org/?cialis-side-reffects
http://lms.naeyc.org/?cialis-sideaffects
Aromamedeg - 2017-08-26  02:18:11
 kenalog cream over the counter [url=http://jinjiro41.tumblr.com/#87371]jinjiro41-tumblr[/url] ben taub medical records
Agustinababs - 2017-08-26  00:06:26
 https://cbdoil4u.org/ cbd oil for anxiety disorder reviews - cbdoil4u.org [url=https://cbdoil4u.org/]https://cbdoil4u.org/[/url] benefits of cbd oil for skin conditions - cbdoil4u.org

cbd oil side effects stomach pain - cbdoil4u.org cbd oil for skin cancer treatment - cbdoil4u.org cbdoil4u buy cbd oil for cancer treatment - cbdoil4u.org
ReviaLek - 2017-08-25  20:45:50
 [url=http://reddy5.spmuz1.ru/map1.html]http://reddy5.spmuz1.ru/map1.html[/url]

http://red1.ghiddns.com/map1.html


http://reddy4.spmuz1.ru/map1.html


[url=http://red5.ghiddns.com/strapon/00314-bez-prostitutok-i-vorov-zhizn-kak-bez.html]без проституток и воров жизнь как без фантика[/url] был секс с проституткой в презервативе заразился без проституток и воров жизнь как без фантика был секс с проституткой в презервативе заразился http://red5.ghiddns.com/strapon/00314-bez-prostitutok-i-vorov-zhizn-kak-bez.html Где в москве можно снять на улице проститутку
[url=http://red1.ghiddns.com/bandazh/30936-gde-stojat-prostitutki-v-moskve-i-moskovskoj.html]где стоят проститутки в москве и московской области[/url] как нанять проститутку в saints row 3 где стоят проститутки в москве и московской области как нанять проститутку в saints row 3 http://red1.ghiddns.com/bandazh/30936-gde-stojat-prostitutki-v-moskve-i-moskovskoj.html Ты забываешь меня проститутками я тебя дорогими мужчинами
[url=http://red5.ghiddns.com/eroticheskij-massazh/74545-prostitutki-ot-500-rublej-v-sankt-peterburge.html]проститутки от 500 рублей в санкт петербурге[/url] самые дешевые и старые проститутки в туле проститутки от 500 рублей в санкт петербурге самые дешевые и старые проститутки в туле http://red5.ghiddns.com/eroticheskij-massazh/74545-prostitutki-ot-500-rublej-v-sankt-peterburge.html Проститутки москвы от 40 до 60 лет
[url=http://reddy3.spmuz1.ru/trampling/89258-mozhno-li-v-simse-3-vyzyvat-prostitutku.html]можно ли в симсе 3 вызывать проститутку[/url] где можно снять проститутку и за сколько можно ли в симсе 3 вызывать проститутку где можно снять проститутку и за сколько http://reddy3.spmuz1.ru/trampling/89258-mozhno-li-v-simse-3-vyzyvat-prostitutku.html Зрелые проститутки от 35 лет и старше
[url=http://red2.ghiddns.com/fetish/78819-individualki-ufy-s-realnymi-foto-i-otzyvy.html]индивидуалки уфы с реальными фото и отзывы[/url] проститутки индивидуалки с проверенными фото из новосибирска индивидуалки уфы с реальными фото и отзывы проститутки индивидуалки с проверенными фото из новосибирска http://red2.ghiddns.com/fetish/78819-individualki-ufy-s-realnymi-foto-i-otzyvy.html Проститутки на ночь по 5000 в москве
ReviaLek - 2017-08-25  20:11:28
 [url=http://red2.ghiddns.com/map1.html]http://red2.ghiddns.com/map1.html[/url]

http://red3.ghiddns.com/map1.html

http://red1.ghiddns.com/map1.html


[url=http://reddy4.spmuz1.ru/eskort/96262-prostitutka-i-semejnaja-para-smotret-onlajn-besplatno.html]проститутка и семейная пара смотреть онлайн бесплатно[/url] можно ли в saints row third снимать проституток проститутка и семейная пара смотреть онлайн бесплатно можно ли в saints row third снимать проституток http://reddy4.spmuz1.ru/eskort/96262-prostitutka-i-semejnaja-para-smotret-onlajn-besplatno.html Как вести себя с проституткой в сауне
[url=http://reddy1.spmuz1.ru/fetish/40690-prostitutki-v-moskve-na-jugo-zapadnom-metro.html]проститутки в москве на юго западном метро[/url] индивидуалки номера телефонов без регистрации в южно-сахалинске проститутки в москве на юго западном метро индивидуалки номера телефонов без регистрации в южно-сахалинске http://reddy1.spmuz1.ru/fetish/40690-prostitutki-v-moskve-na-jugo-zapadnom-metro.html На каких улицах в уфе стоят проститутки
[url=http://red4.ghiddns.com/video/35390-chitat-v-onlajne-knigu-zapiski-prostitutki-ket.html]читать в онлайне книгу записки проститутки кэт[/url] путаны шлюхи девочки по вызову проститутки индивидуалки читать в онлайне книгу записки проститутки кэт путаны шлюхи девочки по вызову проститутки индивидуалки http://red4.ghiddns.com/video/35390-chitat-v-onlajne-knigu-zapiski-prostitutki-ket.html Как вести себя с проституткой в первый раз
[url=http://red4.ghiddns.com/foto/48494-pervyj-raz-s-prostitutkoj-kak-sebja-vesti.html]первый раз с проституткой как себя вести[/url] проститутки на ночь в москве на дом первый раз с проституткой как себя вести проститутки на ночь в москве на дом http://red4.ghiddns.com/foto/48494-pervyj-raz-s-prostitutkoj-kak-sebja-vesti.html Исповедь элитной проститутки смотреть онлайн в хорошем качестве
[url=http://red1.ghiddns.com/foto/64198-chto-delat-esli-seks-bez-prezervativa-s.html]что делать если секс без презерватива с проституткой[/url] камеди вумен проводы проститутки на пенсию смотреть онлайн что делать если секс без презерватива с проституткой камеди вумен проводы проститутки на пенсию смотреть онлайн http://red1.ghiddns.com/foto/64198-chto-delat-esli-seks-bez-prezervativa-s.html Как нанять проститутку в saints row 3
Eugeniakew - 2017-08-25  12:07:48
 Добрый день.
Думаете заработать на своем сайте?
Актуальные биржи ссылок для заработка в 2017 году: http://seomaniya.com/3492-birzhi-ssylok-dlya-zarabotka-v-2017-godu.html
Sal - 2017-08-25  11:08:35
 Бренд 2017 однокомпонентное жидкое стекло Silane Guard - для бережного ухода за внешним видом Вашего автомобиля!
Придает сияющий блеск кузову автомобиля в течении 1 года!
Придает устойчивый водоотталкивающий эффект.
Одной упаковки хватает на 2-4 автомобиля/слоя.
Предельно простое нанесение покрытия на поверхность авто.
Отлично скрывает мелкие царапины.
Быстрая доставка по всей России, оплата при получении.

Заказать по акции 55% [url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]здесь[/url]



[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие кузова автомобиля жидкой резиной[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]жидкое стекло willson silane guard купить украина[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]защитное покрытие кузова автомобиля отзывы[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие для кузова автомобиля[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]willson silane guard 95мл купить[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие кузова автомобиля жидким стеклом отзывы[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]silane guard willson ws 01275 отзывы[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]сравнение защитных покрытий кузова автомобиля[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]защитное покрытие кузова автомобиля цена[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]средство для полировки авто silane guard[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие кузова автомобиля керамикой отзывы[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие кузова автомобиля керамикой[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]восстановление лакокрасочного покрытия кузова автомобиля цена[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]wilson silane guard drive2[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]восстановление оцинкованного покрытия кузова автомобиля[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]защитное покрытие кузова автомобиля tekko[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]покрытие кузова автомобиля полимочевиной[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]silane guard willson купить в саратове[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]лучшее защитное покрытие кузова автомобиля[/url]
[url=http://vip-zzakazz.ru/silane-guard/?ref=25466&lnk=1388722]защитное покрытие кузова автомобиля раптором[/url]



средство для полировки авто silane guard
wilson silane guard купить в иркутске
лучшее защитное покрытие кузова автомобиля
wilson silane guard drive2
покрытие для кузова автомобиля silane guard
защитное покрытие кузова автомобиля отзывы
покрытие кузова автомобиля жидким стеклом
защитные покрытия кузова автомобиля купить
покрытие кузова автомобиля керамикой отзывы
жидкое стекло willson silane guard видео
лучшее покрытие кузова автомобиля
защитное покрытие кузова автомобиля спб
wilson silane guard нанесение
зеркальное покрытия кузова автомобиля
wilson silane guard оптом
покрытие кузова автомобиля полимером
гидрофобное покрытие для кузова автомобиля
bronix защитное покрытие кузова автомобиля
cquartz finest кварцево керамическое покрытие кузова автомобиля
покрытие кузова автомобиля жидким стеклом отзывы
EngladGof - 2017-08-25  09:59:55
 Зачем такие сложно[url=http://educationinuk.ru/].[/url]
Promobalp - 2017-08-25  09:24:54
 http://lms.naeyc.org/?cialis-program
http://lms.naeyc.org/?cialis-program-card
http://lms.naeyc.org/?cialis-program-promise
<<[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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.