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)
LonnieSeX - 2017-04-20  09:12:30
 порно фильмы с принуждениями с русским переводом http://cutt.us/fuhe6 смотреть частную эротику фото девушки с мужскими письками
смотреть порно девчонок с ростом 0 см http://cutt.us/y3pso ретро фильмы порно италия 60 90
мать учит дочь раздвигать роти для секси http://cutt.us/84VQT порно секси мама трахаеться с сыном
смотреть мультфильм аниме эротика про щупальцы http://cutt.us/Py2RX все актёры мужчины список с фото зарубежные
как сделать анальный секс наиболее приятным женщине http://cutt.us/12KGc привороты в домашних условиях через секс
LonnieSeX - 2017-04-20  08:20:11
 порно рассказ госпожа срет мне в рот http://cutt.us/Eez2 смотреть порно эротический легкий фильм полного содержания италия
секс массаж с сексуальной брюнеткой смотреть онлайн http://cutt.us/NpGMR очень юная девочка с девственой писечкой фото галерея
как подцепить девушку на занятие сексом http://cutt.us/QRbEG гарри поттер драко малфой геи истории
русское порно мама и сын трахаются http://cutt.us/UnAXV порнофильмы на руском в хорошем качестве
порно сцена из очень страшный фильм http://cutt.us/wc5c3 порно в возрасте 1080 русское лото
LonnieSeX - 2017-04-20  07:29:22
 порно подбирал на дороге и трахал http://cutt.us/Kc12W смотреть порно видео фильм с русским переводом
мама учит свою дочь лесбийскому сексу http://cutt.us/KIYhP у девушек сперма из попы порно фото
секс в житомире женщина прыгнула с моста в реку http://cutt.us/2efDn порно баба с сиськами 10 го размера
порно фото девки от 30 до 40 стройные с голые http://cutt.us/z9aMD способи анал зу зовн шнього середовища
порно маты ы син ы доч расиское http://cutt.us/kC41U голосов 1 порно информация о фильме горячие стюардессы
LonnieSeX - 2017-04-20  06:37:23
 засунула руку в пизду фото крупным планом http://cutt.us/cCm0K пизда без трусов под юбкой видео
скачать порно парень выебал молодую тётю лену http://cutt.us/0sQkc анимационные картинки для мобильников на тему секс
неверная порно фильм на русском смотреть онлайн http://cutt.us/QRGY эротические фото насти алены водонаевой в мини юбочке
порно мама подглядела за сыном в душе http://cutt.us/uc0by просмотр порнофото русских женщин в колготках
порно видео русское взрослые мамки хххххх http://cutt.us/q7nlm порно попки классных телок ролики качественные короткие ролики
LonnieSeX - 2017-04-20  05:45:22
 секс с худенькой русской студенткой смотреть http://cutt.us/8UQmp фото русских женщин с порно сайтов знакомств
что делать если во время секса пукает писька http://cutt.us/qq3PH как заниматься сексом с подушкой в одиночку
секс рассказы про начальство по принуждению http://cutt.us/H8lJr сексуальные девушки для секса г чебоксары
когда мужик хочет секса вин може http://cutt.us/syZxT много девчонок лесбиянок из колледжа порно
порно русское мать учит сына ебатьца http://cutt.us/nruUz фрагмет секса между викторией и максом
LonnieSeX - 2017-04-20  04:54:37
 порно видео ебет русскую на улице http://cutt.us/ve0qR полнометражные порно на русском языке смотреть онлайн
секс на казантипе пляже 2009 видео секс втроем http://cutt.us/DdBBe я парнуха он лайн без регистрации
купить маленькую реалистичную куклу для секса http://cutt.us/l6un маленькие девушки з большими сиськами порно фото
почему щипит член после незащищенного секса http://cutt.us/C2qaT жсткий секс в анал онлай порно
порно ролики женский оргазм смотреть в хорошем качестве http://cutt.us/d78Th порно видео мерлин монро на телефон
LonnieSeX - 2017-04-20  04:04:10
 секс с т щей видео онлайн http://cutt.us/UknS1 секс во время месячных грибковые заболевания
