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

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

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

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

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

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

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

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

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

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

index.php

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

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

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

Styly a knihovna jQuery

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

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

comment.php

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

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

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

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

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

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

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

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

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

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

comment_template.php

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

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

comment.js

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

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

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

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

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

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

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

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

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

}


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

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

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

}


});

addkoment.php

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

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

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

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

}
?>

new_comment.php

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

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

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

Závěr

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

Systém Orphus
Napište komentář.
Celkem komenrářů(10301)
Richardwag - 2017-09-11  18:02:17
 [url=http://resumewritingservice10.com/]best resume writing service[/url]
resume writing service reviews
resume writing service cost
best online resume writing service
Freddieslina - 2017-09-11  17:08:15
 [url=http://www.laaninorge.com/50000]Lan 50000 kr[/url] - Lane 5000 - laaninorge.com, Lan 10000 - laaninorge.com.
JamesCib - 2017-09-11  16:00:11
 Our team is a unique producer of quality fake documents.
We offer only original high-quality fake passports, driver's licenses, ID cards, stamps and other products for a number of countries like:
USA, Australia, Belgium, Brazil, Canada, Italy, Finland, France, Germany, Netherlands, Spain, United Kingdom. This list is not full.

To get the additional information and place the order just visit our website:

http://www.salepassportsfake.cc www. salepassportsfake.cc


>> Contact e-mails:


General support: support@salepassportsfake.cc


Technical support: admin@salepassportsfake.cc



-----------------------------
Keywords:

false fake passports for sale of Afghanistan
false fake passports for sale of Albania
false fake passports for sale of Algeria
false fake passports for sale of Andorra
false fake passports for sale of Angola
false fake passports for sale of Antigua & Deps
false fake passports for sale of Argentina
false fake passports for sale of Armenia
false fake passports for sale of Australia
false fake passports for sale of Austria
false fake passports for sale of Azerbaijan
false fake passports for sale of Bahamas
false fake passports for sale of Bahrain
false fake passports for sale of Bangladesh
false fake passports for sale of Barbados
false fake passports for sale of Belgium
false fake passports for sale of Belize
false fake passports for sale of Benin
false fake passports for sale of Bhutan
false fake passports for sale of Bolivia
false fake passports for sale of Bosnia Herzegovina
false fake passports for sale of Botswana
false fake passports for sale of Brazil
false fake passports for sale of Brunei
false fake passports for sale of Bulgaria
false fake passports for sale of Burkina
false fake passports for sale of Burundi
false fake passports for sale of Cambodia
false fake passports for sale of Cameroon
false fake passports for sale of Canada
false fake passports for sale of Cape Verde
false fake passports for sale of Central African Rep
false fake passports for sale of Chad
false fake passports for sale of Chile
false fake passports for sale of China
false fake passports for sale of Colombia
false fake passports for sale of Comoros
false fake passports for sale of Congo
false fake passports for sale of Congo Democratic Rep
false fake passports for sale of Costa Rica
false fake passports for sale of Croatia
false fake passports for sale of Cuba
false fake passports for sale of Cyprus
false fake passports for sale of Czech Republic
false fake passports for sale of Denmark
false fake passports for sale of Djibouti
false fake passports for sale of Dominica
false fake passports for sale of Dominican Republic
false fake passports for sale of East Timor
false fake passports for sale of Ecuador
false fake passports for sale of Egypt
false fake passports for sale of El Salvador
false fake passports for sale of Equatorial Guinea
false fake passports for sale of Eritrea
false fake passports for sale of Estonia
false fake passports for sale of Ethiopia
false fake passports for sale of Fiji
false fake passports for sale of Finland
false fake passports for sale of France
false fake passports for sale of Gabon
false fake passports for sale of Gambia
false fake passports for sale of Georgia
false fake passports for sale of Germany
false fake passports for sale of Ghana
false fake passports for sale of Greece
false fake passports for sale of Grenada
false fake passports for sale of Guatemala
false fake passports for sale of Guinea
false fake passports for sale of Guinea-Bissau
false fake passports for sale of Guyana
false fake passports for sale of Haiti
false fake passports for sale of Honduras
false fake passports for sale of Hungary
false fake passports for sale of Iceland
false fake passports for sale of India
false fake passports for sale of Indonesia
false fake passports for sale of Iran
false fake passports for sale of Iraq
false fake passports for sale of Ireland Republic
false fake passports for sale of Israel
false fake passports for sale of Italy
false fake passports for sale of Ivory Coast
false fake passports for sale of Jamaica
false fake passports for sale of Japan
false fake passports for sale of Jordan
false fake passports for sale of Kazakhstan
false fake passports for sale of Kenya
false fake passports for sale of Kiribati
false fake passports for sale of Korea North
false fake passports for sale of Korea South
false fake passports for sale of Kosovo
false fake passports for sale of Kuwait
false fake passports for sale of Kyrgyzstan
false fake passports for sale of Laos
false fake passports for sale of Latvia
false fake passports for sale of Lebanon
false fake passports for sale of Lesotho
false fake passports for sale of Liberia
false fake passports for sale of Libya
false fake passports for sale of Liechtenstein
false fake passports for sale of Lithuania
false fake passports for sale of Luxembourg
false fake passports for sale of Macedonia
false fake passports for sale of Madagascar
false fake passports for sale of Malawi
false fake passports for sale of Malaysia
false fake passports for sale of Maldives
false fake passports for sale of Mali
false fake passports for sale of Malta
false fake passports for sale of Marshall Islands
false fake passports for sale of Mauritania
false fake passports for sale of Mauritius
false fake passports for sale of Mexico
false fake passports for sale of Micronesia
false fake passports for sale of Moldova
false fake passports for sale of Monaco
false fake passports for sale of Mongolia
false fake passports for sale of Montenegro
false fake passports for sale of Morocco
false fake passports for sale of Mozambique
false fake passports for sale of Myanmar, Burma
false fake passports for sale of Namibia
false fake passports for sale of Nauru
false fake passports for sale of Nepal
false fake passports for sale of Netherlands
false fake passports for sale of New Zealand
false fake passports for sale of Nicaragua
false fake passports for sale of Niger
false fake passports for sale of Nigeria
false fake passports for sale of Norway
false fake passports for sale of Oman
false fake passports for sale of Pakistan
false fake passports for sale of Palau
false fake passports for sale of Panama
false fake passports for sale of Papua New Guinea
false fake passports for sale of Paraguay
false fake passports for sale of Peru
false fake passports for sale of Philippines
false fake passports for sale of Poland
false fake passports for sale of Portugal
false fake passports for sale of Qatar
false fake passports for sale of Romania
false fake passports for sale of Rwanda
false fake passports for sale of St Kitts & Nevis
false fake passports for sale of St Lucia
false fake passports for sale of Saint Vincent & the Grenadines
false fake passports for sale of Samoa
false fake passports for sale of San Marino
false fake passports for sale of Sao Tome & Principe
false fake passports for sale of Saudi Arabia
false fake passports for sale of Senegal
false fake passports for sale of Serbia
false fake passports for sale of Seychelles
false fake passports for sale of Sierra Leone
false fake passports for sale of Singapore
false fake passports for sale of Slovakia
false fake passports for sale of Slovenia
false fake passports for sale of Solomon Islands
false fake passports for sale of Somalia
false fake passports for sale of South Africa
false fake passports for sale of Spain
false fake passports for sale of Sri Lanka
false fake passports for sale of Sudan
false fake passports for sale of Suriname
false fake passports for sale of Swaziland
false fake passports for sale of Sweden
false fake passports for sale of Switzerland
false fake passports for sale of Syria
false fake passports for sale of Taiwan
false fake passports for sale of Tajikistan
false fake passports for sale of Tanzania
false fake passports for sale of Thailand
false fake passports for sale of Togo
false fake passports for sale of Tonga
false fake passports for sale of Trinidad & Tobago
false fake passports for sale of Tunisia
false fake passports for sale of Turkey
false fake passports for sale of Turkmenistan
false fake passports for sale of Tuvalu
false fake passports for sale of Uganda
false fake passports for sale of Ukraine
false fake passports for sale of United Arab Emirates
false fake passports for sale of United Kingdom
false fake passports for sale of United States
false fake passports for sale of Uruguay
false fake passports for sale of Uzbekistan
false fake passports for sale of Vanuatu
false fake passports for sale of Vatican City
false fake passports for sale of Venezuela
false fake passports for sale of Vietnam
false fake passports for sale of Yemen
false fake passports for sale of Zambia
false fake passports for sale of Zimbabwe
Chrisendug - 2017-09-11  15:51:49
 [url=http://onlinesofortkredite.org/25000-euro-kredit/8000-euro-kredit]8000 euro kredit[/url] - kredit von 25000 euro, kredit bis 2000 euro.
Josephveics - 2017-09-11  09:56:29
 [b]Внесем специалистов в реестр НОСТРОЙ/НОПРИЗ![/b]

[b]>[/b] Подберем специалистов при их отсутствии;
[b]>[/b] Подготовим полный комплект документов;
[b]>[/b] Проверим документы на соответствие;

[b]Без отказов! Быстро! ЗВОНИ! 8(800)707-21-62[/b]


[url=http://att.edu-c.ru/]Если ваши специалисты ещё не занесены в НРС, то вам грозит приостановска деятельности и штраф[/url]
Sonjafar - 2017-09-11  01:19:30
 cbd hemp oil drops for pain for sale cbd cannabis oil for pain [url=https://cbdoil4u.org/cbd-oil-for-pain/]CBD Oil for Pain[/url] CBD Oil for Pain
best cbd hemp oil for pain cbd oil for pain cbd cannabis oil for pain cbd oil for cancer pain
Ronaldnet - 2017-09-11  00:41:02
 http://weightloserex.blogspot.com/2017/08/effective-weight-loss-diet-in-one-week.html
https://blogofweightloss.wordpress.com/2017/08/27/kefir-diet/
https://weightlossdiettopblog.wordpress.com/2017/09/02/reducing-in-size-but-not-losing-weight/
https://weightlossdiettopblog.wordpress.com/2017/09/02/how-to-lose-weight-fast-using-laxatives/
https://weightlossdiettopblog.wordpress.com/?p=48
AngeloFluom - 2017-09-11  00:32:09
 http://pagebin.com/TXOVk5ql
http://pagebin.com/UQpdq3fM
http://pagebin.com/jt4j38d4
https://blogofweightloss.wordpress.com/2017/08/28/splitting-fats-in-the-body-what-promotes-and-products-for-the-splitting-of-fats/
https://sites.google.com/site/howtoweightlossdietplanbest/tasks
Josephprics - 2017-09-10  22:11:04
 [url=http://howmuchdoescialiscost5.com/]how much does cialis cost without insurance[/url]
cost of cialis at walgreens
cialis cost
how much does cialis cost at walmart
Williamvap - 2017-09-10  21:15:20
 [url=http://buyprednisolone02.org/]where to buy prednisolone acetate ophthalmic suspension[/url]
buy prednisolone no prescription
where can i buy prednisolone
buy prednisolone 5mg
RickyBlozy - 2017-09-10  20:57:30
 [url=http://buyazithromycin02.org/]azithromycin 500 mg buy online[/url]
where can i buy azithromycin
where to buy azithromycin
where to buy azithromycin over the counter
Richardbag - 2017-09-10  20:57:30
 [url=http://viagraforsale04.com/]viagra for sale in usa[/url]
viagra super force for sale
viagra for sale near me
womens viagra for sale
Michaelmig - 2017-09-10  20:37:15
 [url=http://genericcialisonline5.com/]cialis generic[/url]
cialis generic name
generic cialis reviews
cialis generic best price
AntonioCax - 2017-09-10  19:20:56
 [url=http://orderviagra04.com/]where to order viagra[/url]
mail order viagra
viagra mail order
viagra mail order usa
AlfreddaUbs - 2017-09-10  19:08:14
 [url=http://buyviagra04.com/]buy viagra[/url]
buy generic viagra
buy generic viagra online
where can i buy viagra over the counter
Josephhib - 2017-09-10  19:02:14
 [url=http://cialisgenericbestprice5.com/]cialis best price[/url]
cialis 5mg price
cialis 20mg price
price of cialis
Ernestkiz - 2017-09-10  18:27:18
 [url=http://viagraforsale7.com/]herb viagra for sale[/url]
herbal viagra for sale
viagra online for sale
viagra for sale craigslist
RobertNit - 2017-09-10  11:57:11
 Привет всем участникам форума!
Нашел Прикольные новости на этом сайте: http://anubi.ru :
[url=http://anubi.ru/foto-prikoly-interesnoe/2295-valyuta-kotoraya-kogda-to-byla-krepche-rublya.html] Валюта, которая когда-то была крепче рубля [/url]
[b] Современная школа в Китае [/b] http://anubi.ru/foto-prikoly-interesnoe/6491-sovremennaya-shkola-v-kitae.html
http://anubi.ru/foto-prikoly-interesnoe/5253-spusk-dyavola-neobychnaya-gora-v-ssha.html
http://anubi.ru/foto-prikoly-interesnoe/5003-15-prichin-pochemu-singapur-luchshiy-gorod-na-zemle.html
Campbelkew - 2017-09-10  10:56:35
 Приветствую.
Хотели бы купить модное платье?
Подробности на сайте: http://platye.org/
Josephjix - 2017-09-10  03:53:34
 [url=http://www.lainatheti.com/10000e/lainaa-5000-euroa]Lainaa 5000 euroa - lainatheti.com[/url] - lainaa 900e, lainatheti.com
<<[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] [456] [457] [458] [459] [460] [461] [462] [463] [464] [465] [466] [467] [468] [469] [470] [471] [472] [473] [474] [475] [476] [477] [478] [479] [480] [481] [482] [483] [484] [485] [486] [487] [488] [489] [490] [491] [492] [493] [494] [495] [496] [497] [498] [499] [500] [501] [502] [503] [504] [505] [506] [507] [508] [509] [510] [511] [512] [513] [514] [515] [516] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.