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ářů(9128)
MariamDum - 2017-03-12  09:04:46
 Как сделать голливудскую улыбку

[img]http://kok7.ru/wp-content/uploads/2017/03/476_1325045118_cf8bf-158x158.jpg[/img]
Считается, что самым главным украшением любого человека является улыбка.
Быть обладателем белоснежных зубов – мечта многих женщин и мужчин,
но решиться провести процедуру отбеливания могут не все,
так как многих людей останавливает страх испортить зубную эмаль.
Вот, что считают американцы: [url=http://kok7.ru/kak-sdelat-gollivudskuyu-ulybku/]читать далее[/url]
Pachatreops - 2017-03-12  06:13:32
 Дети - цветочки жизни
Малыши – цветочки жизни, Недаром так молвят, Не надо излишней здесь харизмы, Все дети – наш расцветающий сад.
Вот семена, обычные, простые, Ничем не примечательны они, Но можем вырастить таланты все такие, Которыми смогли б гордиться мы.
С любовью, трепетно и лаского, Посадим новейший мы росток И вырастим мы с ним конечно, Красивый, огненный цветок.
Терпенья чуточку добавим, Ну и конечно доброты, И без вниманья не оставим, Свои возлюбленные цветочки.
Ухмылку мы дарить им будем, Нести для их свое тепло, Все по призванию мы люди, Нам суждено творить добро.
И вот мы лицезреем результаты, Вот наши первые ростки, Я знаю, то, что я вожатый, А все они, мои цветы!
Дети – цветы жизни, Они же – цветущий сад, Детство - оно в наших идей, И каждый то помнить рад.
Вожатый – профессия птица, Не выучить в книгах ее, В деток нужно просто влюбиться, Дать им сердце свое.
Даровать им любовь и ласку, Согреть теплом собственных рук, Открыть им новую сказку, От бед уберечь и разлук.
&copy; Copyright: Анастасия Раевская. 2014 Свидетельство о публикации №114020406697
Портал Стихи.ру предоставляет авторам возможность свободной публикации своих литературных произведений в сети Веб на основании пользовательского договора. Все права автора на произведения принадлежат создателям и охраняются законом. Перепечатка произведений возможна только с согласия его создателя, к которому вы сможете обратиться на его авторской странице. Ответственность за тексты произведений авторы несут без помощи других на основании правил публикации и российского законодательства. Вы также сможете посмотреть наиболее подробную информацию о портале и связаться с администрацией .
Ежедневная аудитория портала Стихи.ру &ndash; порядка 200 тысяч посетителей, которые в общей сумме просматривают наиболее 2-ух миллионов страничек по данным счетчика посещаемости, который расположен справа от этого текста. В каждой графе указано по две цифры: количество просмотров и количество гостей.
&copy; Все права принадлежат авторам, 2000-2017 Разработка и поддержка: Литературный клуб Под эгидой Русского союза писателей 18+

http://fjdf.eg.kinozz.lol/
http://vhrx.xz.kinozz.lol/
http://elzb.mc.kinozz.lol/
http://niyx.tu.kinozz.lol/
http://kegb.nq.kinozz.lol/

[url=http://puph.mkdi.kinozz.lol/]rhmf.tmri.kinozz.lol[/url]
[url=http://wanc.omoi.kinozz.lol/]rmiw.dcod.kinozz.lol[/url]
[url=http://lexl.diuv.kinozz.lol/]phno.uqco.kinozz.lol[/url]
[url=http://afab.qtwd.kinozz.lol/]qnjw.bqxu.kinozz.lol[/url]
[url=http://pkql.tqqt.kinozz.lol/]kwcv.ylai.kinozz.lol[/url]
DdlykdndUm - 2017-03-12  04:47:43
 buy ambien online ove
ight drug interactions with ambien and ibuprofen buy ambien online ambien vs elavil buy ambien online ove
ight how to fall asleep without ambien ambien sale long does rebound insomnia ambien last order ambien ambien reduced dose buy ambien online klonopin better than ambien buy ambien online can ambien be used with xanax buy zolpidem ambien trazodone quetiapine fumarate mirtazapine ambien pill ambien 10 mg dosage ambien generic ambien generic coupon buy tramadol online tramadol anwendungsgebiete buy tramadolВ cod next day delivery tramadol 50 mg presentacion tramadol onlineВ no prescription lyrica tramadol cymbalta
Nezer91 - 2017-03-12  04:17:11
 safe piroxicam purchase online order piroxicam sample http://gravatar.com/piroxicamcomprarestadosunidos
JanicePtbh88 - 2017-03-12  02:26:46
 [b]Brands nuzada shoulder bags for women fashion embroidery canvas retro messenger woman bag crossbody chinese style cyd-002 ( 11.97 $)[/b]
[url=http://projectgold.ru/ad11aliexp2/brands_nuzada_shoulder_bags_for_women_fashion_embrI9.html][img]http://projectgold.ru/ad11aliexp2/image/brands_nuzada_shoulder_bags_for_women_fashion_embrI9.jpg[/img][/url]
[i]brands nuzada shoulder bags for women fashion embroidery canvas retro messenger woman bag crossbody chinese style cyd-002... Item Type: Handbags ; Brand Name: NUZADA ; Exterior: None ; Number of Handles/Straps: Single ; Interior: Interior Slot Pocket,Cell Phone Pocket,Interior Zipper Pocket,Interior Compartment ; Closure Type: Zipper ; Handbags Type...[/i]
[url=http://projectgold.ru/ad11aliexp2/brands_nuzada_shoulder_bags_for_women_fashion_embrI9.html][img]http://i67.tinypic.com/2hs46dw.png[/img][/url]


[b]READ MORE[/b]
Fashionable stiletto heel and suede design women's sandals ( 33.76 $)
1a Prima Classe - Geo Printed Small Crossbody ( 135.00 $)
UU Family 2016 Oxford Autumn Travel Bag Weekend Bag Large Capacity Ove
ight Bag Men Waterproof Bag Women Duffel Travel Tote ( 49.99 $)
Ve
ee Thor 4G Smartphone-136.80 $
[url=http://projectgold.ru/forzieri/Khaki_Stripe_Wooden_Fiber_Fringed_Long_Scarfyp.html]Khaki Stripe Wooden Fiber Fringed Long Scarf ( 33.60 $)[/url]
2017 new arrive fashion women pu leather bag female luxury famous brand design big black tote shoulder messenger crossbody bag ( 40.40 $)
[url=http://projectgold.ru/ad11aliexp/Blue_Water_Wave_Effect_Ripple_Projector_3W_Led_Sta72.html]Blue Water Wave Effect Ripple Projector 3W Led Stage Light for Party Disco Light DJ Show Home Entertainment KTV Background ( 18.74 $)[/url]
[url=http://projectgold.ru/ylilsserd/Pair_of_simple_rhinestone_hollow_out_round_women'srx.html]Pair of simple rhinestone hollow out round women's earrings ( 2.03 $)[/url]
Perspektive Black Stainless Steel Womens Watch ( 199.00 $)
Agepoch 10+1 bb af103 bait cast baitcasting jig left right hand fishing reel feeder carp gear sea spool peche wheel ( 63.30 $)
Creative printed butterfly patte
flax pillow case(without pillow inner) ( 6.02 $)
Brazilian body wave hair weaves 4pcs virgin brazilian human hair bundles cheap natural black wonder beauty hair extensions ( 43.00 $)
[url=http://projectgold.ru/tsebraeg/great_wall_l803_4g_phablet-208.48_wt.html]Great Wall L803 4G Phablet-208.48 $[/url]
Simplee apparel autumn lace up suede leather women skirt 90's vintage pocket preppy short skirt winter high waist casual skirts ( 26.65 $)
[url=http://baridasari.ru/adoneali/new_arrive_flashlight_keychain_figure_keyrings_coolL.html]New arrive flashlight keychain figure keyrings cool batman keychain batman keychain led keychain with sound ( 1.18 $)[/url]


[url=http://projectgold.ru/adsserpxeila.htm][img]http://projectgold.ru/img/adaliimg_e/93bb.jpg[/img][/url]
JimmyLab - 2017-03-12  02:26:44
 Tattooing is story fount [url=http://500tattoos.com/navy-tattoo.html] These tattoos are suitable for both men and women . It's kind of a sign of emancipation , the dangers of self-reliance .[/url] of aptitude that tends to be as modifiable as the drawings and paintings
on a sliver [url=http://500tattoos.com/navy-tattoo.html] These tattoos are suitable for both men and women . It's kind of a sign of emancipation , the dangers of self-reliance .[/url] of paper. The unchanging temperament that you can draw and conspiracy out of the ordinary types,
objects and symbols on a instrument, you [url=http://500tattoos.com/navy-tattoo.html] These tattoos are suitable for both men and women . It's kind of a sign of emancipation , the dangers of self-reliance .[/url] can also have bearing them on your body.
When a being is afraid of the pain and permanency of the genuine tattoo, they likely
to decamp on the pinchbeck tattoos. They are commonly known as the constant tattoos and they
are specifically designed to live the meanwhile on the skin.
MichaelSar - 2017-03-11  21:11:25
 Categorized as a class II laser, this laser level comes backed by a 2-year limited warranty http://www.purevolume.com/JohnDoe67887/posts/15096412/.
AictorArola - 2017-03-11  21:04:05
 здраствуйте я начал делать СТАВКИ! и иногда проигрываю!
Мне жизнь подарила и я - нашел надежный информатора в прогнозы на спорт
НАЧАЛ ХОРОШО зарабатывать на ставках реальные деньги! Вывел уже более87 тысяч ?
Сейчас еще есть потенциал попасть в команду , Если хочочешь заходи на сайт и ПОДКЛЮЧАЙСЯ
К НАМ ПО ССЫЛКЕ http://capper24pro.ru Прогнозы на спорт от профессионалов

Наша специализация — прогнозы на футбол, хоккей.
Здесь http://capper24pro.ru вы найдете прогнозы на эти виды спорта от профессиональной команды капперов Capper24pro.

Напишите нам на почту!

capper24pro@yandex.ru А также : knutov.vladimir@yandex.ru

или Администратору группы Вконтакте [url=https://vk.com/id386638698]https://vk.com/id386638698[/url]

Мы с радостью ответим на все ваши вопросы!

[url=http://capper24pro.ru/vip-prognozy-119]Точный прогноз на матч[/url]
[url=http://capper24pro.ru/]Прогнози на спорт безкоштовні[/url]
Gazeholtapy - 2017-03-11  15:55:49
 #617615#
Удивительный товар

[url=http://strelashop.ru/mini-embroidery-dress/]Mini embroidery dress - купить интернет магазин, цены онлайн strelashop.ru[/url]
[url=http://strelashop.ru/сумка-momo-ems-furla-dolly-bdr9-15/]Сумка momo ems furla dolly bdr9 15 - купить интернет магазин, цены онлайн strelashop.ru[/url]

[url=http://strelashop.ru/globo-gb-40983-1/page/3]Globo gb 40983 1 - купить интернет магазин, цены онлайн strelashop.ru[/url]
[url=http://strelashop.ru/lumme-lu-3608/]Lumme lu 3608 - купить интернет магазин, цены онлайн strelashop.ru[/url]


[url=http://strelashop.ru/nobrand-xyc-383-1/]Nobrand xyc 383 1 - купить интернет магазин, цены онлайн strelashop.ru[/url]
[url=http://strelashop.ru/laete-s00-143/]Laete s00 143 - купить интернет магазин, цены онлайн strelashop.ru[/url]
Советую
Dennistox - 2017-03-11  15:14:04
 Мы знанимаемся продажей установок ГНб Vermeer.
[url=http://gnb-oborudovanie.ru/novye-ustanovki-gnb/14-ustanovka-gnb-vermer-24x40-kupit.html][img]https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Ditch_Witch_All_Terrain_JT100_at_Sunset.jpg/250px-Ditch_Witch_All_Terrain_JT100_at_Sunset.jpg[/img][/url]
[url=http://gnb-oborudovanie.ru/novye-ustanovki-gnb/14-ustanovka-gnb-vermer-24x40-kupit.html]Установка ГНБ Vermeer 24x40 купить [/url]
[url=http://gnb-oborudovanie.ru/novye-ustanovki-gnb/14-ustanovka-gnb-vermer-24x40-kupit.html][img]https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/DirectionalDrill.svg/240px-DirectionalDrill.svg.png[/img][/url]
JanicePtkl70 - 2017-03-11  14:12:11
 [b]New arrival fashion classical patchwork frosted pu leather women bag, leather handbagshoulder bag wlhb936 ( 39.60 $)[/b]
[url=http://projectgold.ru/sserpxeila3/new_arrival_fashion_classical_patchwork_frosted_pu2X.html][img]http://projectgold.ru/sserpxeila3/image/new_arrival_fashion_classical_patchwork_frosted_pu2X.jpg[/img][/url]
[i]new arrival fashion classical patchwork frosted pu leather women bag, leather handbagshoulder bag wlhb936... Item Type: Handbags ; Brand Name: MIWIND ; Exterior: None ; Number of Handles/Straps: Single ; Interior: Interior Slot Pocket ; Closure Type: Zipper ; Handbags Type: Totes ; Shape: Casual Tote ; Decoration: None ; Gender: Women ; Hardness...[/i]
[url=http://projectgold.ru/sserpxeila3/new_arrival_fashion_classical_patchwork_frosted_pu2X.html][img]http://projectgold.ru/buy.png[/img][/url]


[b]READ MORE[/b]
X-Bag Medium Foldable Last-minute Holdall in a Pouch ( 59.50 $)
[url=http://baridasari.ru/adoneali/virgin_human_hair_full_lace_wig_glueless_brazilianOD.html]Virgin human hair full lace wig glueless brazilian body wave full lace human hair wigs for ( 138.00 $)[/url]
[url=http://projectgold.ru/ireizrof/cyber_yellow_leather_shoulder_bagsp.html]Cyber yellow leather shoulder bag ( 486.80 $) Emilio Pucci[/url]
[url=http://projectgold.ru/ad11aliexp/NED_4Fr.html]NED 4 ( 1.53 $)[/url]
[url=http://projectgold.ru/tsebraeg/amazing_sky_star_laser_projector_lamp_starry_nightuz.html]Amazing Sky Star Laser Projector Lamp Starry Night Light Powered by AA Battery-3.39 $[/url]
Ulefone Metal 4G Smartphone-172.21 $
7a brazilian body wave 4 bundles brazilian virgin human hair weave bundles 100g cheap brazillian virgin hair body wave 4 bundles ( 61.00 $)
[url=http://aridasarip.ru/daonealiari/trendy_big_rooster_broch_jewelry_fashion_multicoloLV.html]Trendy big rooster broch jewelry fashion multicolor crystal rhinestone brooches female animal brooches for women hot ( 1.29 $)[/url]
[url=http://projectgold.ru/ad11aliexp2/120g_28_inch_long_clip_in_hair_extensions_straighthY.html]120g 28 inch long clip in hair extensions straight hairpiece synthetic 5 clips on hair extension hairpieces 25 colors available ( 7.49 $)[/url]
Cobbler legend brand designer 2016 women's genuine leather vintage single shoulder bag women crossbody bags handbags for ladies# ( 79.00 $)
CoolChange Cycling Gloves Half Finger Mens Women's Summer Bike Bicycle Gloves Nylon Sport Mountain Bike Gloves Guantes Ciclismo ( 9.07 $)
Universal car seat back storage mesh net bag strong magic tape 40cm x 25cm luggage holder ( 3.43 $)
[url=http://projectgold.ru/sserpxeila3/brazilian_virgin_hair_straight_4_bundles_mocha_haiDX.html]Brazilian virgin hair straight 4 bundles mocha hair company 7a unprocessed virgin hair weave mink brazilian straight hair rosa ( 51.00 $)[/url]
[url=http://projectgold.ru/sserpxeila1/2Pcs_Feet_care_tool_Heads_Pedi_Hard_Skin_Remover_Rpm.html]2Pcs Feet care tool Heads Pedi Hard Skin Remover Refills Replacement Rollers For scholls size have retail package ( 2.09 $)[/url]
Light Blue Pocket Square Cotton Slim Fit Shirt ( 62.00 $)


[url=http://projectgold.ru/adsserpxeila.htm][img]http://projectgold.ru/img/adaliimg_e/62bb.jpg[/img][/url]
Youtubeeliftaddeni - 2017-03-11  05:06:28
 раскрутка в youtube
http://www.youtube.com/user/justdirectru

Раскрутка видео на Youtube Xrumer
раскрутка видео
раскрутка в youtube
Раскрутка видео на Youtube с помощью Xrumer
DorianoxypE - 2017-03-10  22:40:05
 Видео-тренинги, видео-календарь на 30 дней (онлайн воспроизведение).

http://ru-datsun.ru/programmi-video-na-nokia-5800.php

http://tvoistati.ru/programmi-dlya-narezki-pesen.php

http://net4me.ru/12-11-2016-37.php
LarryMealo - 2017-03-10  22:10:35
 Самые дешовые проститутки у нас - http://mosmaps.com/
Геи, Трансвеститы и проститутки по вызову здесь-
http://souo-mos.ru/
Клуб гомосеков в Киеве на выезд здесь- http://souo-mos-ru.1gb.ua/
DavidLough - 2017-03-10  20:56:26
 All Toronto condo projects are here: http://www.condoprojects.ca/
Abampseup - 2017-03-10  19:00:45
 хелоу
я делаю ставки вместе с профессионалами и свободно зарабатываю в букмекерской каждый день!
Заказываю вип ставки на сервисе аналитике [url=http://capper24pro.ru/vip-prognozy-124]Прогноз на матч адмирал медвешчак[/url]
с этой группой я поднял уже более 25 623 рублей я очень благодарен точность ставки 99% всем удачи и с новым годом! я реально поднялся на ставках!

Сайт futbol-bet.ru создан Владимиром ?нязевым в октябре 2015 года.
Блог создан для распространения VIP прогнозов на футбол с высокой вероятностью 99%!

Уже давно не секрет, что хорошая мнение на вес золота.
Также, можно сказать и о системе ставок на спорт, как и сколько вы ставите.
Угадывать мнение на футбол и другие виды спорта может, каждый из людей. Но удваивать деньги могут лишь еденицы!

Проект [url=http://capper24pro.ru/o-proekte]Футбол франция лига 2 прогноз[/url]
Создан для людей, которые мечтают ставки на спорт в букмекерской конторе!
Наш сервисе предлогает вам: VIP прогнозы на футбол с проходимостью 99% — это платные прогнозы.
Составление VIP ставок это основной вид деятельности сайта.
VIP прогнозов на футбол размещаются с целью продажи партнерам проекта для выйграша в букмекерской конторе по предложенной нами системе ставок.
Для получения ставок напишите нам на почту или вконтакте С уважением Проект futbol-bet.ru [url=http://capper24pro.ru/]Прогнозы на футбол 2017[/url]
Pachatreops - 2017-03-10  18:31:11
 проспрягать глагол гласить и вставать по русскому языку задали.
Alexander Alenitsyn Искусственный Ум (346164) 3 года вспять
я говорю и встаю; гласил (а) и вставал (а). ты говоришь и встаешь; гласил (а) и вставал (а). он (она) говорит и встает; говорил (а) и вставал (а). мы говорим и встаем; говорили и вставали, вы говорите и встаете; говорите и встаете, они говорят и встают; гласили и вставали.
juicy shopp Ученик (109) 3 года назад
проспрягать? Говорить- 2 спряжение вставать-1 спряжение
Танюшка Ученик (157) 1 месяц назад
я говорю и встаю; гласил (а) и вставал (а). ты говоришь и встаешь; говорил (а) и вставал (а). он (она) говорит и встает; говорил (а) и вставал (а). мы говорим и встаем; гласили и вставали, вы гласите и встаете; говорите и встаете, они молвят и встают; говорили и вставали.
Марина Куюмчян Знаток (260) 1 месяц назад
говорить-говорю говорим говоришь гласите говорит говорят-2 спр вставать-встаю встаем встаешь встаете встает встают-1 спр

http://iwiw.fo.kinozz.lol/
http://jdfe.au.kinozz.lol/
http://gsel.pt.kinozz.lol/
http://xmtc.ou.kinozz.lol/
http://xuwg.vi.kinozz.lol/

[url=http://vmtq.csuf.kinozz.lol/]evbs.nwem.kinozz.lol[/url]
[url=http://iwkj.vdse.kinozz.lol/]qwjm.qdxy.kinozz.lol[/url]
[url=http://olvq.izwj.kinozz.lol/]qvkk.xjkq.kinozz.lol[/url]
[url=http://tvzq.mgkh.kinozz.lol/]fzhg.fndu.kinozz.lol[/url]
[url=http://jdnp.bdpn.kinozz.lol/]mwwq.stbe.kinozz.lol[/url]
VincentHom - 2017-03-10  11:44:10
 Существует такая услуга - добровольное медицинское обслуживание .
Она предполагает, что вы платите небольшую сумму за то, что ходит на прием весь год БЕСПЛАТНО.
Однако соцопросы показывают, что лишь 3% жителей Санкт-Петербурга знают о такой программе.
Почему так происходит?
Да потому что частным клиникам намного выгодней брать плату за каждое посещение.
А если какой-нибудь сотрудник клиники посоветует добровольное медицинское обслуживание клиенту - это сулит ему увольнением.
Эта информация уже вызвала много возмущений, сразу после того как информацию об услуге рассекретил один возмущенный врач.
Его уволили , после того, как он посоветовал ДМО постоянному клиенту.
Самое удивительное, что официальные положения по ДМО есть в открытом доступе, просто находили на эту информацию только случайные люди.
Как отстоять свои права?
О правилах предоставления услуги и обязанностях частных клиник можно узнать, сделав запрос в Яндексе: "добровольное медицинское обслуживание".
И именно обслуживание, а не страхование.

34j5c6h86
Wildergp - 2017-03-10  04:22:05
 Купить списанные цветы дешево Простоят один день.
Контакты: fiberam@bk.ru
Просрочка купить: admin@fiberam-market.ru
Отзывы: https://market.yandex.ru/shop/293752/reviews?sort_by=rank
Michaeldop - 2017-03-10  00:45:33
 [url=https://www.sbobet7x.com/ทางเข้า-sbobet][u][b] สโบเบท[/b][/u][/url]
บริการดีมากครับ พนักงานพูดสุภาพมากๆ ประทับใจมากครับ ไม่เคยคิดจะเปลี่ยนเว็ปเลย มีปัญหาโทรได้ตลอด 24 ชั่วโมง ใช้บริการกับ sbobet7x มาได้สักพัก ไม่มีปัญหาอะไร โปรโมชั่นก็ได้จริง ขอบคุณมากครับ บริการดีครับ ทำรายการอะไรต่าง ๆ ก็รวดเร็ว ขอให้บริการดี ๆ แบบนี้ตลอดไปนะครับ
[url=https://www.sbobet7x.com/ทีเด็ด-sbobet/][u][b] วิเคราะห์ บอล วัน นี้ 100[/b][/u][/url]
ประทับใจการฝากถอน บริการได้เร็วดี แม้จะเป็นช่วงเย็นๆ เห็นบอกว่าคนทำรายการเยอะก็ยังรอไม่เกิน 5 นาทีใช้บริการออนไลน์ผ่านหน้าเว็บไซต์ ทั้ง สมัครสมาชิก ฝากเงิน ถอนเงิน สะดวกดี ดีตรงไม่ต้องพูดคุยกับคน ผมชอบมาก มาสมัครแรกๆ ตอนแรกนึกว่าบบริการไม่ดี ไปไงไปมาบริการดีโครตครับ สอนผมตั้งแต่เล่นไม่เป็นและแทงบอลได้จนรวยทุกวันนี้
[url=https://www.sbobet7x.com/ผลบอลสด-sbobet/][u][b] ผลบอลภาษาไทย888[/b][/u][/url] อัพเดตผลบอลสดๆ ทันเวลาทุกวัน ทุกลีก ไม่ต้องรอนานเหมือนเว็บอื่น มาตรฐานสากล
ดูบอลสด ดูบอลออนไลน์ ดูบอล warp football ลิ้งดูบอล warpfootball บอลสด บอลออนไลน์ ลิงค์ดูบอล ดบอลสด ดูบอลสด youtube ดูบอล ออนไลน์ ดูบอลออนไลน์ cth ดูฟุตบอลออนไลน์ ดูบอลออนไล preview football ลิ้งดูบอลสด ฟุตบอลออนไลน์ wrap football ลิ้งค์ดูบอลสด วาปฟุตบอล link ดูบอล ดูฟุตบอลสด ดูบอลผ่านเน็ต ถ่ายทอดสด ถ่ายทอดสดบอล ดูบอลสดออนไลน์ เว็บดูบอล ดูบอลสด วันนี้ ดูบอลออนไลน์ hd ดูบอลสด youtube มือถือ fดูบอลสด ดูบอลไทย วาร์ปฟุตบอล ดูบอลออนไลน์ฟรี ถ่ายทอดสดฟุตบอล วาปบอล ลิงดูบอล ดู บอล สด ดูบอล cth ดูบอลสด cth ลิ้งค์ดูบอล wap football fดูบอลออนไลน์
[url=https://www.sbobet7x.com/ดูบอลสดออนไลน์][b]ถ่ายทอดฟุตบอล[/b][/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.