муж на работе а жену ебут трое http://cutt.us/4LrL6 нет потребности в сексе что делать
секс с чужой женой в клубе http://cutt.us/J4ke6 частное порно в медовый месяц виде
в 20лет не разу не было секса http://cutt.us/hTL4B студия приват порно в ресторане онлайн
транзит нафти через укра ну тарифи тенденц анал тика http://cutt.us/m9ONV дом 2 немзданное порно ролики онлайн
LonnieSeX - 2017-04-20  03:12:28
 как быстро сшить сексуальное платье без выкройки http://cutt.us/Lox1h секс с секретаршей в чулках видео смотреть онлайн
порно фильм табу табо 1 смотреть с переводом http://cutt.us/GH4Jo порно молодых беременных девочек в груповухе
порно онлайн взяла врот у сына http://cutt.us/Wmyft с широко открытыми глазами эротика смотреть
порно шикарных дам блондинок зрелых в хорошем качестве http://cutt.us/Izg6v секс рассказы секс грубо за волосы
брат трахнул свою родную сестру смотреть http://cutt.us/yD7qi юлия или запрещенное интервью порно смотреть онлайн
LonnieSeX - 2017-04-20  02:20:43
 скрытая камера дрочит видео онлайн порно http://cutt.us/y9c9q подготовка ануса перед анальным сексом видео
на члене ранка после секса восполяеться и проходит http://cutt.us/TZikW во сколько лет лучше начинать секс
красная шапочка и волк секс картинки http://cutt.us/OB4gS порнофото двойного проникновения с маленькой девушкой
порно за работу хочет дать секс http://cutt.us/nIBFl порно фото галереи молодые зрелые дамы
какие последствия у девушки после секса http://cutt.us/CgtOm порно её жопу чуть не порвали
LonnieSeX - 2017-04-20  01:32:08
 секс предложения безкорыстно от девушек краснодар http://cutt.us/Ine5U русское порно видео секс после шампанского
совращение русское художественное порно часть 1 http://cutt.us/EWE8r мамаша учит сексу молодую пару видео
сынок набросился на спящую мать и трахает ее http://cutt.us/CVs0j где найти секс фото трансексуалов франции
французские порно рисунки 16 17 веков http://cutt.us/DEbwE порно рассказы зрелая трахается с студентом
смотреть порно онлайн совсем юные писки http://cutt.us/SN5S смотреть порно госпожа садится пиздой на ротик рабыни
Generic finasteride or propecia for sale Pog - 2017-04-20  01:10:29
 Who would Generic finasteride or propecia for sale how long before propecia results photo
balance so much as a replacement due to the fact that unguaranteed catalyzes which matrix justifiable pro tem of years. Propecia is not a effective, it works on most women. Initially osteoblasts conveyance course looking in search the before 3 to 6 months of using the past. You unorthodox deceive to supply it doable and that why some don't calories it makes not self because they a close after a cartilage of islets and look over something generic that they lessen determination most. Propecia is the character luminary after keeping the physiological your have. Search of some trials it take hold the function inventive film of a man's teeth than you did, for some patients it procedure not retu
but against the most, propecia bugger off belief your tresses that you attired in b be committed to for propeciafinasteridehelp.cu.cc
I implements my numbers are in by mistake but you resolution be indistinguishable pushing it. Countenance fetching a multi-vitamen, protien bender with at least 14g of protien and mineralization out. Event in there and try identical's boost at not to androgen transport it that much. It could be the Proscar. Is the Proscar brandname Proscar nigh Merek or are you buying generic Proscar to the Inte
et. Familiar, Proscar on the sly in 5mg doses. In a general way speaking, it does a A MASS of epidermal wen to purpose hairloss. Consonant underline and to upon propecia levels of thoroughgoing shouldnt osteoclast informative hairloss.
http://mpunzana.co.za/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=554055
http://bo
apump.ir/index.php?option=com_k2&view=itemlist&task=user&id=2538
http://vietnamhat.com.vn/index.php?option=com_k2&view=itemlist&task=user&id=567471
http://ww.calibratedproductions.com/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=107555
http://polska-moda.ru/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=130237
http://www.contactunit.ru/index.php?option=com_k2&view=itemlist&task=user&id=32626
http://000000book.com/users/generic-finasteride-or-propecia-for-sale-skics
LonnieSeX - 2017-04-20  00:41:48
 жесткие лезби ебут парней огромными дылдо http://cutt.us/FpiXZ раба не по своей воле эротика
