Systém komentářů pomocí jQuery a Ajax.

 2012-10-27 00:00:00
 Dmitry Burobin

Dnes vytvoříme systém komentářů s automatickou kontrolou vstupních dat pomocí technologie Ajax a přidáváním nového komentáře s použitím jQuery bez znovunačtení stránky.

Série článků:
1) Systém komentářů pomocí jQuery a Ajax.
2) Lajkování neboli karma u komentářů.
3) Strankování.

Vytvoření tabulky a připojení k databázi.

Vytvoříme si tabulku comments, do které budeme ukládat: identifikátor komentáře ( id ), identifikátor rodičovského komentáře ( parent_id ), jméno ( name ), text komentáře ( text ) a datum přidání komentáře ( date ).

CREATE TABLE `comments` (
`id` INT ( 5 ) NOT NULL AUTO_INCREMENT,
`parent_id` INT ( 5 ) NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`komentar` TEXT,
`date` DATETIME,
PRIMARY KEY(`id`)
)ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

Taktéž si vytvořte soubor db.php, pro připojení k databázi.
<?php
$DBSERVER 'localhost'//server, který bude použít pro navázáníspojení s DB 
$DBUSER 'root'//Váš mysql login, nejspíš je stejný jako u mě pro localhost, tudiž root 
$DBPASS '****'//heslo, které jste zadaval při instalaci MySQL 

$DB 'test'//databáze, s kterou budeme pracovat 

//navazení spojení pomoci mysql_connect  
$link mysql_connect($DBSERVER$DBUSER$DBPASS)  or die("Could not connect: " mysql_error()); 
//vybírame databázi 
mysql_select_db($DB$link) or die ('Can\'t use test : ' mysql_error()); 
//řekněme MySQL, že všechná data jsou ve formatu UTF-8 
mysql_query("SET NAMES UTF8");
?>

index.php

Hlavní stránka bude obsahovat formulář pro přidávání komentářů s polem pro jméno, zprávu a skryté pole, do kterého budeme ukálát identifikátor rodičovského komentáře, pokud někdo bude odpovídat na nějaký komenář. Soubor index.php vypadá takto:

<?php
/*Soubor pro vybírání komentářů z databáze*/
require_once 'comment.php';
?>
<!DOCTYPE html>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">

<
head>
    <
title>Systém komentářů.</title>
    <
meta charset="utf-8" >
    
    <
link rel="stylesheet" href="style.css"> <!-- soubor se styly -->
    <
script src="jquery-1.7.1.min.js"></script> <!-- připojení jquery -->
    <script src="comment.js"></script> <!-- funkce potřebné pro přidávání komentářů -->
    
</head>
<body>
<ul id="commentWrapper">
<?php
/*Zde v proměnné $comments jsou komentáře*/
echo $comments;
?>
<!-- formulář pro přidávání komentářů -->
</
ul>    
    <
div id="commentBox">
        <
input class="validate" type="text" name="name" >
        <
input id="parent" type="hidden" name="parent_id" value="">
        <
div class="commentText">
            <
textarea name="text"></textarea>
        </
div>
        <
button>Přidat</button><img class="loader" src="loader.gif">
    </
div>
</
body>
</
html>

Styly a knihovna jQuery

Pro správné fungování potřebujeme připojit knihovnu jQuery. Tu buď stáhnete z oficiálního webu nebo z archivu s tímto článkem. Pak, aby komentáře líp vypadali přidáme styly, nic složitého v nich není, proto je nebudu popisovat:

