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ářů(9083)
Abaguehype - 2017-04-21  05:57:06
 side affects of cialis [url=http://us-best-store.com/#haggen-pharmacy-hours]cialis order[/url] http://safe-store-usa.com/#swan-pharmacy
Abaguehype - 2017-04-21  03:57:20
 buy cialis without prescription [url=http://us-best-store.com/#coupon-viagra]buy levitra online uk[/url] http://safe-shopping-us.com/#can-females-take-viagra
LonnieSeX - 2017-04-21  03:54:16
 одвают ли презирвативов когда занимаются сексом http://cutt.us/mg4sY комплекс упражнений для опорно двигательного аппарата по бубновскому
фото красивые девушки с круглыми попами http://cutt.us/WWx36 очень красивые девченки жаждующие секса фото
порно азиатки суппер маленькими кисками смотреть онлайн http://cutt.us/2KNvf порно онлайн приста т в автобусе
смореь порно фильм про клеопатру в хорошем качестве http://cutt.us/oynLU секс фото лизание ног в обуви
плеера для просмотра порно каналов в интернет тв http://cutt.us/M86ef порно видео 18ти летних лесбиянок онлайн
LonnieSeX - 2017-04-21  02:07:38
 порно ролики без регистрации с просмотром http://cutt.us/nOfkA молоко из груди просмотр большие груди эротика
после секса появляется боль и кроватечение http://cutt.us/2KiMN секс истории мама в ванай моет пол
смотреть русский инцет русское порно онлайн http://cutt.us/7jHTs смотреть фильмы онлайн порно российских знаменитостей
лезбийский секс как сделать партнрше приятно http://cutt.us/gTlT6 порно рассказы мамки тоже хотят в попу
красивые негритяночки фото 8 со спины http://cutt.us/HPT4u про тарзана порно видео с переводом
LonnieSeX - 2017-04-21  01:17:31
 русское порно и секс атный просмотр http://cutt.us/oxu9a порно изнасилование римлянами художественные фильмы онлайн
как уговорить девушеу на секс видео http://cutt.us/AgNIP секс расказ с женой папен друга
порно белокурых шведок с большими формами http://cutt.us/BPLQO фото большая вагина огромная писка вулва манда
отношения до секса это не отношения http://cutt.us/BPLQO красивое порно без криков и наказаний
порно видео врач издевается над девушкой http://cutt.us/q18X6 люди которые практикуют групповой секс могут иметь больше сексуальных партнёров
LonnieSeX - 2017-04-21  00:24:39
 смотреть русское порно онлайн стриптизеров на девишнике http://cutt.us/G3H05 смотреть онлайн порно доминирование женское русское
порно игры где есть секс и о http://cutt.us/GyhGd передоётся ли спид через оральный секс
громадный толстый член разревает пизду и жопу порно http://cutt.us/1x3ga реалистичные секс куклы из силикона купить
порно жена дала в зад онлайн http://cutt.us/aUQz мою жену трахнули рабочие порно рассказ
фото эротика дала сыну в попу http://cutt.us/exs4f реальное порно с в парке с двумя парнями
Niklkapy - 2017-04-21  00:18:37
 [url=http://bitbon.club/birzha_bitbon]продатьна Биржа Bitbon[/url]
[url=http://bitbon.club]бонус bitbon[/url]

[url=http://bitbon.club/birzha_bitbon]продать на бирже Bitbon[/url]


[url=http://bitbon.club/bitbon]Blockchain[/url]




ИНВЕСТИЦИОННАЯ ПРИВЛЕКАТЕЛЬНОСТЬ
Инвестиционная привлекательность Bitbon заложена в его определении как единицы измерения имущественных прав на Активы.Bitbon обладает беспрецедентным свойством — возможностью для каждого участника Системы Bitbon определить долю принадлежащих ему имущественных прав на Активы.В основу Bitbon заложен базовый принцип формирования его ценности, исходя из стоимости включенных в него различных типов Активов и перспектив их развития.Одной из целей Системы Bitbon является привлечение инвестиционного капитала посредством создания Публичных контрактов Bitbon. Использование Bitbon как инструмента для инвестирования является понятным и прогнозируемым,
поскольку предопределено условиями и обязательствами действующих Публичных контрактов Bitbon. Каждая новая инвестиция направляется на дальнейшее развитие и увеличение Активов владельцев Bitbon. При этом Активами могут выступать: недвижимость, банковские вклады, машины и производственное оборудование, ценные бумаги, патенты, торговые марки, ноу-хау, доли в уставных фондах и других компаниях, доли в различных проектах с юридическими и физическими лицами и другие ценности, имеющие инвестиционную значимость, что способствует капитализации Bitbon и росту его стоимости.Для того чтобы поддерживать актуальность экономической информации о текущем состоянии Активов,
Компания планирует регулярно проводить переоценку Активов с привлечением компетентных аудиторских компаний с последующей публикацией в открытом доступе полученных результатов и статистической информации для всех участников Системы Bitbon.Принимая во внимание тот факт, что капитализация Bitbon будет расти за счет управления и развития существующих Активов и приобретения новых с высоким потенциалом их роста, не оставляет сомнений, что Bitbon является лучшим инвестиционным решением и легитимным способом сохранения и приумножения капитала.


[url=http://bitbon.in.ua/contacts]регистрация[/url]


[url=http://bitbon.club/contacts]купить bitbon[/url]
[url=http://bitbon.club/birzha_bitbon]купить на бирже Bitbon[/url]
RandallJef - 2017-04-20  23:37:31
 Еще потом [url=https://diabetik.guru/recipe/omlet-pri-diabete-2-tipa.html]омлет при диабете[/url] полторы тысячи лет пред нашей эры древние египтяне в своем
медицинском [url=https://diabetik.guru/recipe/omlet-pri-diabete-2-tipa.html]омлет при диабете[/url] трактате «Документ Эберса» описывали мнимый диабет,
как самостоятельное заболевание. Великие врачи Древней Греции и Рима ежемгновенно размышляли неестественный этой загадочной болезни. Лекарь Аретаиус придумал ей прозвание «диабет» — по-гречески «протекаю, прохожу путем». Авторитет Цельс доказывал, который в возникновении сахарного диабета виновато несварение желудка, а громадный Гиппократ ставил диагноз, пробуя мочу пациента дабы вкус. Сообразный, древние китайцы тоже знали, сколько замечаться сахарном диабете моча становится сладкой. Они придумали вольтерьянец метод диагностики с чрез мух (и ос). Ежели мухи садятся ради блюдце с мочой, видно, моча сладкая, а клиент болен.
LonnieSeX - 2017-04-20  22:48:33
 кино порно 45 60 лет полных http://cutt.us/C8dpR матершиные стихи нос картошкой хуй гармошкой
скачать руское порно ж м ж http://cutt.us/d7Km можно ли заниматься анальным сексом мнение врача
занятие сексом в русской бане фото http://cutt.us/xmy3n екатерина стриженова сосет член фото подделки
секс с ириной алф ровой онлайн http://cutt.us/vKEZd кончил в глотку не достав порно
брутальный секс с украинкой порно видео http://cutt.us/iUqe голые девушки с грудью 7 размера фото
Generic finasteride or propecia for sale Pog - 2017-04-20  22:18:32
 Who would Generic finasteride or propecia for sale low testosterone and propecia generic
handling of in kind so much as a replacement repayment for unguaranteed catalyzes which repetition justifiable momentary of years. Propecia is not a convincing, it works on most women. Initially osteoblasts liking doff into the treatment of the pre-eminent 3 to 6 months of using the past. You extraordinary have to capitulate it feasible and that why some don't calories it makes not self because they a halt after a cartilage of islets and struggle something generic that they expire when joined pleases most. Propecia is the task mo = 'modus operandi' after keeping the physiological your have. For some trials it take select the role new braids than you did, because of some patients it disce
fit not make but inasmuch as the most, propecia whim originator your tresses that you attired in b be committed to for propeciafinasteridehelp.cu.cc
I possessions my numbers are in slip-up but you pressure be comparable pushing it. Suffer captivating a multi-vitamen, protien swig with at least 14g of protien and mineralization out. Outcome in there and whack at not to androgen widespread it that much. It could be the Proscar. Is the Proscar brandname Proscar at hand Merek or are you buying generic Proscar over the Inte
et. Unbooked, Proscar on the plotting in 5mg doses. Large speaking, it does a ALL of epidermal put together allow to decide missing hairloss. Unique majority and coequal on lofty propecia levels of aggregate shouldnt osteoclast consequential hairloss.
http://bomcrepe.com.br/index.php?option=com_k2&view=itemlist&task=user&id=5583
http://coifman.co.il/index.php?option=com_k2&view=itemlist&task=user&id=10668
http://hushescorts.com/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=633481
LonnieSeX - 2017-04-20  21:59:54
 смотреть онлайн порно русское папа трахает доч http://cutt.us/Hp63p мама и дочь с негром порно
секс кукла с раздвинутыми ногами купить http://cutt.us/ofba порно с лизанием зада у мужчин
порно видео про геев в ванной http://cutt.us/y42eE русское порно видео на доме 2
самые красивые порно актрисы мира имена и фото http://cutt.us/7BmXM бланк заявка на сексуальные домогательства солдата по сроку службы
порно фильм молодые любят когда погоречее http://cutt.us/7VPJP две девушки сняли парня и секс на природе
LonnieSeX - 2017-04-20  21:10:03
 смотреть порно секс в туалете онлайн http://cutt.us/ugWLC первый опыт секса втроем мжм реальный рассказ
найти порно в школе на уроке под партой http://cutt.us/OPiJj смотреть фильм оргия перед апакалипсам порно
порно фото мам сын на кухни http://cutt.us/hEvf день первый собираемся на порно отпуск
русские малышки двойное проникновение в порно http://cutt.us/Ji0qF скачать видео порно на тилифон в харошом качыстви
в два смычка жену секс рассказ http://cutt.us/kxQV самые откровенные реальные сцены секса в фильмах
LonnieSeX - 2017-04-20  20:16:12
 глубочайший отсос и сперма в горло порно онлайн http://cutt.us/AkUNe русское порно отца и сына с матерью
секс с двумя членами в попку фото http://cutt.us/ONMbZ жена застукала мужа с домработницей смотреть порно онлайн
видео порно ихдевался над шлюхой как только мог http://cutt.us/wfEHR порно видео без регистрации без скачивания
игры про секс игры на роздевание http://cutt.us/yaZBk смотреть порно сучки в кожаных фурашках
смотреть новое порно фильмы с сюжетом http://cutt.us/YQ9cU объявления секс без обязательств в ростове на дону
Dwaynegog - 2017-04-20  19:56:41
 Здоровье каждого человека – вещь бесценная, однако из-за нововведений в системе оказания медпомощи получить вовремя качественные услуги специалистов становится сложнее. То же самое наблюдаем, когда требуются медицинские справки для передачи в ГИБДД, поступления в учебные заведения, спортивные секции – очереди к врачам огромные, да и запись возможна далеко не день в день. Когда времени на ожидание нет, обратитесь к сотрудникам нашего медцентра. Менее чем за день у вас будет шанс купить больничный лист, медицинские справки различных форм, взять рецепт от врача. Сотрудники медцентра помогут даже в сложных случаях. Например, при определенных обстоятельствах проконсультируйтесь с нашим специалистом, чтобы купить больничный лист, подготовленный на прошедшую дату.

[url=http://nasha-clinika.ru/][img]http://nasha-clinika.ru/img/banner.img[/img][/url]
http://nasha-clinika.ru/severo-vostochnyj-administrativnyj-okrug.html
http://nasha-clinika.ru/vostochnyj-administrativnyj-okrug.html

[url=http://nasha-clinika.ru/centralinyj-administrativnyj-okrug.html]купить больничный лист клинике[/url]
[url=http://nasha-clinika.ru/yugo-vostochnyj-administrativnyj-okrug.html]купить рецепт врача лекарство[/url]

больничный лист купить официально в москве юао
больничный лист купить официально цена
оформить больничный лист оплаты
Danlkerdearveque - 2017-04-20  19:53:05
 Промокод UBER (5 символов) - 4wa9x - позволит бесплатно использовать услугу такси в любом городе. Используйте сейчас и получите 700 рублей на лицевой счет. Если не трудно, оставьте отзыв о использовании промокода и понравилось ли пользоваться услугами UBER-сервиса. Когда закончится поездка, поставьте также оценку водителю, которая влияет на его статус в системе. Компания Uber занимается услугой перевозки клиентов с помощью автомобилей. Uber - это очень современный и достаточно распиаренный бренд, известный и успешно функционирующий в тридцати пяти странах мира. Uber промокод 4wa9x действует во всех городах и странах.
Плюс сервиса – это большое разнообразие автомобилей как экономного, так и представительского класса. Удобное приложение позволит совершать безналичные расчеты и даже делить стоимость поездки между несколькими друзьями. Используя код [url=http://promokodubercom.ru/]Uber-промокод[/url], вы получите мгновенную скидку. Программа автоматически определяет местоположение заказчика.
Руководство бренда работает над уровнем услуг - попробуйте и вы. Пользуйтесь такси с комфортом, заказывайте автоперевозки для ваших товаров, в том числе очень крупных. Uber работает не только для граждан, но и целых корпораций, поэтому предприниматели уже пользуются услугами такси. Присоединяйтесь к числу счастливцев, значительно облегчивших жизнь и решивших рабочие вопросы с транспортировкой.
Компания Uber предлагает воспользоваться такси в крупных городах всего мира. С помощью мобильного приложения сможете за несколько секунд подобрать машину для поездки в Европе, Азии, Северной и Южной Америке. Купон и промокод Uber - 4wa9x – в любое время регистрации порадуют приятной экономией.
На странице promokodubercom.ru актуальный промокод Uber для тех, кто постоянно экономить в поездках. Комбинацию букв и цифр необходимо ввести в специальном поле во время оформления заказа. Промокод «4wa9x» – это гарантированное сокращение ваших расходов.
LonnieSeX - 2017-04-20  19:25:00
 как убрать порно баннер быстро суки быстро скажите http://cutt.us/r97vC смотреть порно фильмы с чичолиной русским переводом
эротические фото на природе частные коллекции http://cutt.us/f4rDV смотреть фильмы онлайн сериал секс в большом городе
порно учительница пришла к больному ученику http://cutt.us/DSNOw на кухне в фартуке эротика видео
секс против воли изнасилование порно видео http://cutt.us/pwyfX порно у гинеколога в кабинете фото
похабные слова во время секса смотреть http://cutt.us/wVrLq смотреть порно фильм она такая милашка
LonnieSeX - 2017-04-20  18:34:59
 мирослава карпович из сериала папины дочки голая секс http://cutt.us/yYSBS секс игры на телефон размер экрана 240 320
порно ему сосут и лижут жопу просмотр http://cutt.us/J5K3u как развести девушку в первом свидании на секс
порно ролики геев и без регистрации http://cutt.us/veYc1 секс за деньги перед веб камерой
скачать порно видео с сильвией сайнт http://cutt.us/mWnqc секс в большом городе 02 20
порно хххх трахнул в попу юное создание http://cutt.us/lHLCR новое шд порно онлайн с мадисон иви 2014
LonnieSeX - 2017-04-20  17:41:37
 сын трахает мать с большими грудями http://cutt.us/J0TQs очень большие предметы в анале фото
невероятные приключения красной шапочки актеры порно http://cutt.us/bwooU анал з типу виробництва на п дпри мств
познакомица з девушко для секса без анкеты http://cutt.us/Vwvbt порно видео скрытая камера на нудиском пляже
брат насилует маленькую сестренку смотреть порно http://cutt.us/xfZF6 порно бен теннисон трахает свою сестру гвен
полнометражный порно фильм с трансами без вирусов http://cutt.us/pi4km порно жестокая секс по франсо русский
LonnieSeX - 2017-04-20  16:47:38
 реальное порно лесбиянок амы и дочки http://cutt.us/oWfpp блондинка в сауне в попку на шпильках порно
порно рассказы хочеш полизать мою попу http://cutt.us/LTtKJ секс у девочек в первый раз фото
насколько важен размер члена в сексе http://cutt.us/6GmT9 русскую волосатую брюнеточку в два ствола порно
порно развод на камеру за деньги http://cutt.us/hoXV3 жена разрешилатрахнуть дочь рассказ порно инцессия
вялая ебля в во все щели http://cutt.us/6Zl8n эротика и секс на яндекс частные фото
PatrickBoast - 2017-04-20  16:39:49
 Looking for a car can take too much time. There are many cars you can try, as well as a couple of considerations. Thus, you will need solid data to ensure that the procedure to be smooth. Keep this advice in mind when making a purchase.

Don't forget to investigate the fee for parts to get a vehicle before buying it. Some cars, especially imports, cost considerably more to keep up than the others. Investigate the price of parts that break down frequently, like tires, brakes, and windshield wiper blades. Research the cost of alte
ators, spark plugs, as well as other engine components, too.

Use a clear comprehension of what those upgrades will set you back. Getting the fancy stereo, leather seats and DVD player could be appealing, but those options can add a significant amount to the price tag on your vehicle. Take a moment to contemplate just how much you really need the upgrades, and only get the ones you are going to use the most.

Usually do not make your mistake of believing you need to pay the full asking price to get a second hand car. There ought to always be room for negotiation. if a car has become available on the market for a while with no buyers [url=http://www.sosnowiecskupaut.ovh/]sosnowiecskupaut.ovh/[/url], that will make the vendor more likely to accept a proposal of below these are asking for.

Have a budget in your mind before going car shopping. This involves assessing your monthly income and bills, and getting a specific idea of how much you can really afford to increase those. Doing this can help you in which to stay budget when you make your new car purchase.

Search for your brand new car online before you ever go to a dealership. Doing a search online permits you to have a look at inventory from multiple dealerships, and yes it making you privy to information regarding online only pricing. This can be a great way to comparison shop and extremely ensure you are getting the best deal.

Don't invest in a car online from someone without going and checking it all out first. In case you are not mechanically inclined, bring someone that is. Also be cautious about deals that seem too good to be real. Men and women make the most of you if you're not good with cars, so attempt to take along someone that knows about them.

Test drive a couple of car prior to buying it. Any new car is going to feel fantastic if you're employed to driving an older one. Think seriously regarding how the ride feels, where the buttons can be found, and how much of the path it is possible to see. Test-driving several car will help you realize where you wish to be.

Don't allow the salesperson know you will have a trade in until you have a company sales price in hand. Some dealers will inflate the purchase price should they think you're trading in the vehicle, to enable them to offer you a lot for the trade in, which happens to be, then balanced with the new price they give on the car they're selling.

Take a look at simply how much repairs over a car would cost before choosing it. You should certainly obtain a fair notion of what types of costs you should buy repairs. And that's not merely for after it is under warranty. What happens when you have to pay full price for the ignition coil? Different cars cost different amounts, so lea
.

Read before you sign. You may be getting in some serious trouble if you're on the market blindly signing money away. Your signature binds you legally, meaning you'll be forced to pay or suffer severe consequences. You could carry it home with you to see it. Should your salesman will not want to let you use the contract home, there is certainly probably some hidden clause they actually do not need you to discover more about.

Look into the laws where you live when it comes to getting a bad car. There are many states that have lemon laws. They may protect you against investing in a car that isn't in great condition and the inability to get yourself a refund. Not every state has these laws, which is why it is necessary to do the research.

A qualified used vehicle is not going to guarantee that this vehicle is good condition. This is merely a whole new technique for car dealers to trick people into thinking that they are guaranteed a superior quality used vehicle. Tend not to be enticed by it. Research certified vehicles just as you might some other to fully protect yourself.

If you are intending to buy a car, you have to know as much as it is possible to before you decide to do it. Start using these tricks to drive away in something you're happy in. They need to assist you in making the best possible decision on the car purchase.
<<[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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.