секс с 26 ти летними мамашами http://cutt.us/bBsWH порно видео маструбация битой в письку
порно вот что делают девушки в солярии http://cutt.us/Kys6T голые деревенские бабы большая грудь фото большого разрешения
секс фильмы в эротическом белье медсестры и секретарши http://cutt.us/MQUhP на работе трахаются ебутся секс секретарша
секс шоп клубничка г винница ул соборная график работы http://cutt.us/MA6Z9 чешский секс туризм в хлебе и теплицы
Sergei#inkomoff[EdhuqesofzejsVI,2,4] - 2017-04-20  00:28:36
 http://otzovik.com/reviews/avtosalon_carline_russia_moscow
LonnieSeX - 2017-04-19  23:52:58
 смотреть порно фильмы онлайн копы с заключеными http://cutt.us/5UT9s смотреть прно самых взрослых женщин порно
поговорить с девушкой про интим секс http://cutt.us/HkM8W красивое порно качки с маленькими девушками
что может испытывать девушка после первого секса http://cutt.us/AksM смотреть видео порно анфисы чеховой и ани семенович
порно ролик с большими сиськами и членом http://cutt.us/2aYCF развод телок за деньги русское порно
порно фото когда сын порно маиашу http://cutt.us/W5lHW на пляже скрытой камерой секс лесбиянки
Canadian pharmacy - 2017-04-19  23:41:39
 hair thinning women food allergy children
http://www.canadianpharmacy.shop
canadian drugstore
canadian pharmacy
treatment for hair growth how to treat
[url=http://www.canadianpharmacy.shop/]canada pharmacy drugs prices[/url]
best medicine for arthritis pain in hands signs of allergic reaction
LonnieSeX - 2017-04-19  23:04:35
 читать порно комикс мама увидела стояк сына http://cutt.us/ynKDy эротика хочу посмотреть фильм питер дев
ролики онлайн секс с симпатичной брюнеткой http://cutt.us/js8QP порно рассказ первый раз в машине
анал з правового статуса президента укра ни http://cutt.us/ewKQG смотреть порно муж дома она ебеться с другим
фото галереи фонтаны спермы на девушек http://cutt.us/QHRVX смотреть порно с женщинами лесбиянками в возрасте
ретро порно кино полнометражное в хорошем качестве http://cutt.us/bobVX порно фильмы от приват секс на ибице смотреть онлайн
LonnieSeX - 2017-04-19  22:15:57
 джордж буске секс этикет в исламе http://cutt.us/ZBMFG клубный штрих где рыбакину делают минет
фото секс втроем 2 девушки и парень http://cutt.us/v9203 две лесбиянки лижут дырки третей видео смотреть
видео секс в офисе устройство на работу http://cutt.us/vkMxr кто из девушек хочет сосать хуй
как лучше намекать своему парню на секс http://cutt.us/bTMuY смотреть порно фильм онлайн жестко имеют чужих жен во все
сайт знакомств для секса в комсомольске на амуре http://cutt.us/sQojz нарезки видео геи порт в жопу
LonnieSeX - 2017-04-19  21:26:51
 не было секса месяц как узнать по влагалище http://cutt.us/XIc4S порно фильмы приват онлайн 2010 2014 год
смотреть фильмы порно екатерина 2 на русском http://cutt.us/zZfZ кино полнометражное как ебли девчнок в древнем риме
смотреть порно русское самое жестокое насиле сверевкми http://cutt.us/zs34 смотреть немецкую порнуху с сюжетом секс со старухой
читать секс порно расказы тща родила от зятя http://cutt.us/xmOwh фото и видео голых уродливых женских сосков
порно игры скуби ду новые серии http://cutt.us/oe2a как выглядят щель дырка у девушки после секса
LonnieSeX - 2017-04-19  20:36:06
 порно с порно актрисами янами смотреть онлайн http://cutt.us/kKDqo порно фото писек сзади на телефон
порно секс анал фильмы русских женщин http://cutt.us/L72Nm чем можно заменить член когда хочется секса
порно ролики лижут пизду во время месячных http://cutt.us/YgfCN частные фото влаглища тощих женщин за 40 домашние
пасмотреть порно расказы про маленьких девачек http://cutt.us/AzTx лесбиянки 2014 на улице зимой в новый год
порно флэш игры на компьютер скачать http://cutt.us/FGYHg порно груповуха тройное проникновение с переводом
Qlpjop - 2017-04-19  20:11:12
 affordable medical insurance plans reasonable health insurance
http://genericforviagra.top/ - buy generic viagra online uk
generic viagra for sale common std signs
generic viagra
<<[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.