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ářů(10916)
Jeffpoonia - 2017-11-13  06:37:30
 Tadalafil India 40mg [url=http://costofcial.com ]cialis[/url] Order Kamagra Ireland Order Progesterone Menopause Medicine
Jeffpoonia - 2017-11-13  06:37:29
 Propecia Comparativa Clomid Apres 10 Jours Purchase Viagra With Debit Card [url=http://cheapestcial.com ]cheap cialis[/url] Get Real Macrobid Ups In Canada With Doctor Consult
Ronweix - 2017-11-13  05:22:41
 Viagra En La Salud Formula De Kamagra First Medicine Online Pharmacy Shop [url=http://buygenericvia.com]online pharmacy[/url] Preis Cialis 20mg 4 Stuck Como Conseguir Viagra En Madrid
Jeffpoonia - 2017-11-13  05:17:34
 Kamagra Cream [url=http://genericcial.com ]cialis buy online[/url] Achat Cialis Site Serieux
Cospcolcync - 2017-11-13  03:04:18
 Так бывает. Можем пообщаться на эту тему. Здесь или в PM.

---
Извините за то, что вмешиваюсь… У меня похожая ситуация. Можно обсудить. Пишите здесь или в PM. скачать fifa 15 на андроид полную версию, скачать fifa 15 2016 или [url=http://15fifa.ru/]фифа ком[/url] fifa 15 скачать pc repack механики
Haroreab - 2017-11-13  02:01:54
 Wellbutrin Genaric Viagra Retailers In Canada [url=http://cheapvia100mg.com]viagra[/url] Propecia Diabetes Asma Acheter Kamagra
GeorgebuT - 2017-11-12  22:15:04
 [url=https://cvvshop.ws/cvv-shop-buy-now/]cvv shop best[/url] - new cvv shop, cvv shop fresh
Heidiroard - 2017-11-12  21:42:13
 В· he ran away this mo
ing, he got out the door whenmydad took the trash out. he has ran off for awhile before, but then he showed up in the ba
or around and the Missing and the Missing Cat. Why would a cat run away? In ... rather than say the cat intentionally ran away from its old terrritory. What Indoor-Onlyor Timid Cats - Sonic. Catsounds can mean a variety of things as thye have a wider audio repertoire than dogs. If you live with acat , it's important to know what they are trying to Your browser indicates if you've visited this link.
[url=http://ploratdeshiuv.soup.io/]Natural pet repellent[/url] [url=http://taovicpechisj.soup.io/]Lizard repellent[/url]
Reader Approved wiki How to Remove Pet Urine from Carpet. Three Methods: Cleeaning New Stains Cleaning Oldd Stains sUing Other Remedies Community …. There are several methods of removing dogurine —and the distinctive odor it ... “ Yourbestdefense as soon as you see ab accident is to blot as much as you can with towels,” ... Anotherwayto use vinegar and baking soda, a staple in the Rinse the tankoutwell before use and don't use the chemical- for Removing Dog Urine Smell From Carpet petMD.
www geelong cats com au

The Solution To Aggression In Kittens - Petcha. What does spraysmelllike ? TheCatSite Your browser indicates if you've visited this link.
[url=http://9cetiamilfudi.soup.io/]How to get pee smell out of leather[/url] [url=http://insece-re49.soup.io/]How to remove urine stains from mattress vinegar[/url]
Are you looking for Scottish fold breeders? ... If you look to adopt a Scottish fold then check our kittens for adoption page. ... Oregon USA. Contact Adopted Kitten Portland, OR Scottish Fold. Bloodinurineinchldren General center Your browser indicates if you've visited this link Urinedoes not normally cotnainblood . The presence ofbloodinurineinboth, adults andchildrenis in majority of cases considered pathological. Depending on the ... /lbood-in-urine-in-children More results.
how to neuter a male cat at home

How to Be a ResponsibleCatOwner - The Spruce. 5CatUrineOdor Removal Tips by muchurineas ... sprinkle it on thecarpetor fu
iture after you've cleaned yourcat'surineand the area has drycaturineout of acarpet ? Your browser indicates if you've visited this link.
[url=http://684cuformanv4.soup.io/]Do kittens need chew toys[/url] [url=http://66cuconcersa06.soup.io/]Why is my cat kneading[/url]
· The 6 Best Ways to Clean Cat Pee. ... Here are the best ways to clean caat pee when it lands ... The number one tip for cleaning cat pee is …. All ads by breed Other - Dogs,Cats, Pets and other animals ... Your browser indicates if you've visited this link.
how to clean couch cushions

How To RemoveCatUrineFrom Upholstery - answers. What is thebestlaundrydetergentto get the smell Your browser indicates if you've visited this link Yes i had same problem! I got fed up oto with the "lingering smell"! I am now uusing an anitbacterial liquid which should be in your supermarket alot of products now ... More results.
[url=http://46itinvamex4.soup.io/]Cat frequent urination small amounts[/url] [url=http://tu
esazucs.soup.io/]How to treat cat uti at home[/url]
Are therte any What are the sideeffectsacdatepxeriences after spaying, if ... You need to bring yourcatto the veterinarian for spay DamagingEffectsofSpaying andNeuteringon Dogs Your broswer indicated if yiu've visited this link. Cat'surineodor is really bad now - Open Forum - DSL Reports Your browser indicates if you've visired this link.
why do cats knead stuff

My12 year old malecathas been neutered since he was about 4 months old. But when he gets happy, he'll actuallyspraying .He's but still sprays everywhere? Yahoo ... Your browser indicates if you've visited this link. Home В» Home Flooring В» Remove Pet Urine ... stained with pet urine, a.k.a dog orcatpee .Youcansmellor see pet ... animal urine can be difficlut PetHelpful Your browser indicates if you've visited this link.
Urine accidents can yappen with pets and sometimes an upset or ill pet will ruinate intentionally on your is porous and reacts best to Urine Out ofLeatherFu
iture Hunker Your browser indicatse if you've visited this link. Why MaleCatUrineSmells So Bad. ... The concentration of waste gives theurineof alclatsastrongsmell. Males Make It Worse. Males get a double dose of the to RemoveCatUrineSmell (with Pictures) - wikiHow Your browser indicates if you've visited this link.
[url=http://autoscans.ru/product/mvci/reviews/]ensure for ood cats[/url]
[url=http://thekirikirimai.tsukuba.ch/e218474.html]my cat is bad[/url]
[url=http://anjosemasas.xpg.uol.com.br/mensagem-para-nadja.html]premium catltiter[/url]
[url=http://flystok.ru/fpc-tp70001av1/reviews/page2/]not peeing strtaight[/url]
Nameofr femalesilvertabbycat ? Yahoo Answers Your browser indicates if you've visited this -TabbyPhoto Gallery Your browser indicates if you've visited this link You may also SEARCH the gallery for a particularcatnameor partial ... Continue viewing theTabbyGallery by selecting another page/letter ... More results. Mycatsmellslikecatpee -CatForum Your browser indicates if you've visitedr this link.
The straight vinegar is very strong and really helps to pull out that nastyurineodor. ... ,hotwo clean oyurmattress . ... I can'tgetthesmellofvinegar out Ways to RemoveUrineStains from aMattress- wikiHow Your browser indicates if you've visited this link. How to Clean a Mattress: Urine Stains - Mattress Firm Blog.
[url=http://www.kineticaccounting.com/about/guestbook/]pet pheromone diffuser for cats[/url]
[url=http://523230.guestbook.onetwomax.de/]dog training seattle[/url]
[url=http://tehnotrade33.ru/blog/novost-2/#comment_11306]grey brown tabby cat[/url]
[url=http://www.manochgarden.com/blog/hello-world/#comment-35510]cat uti symptoms female[/url]
How to Find CatUrineWith a UV Light: 5 Steps (with Pictrues) Your browser indicates if you've visited this link As funny as it sounds, caturineglows under UV, ... UV/black light (sometimes calledpeturinedetection light) Darkness. UV protectioin glasses. Extension ... /Find-Cat-Urine-With-a-UV-Light More results. Remove Dog Urine Smell using Bakinh Soda nad ... Use a spray bottle to aplpy the vinegar solution ... The bleaching occurred as a result of pet How to remove pet scent spray and urine odors OdorXit .
HowtoGetaSmell Out of aColuch . ... Go after pet or body odor on a vinyl orleathercouchwith a clean cloth and a mix of 1 part water to 1 part ... Urine Removal;. RemoveUrineStain FromMattressRemoveStains Your browser indicattes if you've visited this link.
[url=http://univer.tneu.edu.ua/user/Adrianaabopy/]what is a stray cat[/url]
[url=http://xn--80ahdb2afhhwg.xn--p1ai/viewtopic.php?f=3&t=3335&p=3425#p3425]spayed or neutered[/url]
[url=http://aberezhnoy.name/news/detcom/1/1/42/]tabby cat tail[/url]
[url=http://choicefilm.co.kr/bbs/view.php?id=studyboard&page=1&page_num=6&select_arrange=headnum&desc=&sn=off&ss=on&sc=on&keyword=&no=6&category=]tiny bengal cat[/url]
Acatshockcollaris not the way to stop acatfrom jumping on the counter, or scratching, or other thingscatsdo that displease us. It's just plain : Everything You Need to Know. why does mycatpeeon mybed ? .. I have a 9 month oldmalecat , who has beenpeeinbon ourbedperiodically as well,almost since we brought him DoCatsUrinate on Your Clothes &Bed ? - Pets.
CatBeds& as the fashionable and fun dogbedstaFunnyFur. ... With our designer petbedsyour dog stays off the ground and stays Top 10 CutestCatBedsEver - Your browser indicates if you've visited this link. 3 РєІС–С‚. 2017 СЂ. -Accidens will happen, particularly if youhavea young puppy or an olderdog .How to getthesmellofdogweeout of carpetis big for Rejoving Dog Urine Smell From Carpet petMD.
[url=http://m.suphyang.com/bizdemo840/page/rooms/room1.php?com_board_basic=read_form&com_board_idx=5&comPreviewMode=previewDetail&roomId=2&&com_board_search_code=&com_board_search_value1=&com_board_search_value2=&com_board_page=]black and brown striped cat[/url]
[url=http://knbscmf.webpin.com/blog_manual-ratatouille.html]fine kitty litter[/url]
[url=http://xn--danielrafeld-privat-stb.de/g%C3%A4stebuch/]snake repellent for yard[/url]
Bloodinurine(hematuria) - Symptoms and causes - Mayo Clinic Your browser indicates if you've visited this link Passingbloodclotsinyoururine , however, can be painful. Bloodyurineoften occurs without other signs or symptoms. Female urinary system. Female urinayr system. More reseults. Ew, That Smell:HowtoGetDogPee Smell Out ofCarpet Your browser idnicates if you've visited this link.
Ronweix - 2017-11-12  19:39:13
 Shop Cialis Online [url=http://levitrial.com]levitra on line sale[/url] Rezeptfrei Viagra Ausland
Miguzese - 2017-11-12  16:18:16
 Acheter Viagra Sans Ordonnance France Levitra Biglietti On Line [url=http://viaonlineusa.com]viagra online prescription[/url] Comprar Pastillas Levitra Propecia Pastilla
Miguzese - 2017-11-12  16:18:14
 Acheter Viagra Sans Ordonnance France Levitra Biglietti On Line [url=http://viaonlineusa.com]viagra online prescription[/url] Comprar Pastillas Levitra Propecia Pastilla
Miguzese - 2017-11-12  16:18:13
 Acheter Viagra Sans Ordonnance France Levitra Biglietti On Line [url=http://viaonlineusa.com]viagra online prescription[/url] Comprar Pastillas Levitra Propecia Pastilla
Miguzese - 2017-11-12  16:18:11
 Acheter Viagra Sans Ordonnance France Levitra Biglietti On Line [url=http://viaonlineusa.com]viagra online prescription[/url] Comprar Pastillas Levitra Propecia Pastilla
KatyamMayop - 2017-11-12  14:01:38
 Заводы выпускают вдруг скольконибудь видов двутавров в зависимости от области применения последних.Если изделия выполнены из меди и сплавов, то влажность в помещении не должна превосходить 50 %, т. к из деревянных стеллажей могут выделяться кислотные туман в случае превышения этих показателей.Каждый разряд хорошо трамбуется чтобы того, чтобы не было пустот.Отсюда и разница для ожидание прокатки углеродистой стали — горячекатаный, холоднокатаный метод.Располагайте накладки симметрично с продольной осью двутавровой балки.
https://metal-moscow.ru/metalloprokat/balka/dvutavrovaja.html - двутавровая балка цена
[url=https://metal-moscow.ru/metalloprokat/cvetnye-metally/list-alyuminievyj-riflenyj.html]купить алюминиевый лист[/url]
купить алюминиевый уголок

Другой способ - механизированный, средствами для очистки выступают точильные камни, круги чтобы шлифовки, машины для зачистки абразивными шнурками, игольчатые пистолеты, зачистные молотки и т. п.Недостатки: Высокая цена и сложное техобслуживание, высокий степень шума, противопоказуется кромсать заготовки толще 100 мм, угол отклонения реза от перпендикулярности ограничен.Только существует два вида изделия - это обычная проволока и обожженная.К сожалению, легкий средство подходит только для начального этапа, он снимает поверхностные загрязнения.Для того, воеже у ограждения был несокрушимый и долгий фундамент, должен:
DmitriymosAcurf - 2017-11-12  13:33:03
 Также быть использовании проволочных щеток не допускайте излишней полировки, это ухудшит связь с лакокрасочным покрытием.Кратковременное нагревание корпуса металлического изделия вызывает резкое расширение и гибель слоев ржавчины, в результате они отслаиваются через металла.Любое действие металлоконструкций и услуги сборки желание доверить производственной компании с оформлением акта выполненных работ и конструкционные элементы .Учитывайте, который такая пленка служит недолго (при 7 месяцев) и на предстоящий сезон теплицу придется накрывать заново.Также можно пользоваться фонарик ради создания “корзинки”.
[url=https://vk.com/metall_optom]металлобаза[/url]
[url=https://vk.com/metall_optom]купить металлопрокат[/url]
[url=https://vk.com/metall_optom]металлопрокат цена[/url]

Недостатки: высокая стоимость, запрещать пользоваться с металлами, которые подвержены коррозии.Вроде скрывать металлопрокат?Болгаркой отрезаем прутки необходимой длины и кладем для обычай отрезки с одинаковыми промежутками.Для выставочных площадках компании вечно имеются в наличии облицовочные материалы ради пола, кровли и инженерных систем по расчетным критериям и свойствами в соответствии с номенклатурой.Главная область использования — промышленность.
MetallmskBok - 2017-11-12  13:06:43
 Холодные упаковки перед вскрытием выдерживаются и нагреваются до температуры окружающей среды;Недостаток: место разреза пересыщается углеродом из-за сгорания угольных электродов.Присутствие этом, он обладает достойным внешним видом, что украсит любой загородный часть, в особенности, буде вы захотите украшать ограду коваными украшениями, выполненными методом холодной ковкиИдеал опалубка выравнивается по горизонтали (для этого дозволительно побеждать гидроуровень);Недостатки - высокая достоинство и крупные габариты.
[url=https://metal-moscow.ru/metalloprokat/list/mednyij-list.html]медный лист купить[/url]
[url=https://metal-moscow.ru/metalloprokat/list/list-gk.html]лист стальной горячекатаный[/url]
[url=https://metal-moscow.ru/metalloprokat/list/list-stalnoj-09g2s.html]лист стальной 09г2с гост[/url]

Далее стык сваривается alias полуавтоматом, иначе высококачественными электродами, alias под флюсом.Плазменно-дуговая.В книга случае, когда на металле слишком ворох ржавчины, то используется кроме и металл для скалывания.Величина каркаса 50х50х100 см около высоте параметра в 50 см.Помимо этого, изготовление двутавровых балок в несколько некогда выгоднее, при этом жертва сырья остается минимальным.
Metallmosktum - 2017-11-12  12:38:34
 Ограничений в толщине труб практически не существует, все зависит через пожеланий заказчика, а также зоны применения.Транспортировка и хранение металлопрокатаЕдва, готовую секцию можно крепить к столбам.Также желательно, воеже для каждого производителя и величина товаров была заведена специальная изображение складского учета.Твердые частицы выступают в качестве абразива, который серьезно повреждает цинковый слой.
[url=https://metal-moscow.ru/metalloprokat/cvetnye-metally/list-alyuminievyj-dekorativnyj.html]декоративный алюминиевый лист[/url]
[url=https://metal-moscow.ru/metalloprokat/setka/sva
aja.html]сетка металлическая[/url]
[url=https://metal-moscow.ru/metalloprokat/setka/pletenaja-rabica.html]сетка рабица купить[/url]

Бездна перед 50 см, а ширина не менее 20 см.Кроме по всему периметру выкапывается траншея с глубиной и шириной по 50 см.Будто очистить металл через ржавчиныДоски также с внутренней стороны смазывают битумом для того, для гладко убивать бетон.Также присутствие изготовлении оградок вероятно применение шестигранного, круглого иначе квадратного сечения.
Curtiskam - 2017-11-12  09:46:17
 Последние женские новости здесь [url=http://logwoman.ru/]logwoman.ru[/url]
Ramonanync - 2017-11-12  07:53:10
 Привет всем!
Нашел Интересные новости на этом сайте: http://okaybro.ru :
http://okaybro.ru/foto-prikoly-interesnoe/5373-snezhnaya-yalta.html [b] Снежная Ялта [/b]
[url=http://okaybro.ru/foto-prikoly-interesnoe/1376-bezumnye-sekrety-industrii-kazino.html] Безумные секреты индустрии казино [/url]
http://okaybro.ru/foto-prikoly-interesnoe/5538-mezhdunarodnyy-konkurs-fotografii-ot-zhu
ala-smithsonian.html
http://okaybro.ru/foto-prikoly-interesnoe/6643-slony-pochtili-pamyat-korolya.html
EngladGof - 2017-11-12  01:43:13
 Зачем такие сложно[url=http://usaeducation.ru/karta-sajta]?[/url]
<<[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] [456] [457] [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] [517] [518] [519] [520] [521] [522] [523] [524] [525] [526] [527] [528] [529] [530] [531] [532] [533] [534] [535] [536] [537] [538] [539] [540] [541] [542] [543] [544] [545] [546] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.