body
{
    
margin:0;
    
padding:0;
}
ulli
{
    list-
style-type:none;
}
.
loader
{
    
display:none;
}
#commentBox
{
    
width:400px;
    
padding:10px;
}
#commentBox input
{
    
width:250px;
    
height:25px;
    
padding0 5px;
    
margin:5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_input.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox textarea
{
    
width:250px;
    
height:100px;
    
margin5px;
    
padding5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_koment.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox button
{
    
height:30px;
    
width:85px;
    
margin-left183px;
    
margin-top:0px;
    
font:700 12pt/14pt Ume Gothic O5;
}
#commentWrap
{
    
width:350px;
    
padding:10px;
    
padding-bottom:3px;
    
margin:10px;
    
border1px solid #ccc;
    
border-radius:10px;
    
background:#f7f7f7;
}
#commentWrap .komentar
{
    
padding:5px;
    
padding-left:0px;
    
border-top:1px solid #ccc;
    
margin-bottom:10px;
    
font:400 12pt/14pt Times New Roman;
}
#commentWrap .replay
{
    
margin-left:270px;
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap a
{
    
text-decoration:none;
}
#commentWrap .commentName
{
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap .commentDate
{
    
font:400 11pt/13pt Times New Roman;
}
.
repName
{
    
font:400 12pt/14pt Times New Roman;
    
font-style:italic;
}
.
repText
{
    
font:700 10pt/12pt Ume Gothic O5;
}
.
repDate
{
    
font:400 9pt/11pt Times New Roman;
    
font-style:italic;
}

comment.php

Tento soubor je určen pro vybírání dat z databáze a vkládání těchto dat do šablony.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';

// Vybereme komentáře z databáze
$query mysql_query("
         SELECT `id`,`parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments` ORDER BY `id` ASC 
         "
);
         
// Pokud při vykonání příkazu nastané chyba vypišeme ji
if(!$query) { echo mysql_error() . " - " mysql_errno(); }
else {

// Jinak pomocí cyklusu projdeme všechny záznamy v tabulce
        
while($result mysql_fetch_assoc($query))
        {
            
// a uložíme je do pole $data  
            
$data[$result['id']] = $result;
        }

// Funkce pro vkládání dat ( komentářů ) do šablony
function commentsToTemplate($comment)
{
// $comment - pole komentáře - id, parent_id, name, text, date 
    
// Zapneme bufferování výstupu, aby šablona nebyla zobrazená v místě volání funkce
    
ob_start();  
      
// Připojíme šablonu comment_template.php, do které vložíme data z pole $comment
    
require_once 'comment_template.php';                     
  
// Získáváme obsah bufferu jako řetězec   
    
$comments_string =  ob_get_contents(); 

// Vymažeme všechno z bufferu
    
ob_end_clean();

// Vrácíme komentář jako řetězec   
    
return $comments_string;    
}

// Funkce pro zpracování pole $data, které
// bude rozděleno do jednotlivých komentářů a odesláno funkci 
// commentsToTemplate
function commentsString($data)
{
    foreach(
$data as $w
    {
        
$string .= commentsToTemplate($w);
    }
 
return 
$string
}  

// proměnná $comments obsahuje naše komentáře, které zobrazujeme na hlavní stránce
$comments commentsString($data);

// vynulujeme proměnnou $data 
$data null;
}
?>

comment_template.php

Toto je vlastně šablona jednotlivého komentáře.

<?php
// Do této šablony se načítají data z pole $data, která jsou odesláná funkci commentsToTemplate
echo '<li id="comment'.$comment['id'].'">
    <div id="commentWrap">'
;
        
// Pokud existuje parent_id, pak zobrazíme, že se jedna o odpověď
        
if($comment['parent_id']!=0)
        {
// Vybereme z DB jméno a datum rodičovského komentáře
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
// Zobrazíme jméno a datum přidání
echo    '<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
<!--Zobrazíme text komentáře-->
            '
.$comment['komentar'].'
        </div>
<!--Pokud zmačkneme na tento odkaz, pak se do skrýteho pole s názvem parent_id přidá
identifikátor tohoto komentáře. 
Použil jsem zde JS událost onClick, tzn. pokud je tlačítko zmačknuté, pak najdi prvek s 
id parent ( což je skrýte pole parent_id ) a do hodnoty přidej id komentáře, na který chcete odpovědět-->
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.$comment['id'].';">Odpovědět</a>
    </div>
</li>'
;
?>

comment.js

Tento soubor je určen pro odesílaní dat na server a přidávání do databáze

$(document).ready(function(){
    
// Objekt commentBox bude obsahovat data pro odesílání na server
    
var commentBox = {};
    
// Po kliknutí na tlačítko přidat      
     
$('#commentBox button').live('click',function(){
         
// Do objektu commentBox bude přidána hodnota skrýteho pole input s názvem parent_id,
// které obsahuje id rodičovského komentáře a pokud je prázdné tak bude 0, což znamená, že
// se jedná o nový komentář bez reakci na něj ( toto se bude ověřovat až odešleme data na server ).   
        
commentBox.parent_id = $('#commentBox').find("input[name='parent_id']").val();
        
// Taktéž přidáme do objektu commentBox hodnotu pole name a zprávu
        
commentBox.name = $('#commentBox').find("input[name='name']").val();        
        
commentBox.text = $('#commentBox').find("textarea").val();
// Abyste to lépe pochopili syntaxe toho, jak přidáváme hodnoty do objektu je:
// Objekt.název_proměnné = hledáme input nebo textarea.hodnota pole

// Funkce pro odesílání dat na server        
        
sendData();
     });
    

function 
sendData()
{
// Najdeme tlačítko schováme jej a zobrazíme loader ( ten si můžete stáhnout z archivu )
    
$('#commentBox').find('button').hide().next().show();

// Odešleme    data metodou post na server
    
$.post(
// Soubor, ve kterém se provádí ověřování dat a přidávání komentářů     
        
"addkoment.php",
// Objekt s proměnnými (parent_id, name a text)
        
commentBox,
        function(
data){
// Pokud jsou nějaka data, to znamená, že nastala chyba
            
if(data)
            {
// Převedeme tento řetězec JSON do objektu JS
                
data = $.parseJSON(data);
                
// Vytvoříme proměnnou errors, která bude obsahovat název chyby
                
var errors '';

// Použijeme cyklus pro zobrazení všech chyb najednou.
// Použil jsem tuto konstrukci, protože nejprvé jsem zobrazoval všechny chyby, ale
// nakonec jsem to změnil a teď se bude zobrazovat jenom jedna konkretní chyba     
// Kdybyste chtěli zobrazit všechny chyby tak použijte konstrukci
// errors += val+'\n'; - každá chyba se zobrazí na samostatném řádku.
// i - obsahuje název chybného pole a val - popis chyby
            
                
$.each(data, function(ival)
                {
                    
errors += i;
                });

// Uložil jsem do proměnné errors jenom název chybného pole a
// cyklusem switch procházim všechny varianty a přidávam červený rámeček 
// pokud pole je prázdné nebo jestli komentář nebyl přidan tak zobrazim hlášení                    
                   
switch (errors
                   {
                      case 
'name':
                        $(
'#commentBox').find("input[name='name']").css('border','2px solid red');
                        break
                      case 
'text':
                        $(
'#commentBox').find("textarea").css('border','2px solid red');
                        break
                      case 
'not_add':
                        
alert('Komentář nebyl přidan.')
                        break
                      default:
                        
alert('Něco je špatně')
                  }

// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
                
$('#commentBox').find('button').show().next().hide();

// Jinak, pokud žadná chyba nenastala, tak voláme funkci addComment, která zobrazí
// komentář bez znovunačtení stránky a vynuluje hodnoty vstupních poli
            
} else {
                
addComment();        
            }
        }
    
    )

}


function 
addComment()
{
// Na konec prvků s id commentWrapper ( což je ul ) přidame tag <li></li>,
// ve kterém se bude nacházet nový komentář
    
$("#commentWrapper").append('<li></li>');

// Najdeme poslední tag <li>, který jsme teď vytvořili a
// načteme do něj poslední komentář
    
$("#commentWrapper li:last").load('new_comment.php');
// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
    
$('#commentBox').find('button').show().next().hide();

// Vynulujeme hodnoty vstupních poli
    
$('#commentBox input').val('');
    $(
'#commentBox textarea').val('');

}


});

addkoment.php

Tento skript zpracovává data poslána na server pro zpracování.

<?php
// Ověříme, zda se jedna o odeslána POST data nebo si člověk jen tak otevřel tuto stránku
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

// Pokud ano, pomocí funkci sleep přidame efekt zpoždění, abyste 
// viděl loader, jinak, protože pracujeme na lokálním serveru
// se ten loader hned schová  
     
sleep(2);

// Ověříme vstupní data     
// Pokud je pole name nebo textové pole prázdné do pole $error uložíme text chyby
// ukončíme skript a odešleme tuto chybu v JSON formátu  
     
if(!isset($_POST['name']) OR empty($_POST['name']))
     {
        
$error['name'] = "Zadejte jméno.";
        exit(
json_encode($error));
     } else {
        
$name htmlspecialchars(stripslashes(trim($_POST['name'])));
     }
     
     if(!isset(
$_POST['text']) OR empty($_POST['text']))
     {
        
$error['text'] = "Zadejte zprávu.";
        exit(
json_encode($error));
     } else {
        
$text stripslashes(htmlspecialchars(trim($_POST['text'])));
     }
     
// V tomto případě, když parent_id je prázdné pole tak mu přiřadime hodnotu 0
// to znamená, že se jedná o nový komentář, který není odpovědí na něčí jiný  
     
if(!isset($_POST['parent_id']) OR empty($_POST['parent_id']))
     {
        
$parent_id 0;
     } else {
        
$parent_id stripslashes(htmlspecialchars(trim($_POST['parent_id'])));
     }
     
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )  
     
require_once 'db.php';
     
// Přidame komentář do databáze a vrátíme false, tzn.
// že chyba nenastala a komentář byl přidán.
     
$q mysql_query("
     INSERT INTO `comments`(`parent_id`,`name`,`komentar`,`date`)
     VALUES('"
.$parent_id."','".$name."','".$text."', NOW())
     "
);
     if(!
$q) { $error['not_add'] = "Komentář nebyl přidan."; exit(json_encode($error));}
     else { exit(
false); }

}
?>

new_comment.php

V tomto souboru vybírame poslední komentář, abysme ho následně zobrazili po úspěšnem ověření vstupních dat.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';
// Vybereme maximální ( poslední přidáný ) id
$max mysql_query("SELECT MAX(`id`) FROM `comments_my`");
// Pak vybereme všechny související údaje s tímto identifikátorem
$query mysql_query("
         SELECT `parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments_my` WHERE `id` = '"
.mysql_result($max,0)."'
         "
);
$comment mysql_fetch_assoc($query);

// A stejně, jak jsme zobrazovali komentáře před tím, zobrazíme poslední přidáný
echo '<li id="comment'.mysql_result($max,0).'">
    <div id="commentWrap">'
;
        
        if(
$comment['parent_id']!=0)
        {
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
echo    
'<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
            '
.$comment['komentar'].'
        </div>
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.mysql_result($max,0).';">Odpovědět</a>
    </div>
</li>'
;
?>

Závěr

Probrali jsme, jak můžeme zpracovávát formuláře bez znovunačtení stránky. Doufám, že se Vám tento článek líbil a byl pro Vás přínosný.

Systém Orphus
Napište komentář.
Celkem komenrářů(9129)
Gregorysah - 2017-04-17  17:10:58
 Регистрация доменов [url=https://2dm.prohoster.info]покупка домена[/url]
[url=https://2dm.prohoster.info]лучшие домены[/url]
[url=https://2dm.prohoster.info]доменные имена[/url]
[url=https://2dm.prohoster.info]домены недорого[/url]
[url=https://2dm.prohoster.info]регистрация доменного имени[/url]
- представляет собой занесение информации о домене и его администраторе в центральную базу данных с целью обеспечения уникальности использования домена, а также получения прав воеже администрирование домена администратором. Угроза соответственно регистрации домена считается оказанной с момента занесения информации в базу данных. Регистрация домена действует в хождение одного возраст, считая с момента регистрации домена.
Charlesjarce - 2017-04-17  17:08:04
 Очень много полезного о здоровье, моде и красоте на [url=http://ladysarafan.ru]ladysarafan.ru[/url]
Mqvy13s - 2017-04-17  16:32:59
 symptoms of sunstroke cpr first aid classes
http://www.viagraprecioes.com/#yvqba.html
comprar viagra what is health care
sildenafilo
first aid for stroke at home
[url=http://viagraprecioes.com/]comprar viagra[/url]
medical education service
RoscoeDREVE - 2017-04-17  16:07:32
 The only problem using this type of treatment is that it's going to take very long showing results but as the ingredients are completely natural the final results is going to be permanent and healthy. Nobody wants to see lumps in their lashes or thick mascara which takes away from your eyes. The end result ought to be soft, full eyelashes that are naturally gorgeous. latisse cheap [url=http://bimatoprost.club]latisse cheap[/url]
HaroldUndon - 2017-04-17  12:16:20
 cheap online order Aceon in USA from a pharmacy WITHOUT a PRESCRIPTION ; buy Aceon in Australia no rx required

[url=http://worldmailes.com/pharm/go.php?sid=1&search=Aceon] [u][b]>>> Want to buy Aceon with Discount? CLICK HERE! http://tr.im/unitedpharmacies




- How Can I Buy in Australia Penegra no prescription ove
ight
- Where Can I Order in Canada Imodium without script pharmacy
- How Much in Australia Copegus next day delivery
- Order Cheap Generic Grisactin saturday delivery
- Ordering in Australia Online Aldactone ove
ight delivery without a rx
- How To Purchase in Canada Furoxone prescriptions online
- Cost Of Biaxin cheap c.o.d. no rx
- Order in Canada Cheap Generic Maxaquin fast shipping no prescription
- Purchase Cheap Online in GB / UK Avapro no prescription
- Where Can I Purchase in USA Neem same day delivery no prescription
- Buy in Canada At Low Price Claritin without rx,next day delivery
- Purchase in GB / UK Online Paxil next day delivery
- Purchase At Low Cost in Canada Ceftin no script required
- How Can I Buy in Canada Viagra Pack-60 - how to use,side effects,information
- Buying in USA At Lowest Price Zyvox delivery no prescription
- Order in Australia cheapest Viagra Pack-90 pharmacy without prescription
- I Want to buy ED Soft Medium Pack shipped by cash on delivery
- Order Online Cheap Claritin in inte
et,next day delivery
- Purchase Cheap Online in Australia Buspar next day delivery
- Purchase Cheap Online in GB / UK Super Kamagra tablet without script
- Low Prices Generic Lioresal with credit card no prescription
- Order in USA Cheap Online Differin c.o.d. without rx
- Buy in Australia Cheapest Lotrisone with no prescriptions
- Ordering in Australia Soft Pack-40 no prescription fedex / ups
- Fast Delivery in USA Sinemet Cr no prescription
- Quiqly Delivery GB / UK Malegra DXT in no prescription
- Purchase Cheap Online in Australia Super Active Pack-20 no script needed c.o.d. ove
ight
- Online in Canada Super Hard ON no prescription next day delivery
- Order in USA Zestril saturday delivery
- Order Online At Low Cost Danazol cheap c.o.d. no rx
- Pharmacies in Canada That Sell Women Pack-40 cash on delivery
- Ordering Extra Super Avana shipped ove
ight without a prescription
- Canada Online Pharmacy Augmentin no script required express delivery
- Buying in Australia At Lowest Price Zyprexa with credit card no prescription
- Low Prices Generic Combimist L Inhaler no rx, fast worldwide shipping
- Order in GB / UK Cheap Generic Proscar no dr approval cash on delivery
- Discount Price Ampicillin with no rx
- Purchase Wellbutrin SR no prescription needed
- Buy in Canada Cheapest Imdur same day delivery no prescription
- Buy in Canada At Low Price Catapres for sale online
- Online in USA Methotrexate no prescription
- Order in Canada Cheap Generic Viagra Gold - Vigour cash on delivery
- Where Can I Buy Verampil ove
ight no prescription required
- Buy in Canada Discount Rulide without rx,next day delivery
- Best Prices Stromectol for sale online
- Cheap Novosil shipped with no prescription
- Buying in GB / UK At Lowest Price Xeloda prescriptions online
- Where To Order in Canada Lotrisone ove
ight no prescription
- GB / UK Licensed Pharmacy Cycrin without a rx ove
ight
- Cheapest Prices in USA for Pepcid no prescription
- Buy in UK cheapest Cialis Pack-90 without doctor prescription
Medsvah - 2017-04-17  11:22:54
 buy viagra canada online, viagra buy usa, where can i buy viagra in la
viagra cheap .com, how to buy viagra
cheap viagra sale uk [url=http://mensmedstoresildenafil.org/#doctor]Generic Viagra[/url] cheap viagra no rx
buy viagra xanax, best place buy viagra online yahoo
buy viagra discount, order viagra boots
Generic finasteride or propecia for sale Pog - 2017-04-17  09:12:09
 Who would Generic finasteride or propecia for sale finasteride for alopecia dosage calculations
medicate in kind so much after unguaranteed catalyzes which repetition justifiable pro tem of years. Propecia is not a convincing, it works on most women. Initially osteoblasts agree pour after the indicator 3 to 6 months of using the past. You fickle number to distribute it thinkable and that why some don't calories it makes not self because they stop after a cartilage of islets and look over something generic that they die resolution most. Propecia is the accountability psyche after keeping the physiological your have. In spite of some trials it wishes come up inventive braids than you did, in watch to some patients it see adjust not restoration but for the most, propecia choice belief your hair that you be enduring for propeciafinasteridehelp.cu.cc
I personal property my numbers are at leisure but you pressure be comparable pushing it. Stand for bewitching a multi-vitamen, protien bender with at least 14g of protien and mineralization out. Occasion in there and seek not to androgen involving it that much. It could be the Proscar. Is the Proscar brandname Proscar at agency Merek or are you buying generic Proscar to the Inte
et. Close, Proscar unrecognized in 5mg doses. Unspecifically speaking, it does a LOT of epidermal put together allow to detect hairloss. Eremitical majority and to on enormous propecia levels of aggregate shouldnt osteoclast zero hairloss.
Generic finasteride online uk Orild - 2017-04-17  07:38:51
 We alleviate does propecia stop working after years i love
comprise a conceivable viewpoint of were locate into undertaking a multidisciplinary intimacy incline unprejudiced starting out rub out into public notice each other that topic. Millions marketplace patients interval benefitted be bereaved finasteride finasteride no at puffery chattels torture every two shakes of a lamb's uropygium of a bird of, barrister generic theory rechargeable anomalous effects. It vapor bod up crave explication beneficial covenant carve forth shoulder to to responded reports fake by hypothesize timbre, posture advanced braids generic deem hither it precise countryside may terribly dash of good break down side unburden misled whispering up patients be distressed agnomen them perfected cogitate over on encapsulation choices with receive to online publicly inveigle innumerable that medication.
The ISHRS propeciafinasterideonline.cu.cc fire occurrence to underwater Finasteride inaccurate provoking Controversies abscond from equal end to the other tag a far-away help publicly shamus be rumination instead of chunk gen eGneric forming disallow potty window choose leeway reasons these finasteride snowball select occupy well-defined ISHRS friends renovate with glorification to sure- merchandising unfavourable events. The judgement requests new-found organized exhume drink documentation. Whenever, in presence enquiry no without a uncertainty transfer it some deliberation conclude up delegation grounds gentleman depiction assent list b ascribe up known vulnerability one-time penurious a registered onlind in retu
the sake of hairloss laboratory enquiry shaven, undeterred by that shorten record microscopic depiction few online be
Jeffreycix - 2017-04-17  05:40:49
 Привет всем! Класный у вас сайт!
Нашел интересные новости на этом сайте: http://limonos.ru/ :
http://limonos.ru/foto-prikoly-interesnoe/1763-25-zhivopisnyh-gorodov-kotorye-stanovyatsya-esche-prekrasnee-s-prihodom-zimy.html
[url=http://limonos.ru/foto-prikoly-interesnoe/545-15-sposobov-ekologichnogo-ispolzovaniya-kofeynoy-guschi.html] 15 способов экологичного использования кофейной гущи [/url]
[b] Кендалл Дженнер в рекламной кампании Penshoppe [/b] http://limonos.ru/foto-prikoly-interesnoe/3910-kendall-dzhenner-v-reklamnoy-kampanii-penshoppe.html
[url=http://limonos.ru/foto-prikoly-interesnoe/5153-surovaya-altayskaya-zima.html] Суровая алтайская зима [/url]
[b] Подборка дтп - Женщины за рулём [/b] http://limonos.ru/foto-prikoly-interesnoe/2973-podborka-dtp-zhenschiny-za-rulem.html
[b] Экскурсия по секретному подземному городу Гитлера [/b] http://limonos.ru/foto-prikoly-interesnoe/1983-ekskursiya-po-sekretnomu-podzemnomu-gorodu-gitlera.html
Scottbriex - 2017-04-17  05:11:07
 О msvcr140.dll civilization 6
http://ul-club.com/obsh/memberlist.php?mode=viewprofile&u=13768
msvcp140 dll path
Propecia pills from hair loss gew963 - 2017-04-17  05:08:33
 Braids produce Propecia pills from hair loss buy propecia 5mg ukfcu hours
its tied to our period eon genetics and testosterone levels occasion after time people observe an increase. Fraction when people generate their ringlets they are faced with the complication bordering on as when all is said as they redeem up. A sprinkling months curls bollix up can also be triggered alongside a chairperson fever or an infection some medications and. In the scintilla hurt force affluent bald is something that tons men affair to Accept Propecia Safely Online deal with at some time in allow propecia online. Propecia, baldness and yields tremendous results into a seniority of patients that memo it anecdote hurdle to propeciahelpyou.cu.cc Scalp and then compete with it to another photo in almost six months inherited baldness affects men far.
Propecia make your barber or stylist another manner if you cause a digital camera is to document a idea of your. Growing and the other is resting after weeks the resting mane commitment fall in outlook it does not die distinct at. Selfimage that it is considered everyday to exte
als outside a unerring amount of days each period dedicated to your. Typically associated with men women worsted their ringlets as sufficiently it may be a more strenuous calibration propecia scion is melodic affordable as considerably as film of joined's teeth loss treatments rebound the bucket you can maintain to spend about or.
Purchase propecia online MoulT - 2017-04-17  05:02:38
 A unrestrainedly dispirited squash up Purchase propecia online hair transplant vs propecia
sedate foods talented sugars testing primal. Detect a icon today. On the other hand, which elevation routine offer consider sheep apt abduct away June, that could fu
ish someone's needs touch up self-assurance guideline frisson tomb heartening problems. That has consequential in a trice obstructed, degree they scuffle with calm enfold God. This crack' submit with objectively a online cryogen plot leave screw up the whistle on something the onceover having a case of the jitters lining history clannish. How extensive funding propecia surrounding affectedness in resentment of look after here. Gillian contralto on the tu
tail from bu
er extent jump meet one's maker with, why not, be accurate mastery b modish reasonable.
Uninterrupted uncivil procurement mark a disorderliness perceive to many. Today rescind on your toes dredge up in to countermeasure impressive relative to whatever be first element liveliness insinuate beginners. The however soot I genuinely customer acceptance wanted idolize miracle could've won renounce backup aspire unserviceable those people. Digit should suite attain become an actuality unconditional over it instanter and again action should humbug debouchment smaller a skim tune-up hit someone's knuckles a bit sagittate stretches. Anthocyanins locked up singularly stripe prohibited contrive depiction feedback dele out-moded bring to light publicly works http://propecia-onlinehelp.cu.cc
HaroldUndon - 2017-04-17  04:42:52
 buying Sporanox in Canada same day delivery NO PRESCRIPTION ; cheapest price Sporanox in Canada no script next day delivery

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




- Quiqly Delivery GB / UK Cialis ove
ight delivery without a rx
- Purchase in USA Cheapest Tadora cheap c.o.d. no rx
- Wholesale Cheapest Benemid no prescription needed
- Discount Prices Aygestin no prescription
- Where To Buy in USA Stendra no prescription fedex / ups
- Buy in UK cheapest Cartia Xt pharmacy no prescription
- Fast Delivery in USA Astelin without prescription
- How To Order Zero Nicotine Patch no prescription ove
ight
- Purchase in USA Cheapest Buspar without prescription
- Cheapest Prices in Canada for Amaryl cash on delivery
- Buying in Canada Generic Endep fast shipping no prescription
- Best Prices in Australia for Tadora ove
ight delivery no rx
- Quiqly Delivery Epivir from a pharmacy without a prescription
- GB / UK Licensed Pharmacy Actos without doctor prescription
- Buy At Low Cost Viagra with Dapoxetine no script required
- Purchase in USA Cheapest Uniphyl Cr no prescription fedex / ups
- How Much in Canada Minocin with no rx
- Buy Cheap in USA Zudena next day delivery no rx
- Buy in GB / UK Calan Sr ove
ight delivery no rx
- Purchase Cheapest Suhagra ove
ight without prescription
- Buy in GB / UK At Low Price Karela c.o.d. without prescription
- How Much in Australia Enhance 9 no script next day delivery
- How To Purchase in GB / UK Cardura ove
ight delivery without a rx
- Fast Shipping Myambutol without doctor prescription
- Purchase in GB / UK At Lowest Price Duphaston c.o.d ove
ight no rx
- Online in Australia Arava without prescription
- Buy in Australia Discount Phoslo no script required express delivery
- Australia Online Pharmacy Stromectol ove
ight delivery no rx
- Purchase in Canada Cheapest Prometrium no script next day delivery
- How To Order in Australia Phenamax overseas with no prescriptions
- Buy in GB / UK ED Medium Pack without doctor prescription
- Canada Online Pharmacy Viagra Super Active cash on delivery ove
ight
- Fast Delivery Allopurinol without script
- Buy Online Cheapest Silagra no script next day delivery
- Order Cheap Generic Uniphyl Cr c.o.d ove
ight no rx
- Order in GB / UK Cheap Generic Tentex Royal saturday delivery
- Pharmacies in Australia That Sell Augmentin ove
ight without a prescription
- Purchase At Low Price Tetracycline next day delivery no rx
- Order in GB / UK At Low Price Glucophage no prescription
- Discount Prices in Canada for Zagam with credit card no prescription
- Purchase Cheap Online in Australia Yagara cash on delivery
- Low Prices Dulcolax no script required
- Purchase At Lowest Price Decadron without doctor prescription
- Buy Safety Periactin c.o.d ove
ight no rx
- Buying in Canada Generic Vasotec with no rx
- Ordering in GB / UK Lopressor ove
ight without prescription
- Buying in USA Generic Jelly Pack-15 non prescription needed
- Buying in Australia Generic Calcium Carbonate ove
ight without dr approval
- Cheap Prices Viramune overseas with no prescriptions
- Where To Get in USA Antivert no prescription needed
- Buying in Canada At Lowest Price Valtrex in inte
et drugs ove
ight
Lstrguiffic - 2017-04-17  03:27:46
 It would be interesting to know more

[url=http://www.eestivanemad.ee/forum/viewtopic.php?f=2&t=1248419] In my opinion you need to rest more often, very much you ea
.
[/url]

http://coc.lesvaillants.com/viewtopic.php?f=19&t=198819
Lemypync - 2017-04-17  01:42:43
 Nibaccild uuzfmovjaat joyp vqaxydsw
Romansag - 2017-04-17  01:41:02
 [url=http://maglid.ru/nashivki-leibly-shevrony.html]изготовление шевронов на заказ в москве[/url] - магнит изготовление, подвеска на телефон купить.
Uhzyvw - 2017-04-16  23:16:48
 treatment for sunstroke std symptoms for men
http://canadianpharmacies.org/
canadian pharmacy medical school rankings 2016
canada pharmacy
what is a std
[url=http://canadianpharmacies.org/]canadian pharmacy online[/url]
insurance health
DanielSoilk - 2017-04-16  20:51:11
 Продам акк много какими танками WOT ( премы 9-10лвл)

Отрываю от души ! ТОповый акк ! продам(((
Привязан к майлу и телефону - сменим вместе
skype - cherry4very
Ayego71 - 2017-04-16  18:20:35
 disulfiram to buy cheap http://lanyrd.com/profile/mgr284062739517x-8414/bio/
http://www.purevolume.com/disulfiram250mgbuy
http://buy-disulfiram-250mg.soup.io
http://orderdisulfiram250mgonlineunitedkingdom.soup.io
Popaaaaafg - 2017-04-16  17:47:57
 [URL=http://eropix.xyz/view.php?img=m020x0R010n162P1.jpg][IMG]http://eropix.xyz/i/m020x0R010n162P1_preview.jpg[/IMG][/URL]

Рассказал уже всем про порнушечные фотографии огромной задницы в лифчике

http://zhopastie.ru/

На досуге посмотрите ню записи жопастые пизды с плетью


http://fashions-wear.com/user/bessseddk/


Рекламирую эротические картинки больших попок с задницей


http://bbs.ukongfu.com/home.php?mod=space&uid=186652

Ира подошла сзади уперевшись в меня грудью. Меня это слегка возбудило. Однако тут ее ручки скользнули по животу и исчезли у меня в штанах. Вследствие минуту я уже увел Иру в комнату родителей. Я плюхнул ее на кровать и безотлагательно начал раздевать. Я снял с нее маечку и начал расцеловать в рот и шею, вследствие мгновение я уже снял с нее лифчик, у нее был точный передовой размер, к тому же это был дорогой мой размер. Я начал лобызать и давить ее душа а Ира говорила.


http://www.sels.ru/user/sluttttpii/




Ассоциация училок в групповушке бодренько шкварится c толпой пoгaнцев c нефритовой сарделькой.



http://occultgalaxies.com/forum/viewtopic.php?f=18&t=14777&p=30103#p30103



Полномасштабные минетные отрывки больших попок топ-лесс



http://niabis.ru/blog/vybor-osushitelya-vozduha/#comment_805



Модераторы допустят - нудистские засветы жопастых шлюх с дедика
<<[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.