Comments System

Comments System jest prostym systemem komentarzy na stronę www. Zaletami tego skryptu są: captcha (zabezpieczenie przed spamem), powiadomienia e-mail z treścią gdzie został dodany komentarz, przez kogo, z jakiego adresu IP oraz o jakiej treści. Poniżej zostały przedstawione poszczególne kawałki kodu. Postaram się je w miarę możliwości omówić.

Pierwsza część kodu jaką omówię to skrypt generujący captcha, czyli obrazek z tekstem który użytkownik musi przepisać w celu dodania komentarza. Jest to jedno z najpopularniejszych zabezpieczeń antyspamowych, więc postanowiłem, że go wykorzystam w swoim projekcie. Poniższy kod nie jest stworzony przeze mnie. Został on znaleziony w Internecie i został wykorzystany przeze mnie całkowicie legalnie, gdyż jest on na licencji open source.

W zmiennej $pool znajdują się znaki z których ma być generowany obrazek. W tym przypadku są to cyfry od 0 do 9 oraz małe litery alfabetu bez polskich znaków. Zmienne $img_width i $img_height to szerokość i wysokość generowanego obrazka.

Następnie jest pętla która losuje 7 znaków ze zmiennej $pool i łączy ją w jeden ciąg znaków przypisując do zmiennej $str. Do zmiennej $im przypisywany jest obrazek o wysokości $img_width i $img_height

Kolejne zmienne odpowiadają za kolory m.in. tła i ramki. Pętla nanosi na obrazek poszczególne znaki które zostały wylosowane w poprzedniej pętli

captcha.php
<?      
        session_start
();
        
$pool '0123456789abcdefghijklmnopqrstuvwxyz';
        
$img_width 120;
        
$img_height 30;

        
$str '';
        for (
$i 0$i 7$i++){
                
$str .= substr($poolmt_rand(0strlen($pool) -1), 1);
        }

        
$string $str;
        
$_SESSION['captcha'] = $string;

        
$im imagecreate($img_width$img_height);

        
$bg_color        imagecolorallocate($im,163,163,163);
        
$font_color   imagecolorallocate($im,252,252,252);
        
$grid_color   imagecolorallocate($im,31,0,0);
        
$border_color imagecolorallocate ($im174174174);

        
imagefill($im,1,1,$bg_color);

        for(
$i=0$i<1600$i++){

                
$rand1 rand(0,$img_width);
                
$rand2 rand(0,$img_height);
                
imageline($im$rand1$rand2$rand1$rand2$grid_color);

        }

        
$x rand(5$img_width/(7/2));

        
imagerectangle($im00$img_width-1$img_height-1$border_color);

        for(
$a=0$a 7$a++){

                
imagestring($im5$xrand($img_height/5), substr($string$a1), $font_color);
                
$x += (5*2); #odstęp

        
}

        
header("Content-type: image/gif");
        
imagegif($im);
        
imagedestroy($im);

?>

Kolejny kawałek kodu (JavaScript) jest odpowiedzialny za zliczanie znaków w polu z treścią komentarza.
Ma on za zadanie wyświetlenie użytkownikowi ile znaków może jeszcze wpisać. W tym przypadku komentarz został ograniczony do 500 znaków.
Ta część skryptu również nie jest mojego autorstwa (Open Source).

counting.js
function zliczanie(pole, nazwa, maxZnak) {
    if (pole.value.length > maxZnak)
        {pole.value = pole.value.substring(0, maxZnak);}  
    else
        {nazwa.value = maxZnak - pole.value.length;}
  }

Teraz najważniejsza część skryptu bowiem odpowiada ona za dodanie komentarza do bazy oraz ich wyświetlanie.

Pierwsza część to funkcja odpowiadająca za emotki. Każdy komentarz jest przepuszczany przez tą funkcję. Jeżeli znajdują się w nim takie ciągi znaków jak np. „ ;p ” to zostanie on zamieniony na odpowiedni obrazek.

Następnie są pobierane dane z formularza, IP usera oraz data i przypisywane do odpowiednich zmiennych.

Kolejna część to szereg warunków , które muszą zostać spełnione aby komentarz został dodany.

Zostaje sprawdzone, czy użytkownik wpisał nick, wiadomość oraz czy dobrze przepisał tekst z obrazka. Również sprawdzamy, czy nick jest dłuższy niż 20 znaków oraz czy wiadomość jest dłuższa niż 500 znaków. Jeżeli wszystko jest w porządku to zmienna $error jest pusta.

Po sprawdzeniu, czy wszystko zostało wypełnione następuje połączenie z bazą MySQL. Łączymy się z tabelą której nazwa składa się ze zmiennej $komentarze oraz wyrazu „_komentarze”. Jest to dość ważne, gdyż w zmiennej $komentarze znajduje się nazwa pliku w którym jest zainstalowany system komentarzy. Np. Jeżeli chcemy dodać system komentarzy do pliku który nazywa się comments_system.php to do zmiennej $komentarze powinniśmy przypisać „comments_system”. Myślę, że jest to w miarę zrozumiałe. Przy łączeniu z tabelą jest sprawdzane, czy owa tabela istnieje. Jeżeli nie istnieje to zostanie ona utworzona. Dzięki czemu możemy w bardzo prosty sposób dodawać nasz system komentarzy do różnych stron. Wystarczy zmieniać zmienną $komentarze na nazwę pliku php.

W dalszej części zostaje sprawdzona zmienna $error. Jeżeli jest pusta (brak błędów) to komentarz zostaje dodany do bazy. Po dodaniu komentarza następuje odświeżenie strony i przekierowanie na podaną stronę .

Następna część to wyświetlanie komentarzy. Łączymy się z odpowiednią tabelą i popieramy wszystkie rekordy. Zostaje zliczona również liczba wpisów w tabeli, czyli liczba komentarzy.

Pętla odpowiedzialna jest za wyświetlanie wyników, czy wszystkich komentarzy. W pętli znajduje się również funkcja która powoduje, że dane z rekordu „Contents”, czyli treść komentarza zostaje podzielona na linie, gdyż po wyświetleniu tego rekordu wszystkie znaki enter nie są wyświetlane, czyli komentarz byłby jedną, długą linią tekstu. Może się to wydać dziwne, ale ta część sprawiła mi najwięcej problemu, gdyż nie wiedziałem do końca w czym jest problem. Po dłuższym czasie doszedłem to tego i wykorzystałem prostą funkcję „explode” która rozbija zmienną $tab na linie.

Kolejna część to formularz. Nie będę się tutaj zbytnio rozpisywał, gdyż nie ma takiej potrzeby. Jedyny na co można zwrócić tutaj uwagę to liczba „500” po wyrazie „iloscZnakow”, bowiem określa ona ile maksymalnie znaków może zawierać komentarz. Liczba ta może być dowolnie edytowana.

Coments.php
<?php
echo '<div id="komentarze">';
//////////Funkcja odpowiadająca a emotki//////////
function emotki($tekst){
        
// jako pierwszy argument podajemy kod emotki a jako drugi kod obrazka a trzeci to tekst
        
$tekst str_replace(';<'' <img src="images/emoty/1.gif">'$tekst);
        
$tekst str_replace(':<'' <img src="images/emoty/1.gif">'$tekst);
        
$tekst str_replace(';/'' <img src="images/emoty/2.gif">'$tekst);
        
$tekst str_replace(':/'' <img src="images/emoty/2.gif">'$tekst);
        
$tekst str_replace(':P'' <img src="images/emoty/3.gif">'$tekst);
        
$tekst str_replace(':p'' <img src="images/emoty/5.gif">'$tekst);
        
$tekst str_replace(';p'' <img src="images/emoty/5.gif">'$tekst);
        
$tekst str_replace(';P'' <img src="images/emoty/5.gif">'$tekst);
        
$tekst str_replace(';8'' <img src="images/emoty/4.gif">'$tekst);
        
$tekst str_replace(':8'' <img src="images/emoty/4.gif">'$tekst);
        
$tekst str_replace(';d'' <img src="images/emoty/8.gif">'$tekst);        
        
$tekst str_replace(':d'' <img src="images/emoty/8.gif">'$tekst);
        
$tekst str_replace(':D'' <img src="images/emoty/8.gif">'$tekst);    
        
$tekst str_replace(';D'' <img src="images/emoty/8.gif">'$tekst);            
        
$tekst str_replace(';('' <img src="images/emoty/6.gif">'$tekst);
        
$tekst str_replace(':('' <img src="images/emoty/6.gif">'$tekst);        
        
$tekst str_replace(':)'' <img src="images/emoty/7.gif">'$tekst);    
        
$tekst str_replace(';)'' <img src="images/emoty/7.gif">'$tekst);            
        
//zwracamy przerobiony tekst
        
return $tekst;

//////////Odebranie danych z formularza//////////
$Nick htmlspecialchars(trim($_POST['Nick'])); 
$Contents htmlspecialchars(trim($_POST['Contents'])); 
$IP $_SERVER['REMOTE_ADDR'];
$Day date('D,d.m.Y');
$send $_POST['submit']; 
//////////Sprawdzamy poprawność danych z formularza//////////
if ($send){   
    
//Sprawdzam nick 
    
if (empty($Nick)) 
        { 
$error "Nie wypełniłeś pola <strong>Nick</strong><br/>";} 
    elseif (
strlen($Nick) > 20
        { 
$error .="Za długi nick - max. 20 znaków <br/>";}  
    
//Sprawdzam wiadomość 
    
if (empty($Contents)) 
        { 
$error .= "Nie wypełniłeś pola <strong>Wiadomość</strong><br/>"; } 
    elseif (
strlen($Contents) > 500
        { 
$error .="Za długa wiadomość - max. 500 znaków <br/>";}
    
//Sprawdzamy captcha    
    
session_start();
    if(
$_POST['captcha'] != $_SESSION['captcha'])
        { 
$error .= "Błędne hasło z obrazka<br/>"; } 
}
//////////Połączenie z bazą MySQL//////////
    
$connection = @mysql_connect"localhost""user""password" )   
    or die(
'Not connect to MySQL');   
    
$db = @mysql_select_db('user'$connection)   
    or die(
'Not connect'); 
//////////Sprawdzanie czy tabela istnieje, jeśli nie to ma ją utworzyć//////////
if( mysql_query("SELECT * FROM ".$komentarze."_komentarze") ) {         
}else{
$zapytanie 'CREATE TABLE '.$komentarze.'_komentarze (id int(11) NOT NULL AUTO_INCREMENT, Nick varchar(100) NOT NULL, IP varchar(100) NOT NULL, Day varchar(100) NOT NULL, Contents Text NOT NULL, PRIMARY KEY(id))';
mysql_query($zapytanie);
}
//////////Sprawdzam czy są błędy, jęsli nie to dodajemy komentarz////////// 
    
if (empty($error)) //czy są błędy
        

    if (empty(
$Nick) or empty($Contents)){ //czy pola nie są puste (sprawdzamy drugi raz dla pewności)
    
}else //dodajemy komentarz do bazy
    
$ins = @mysql_query("INSERT INTO ".$komentarze."_komentarze SET      
    Nick='
$Nick', 
    Day='
$Day',
    IP='
$IP',    
    Contents='
$Contents'"); 
    if (empty(
$Nick) or empty($Contents) or ($error>0)){ }else { mail('twój email'$komentarze"Od: ".$Nick."r\nTreść: ".$Contents."r\nAdres IP:".$IP);    } //wysyłamy e-mail z wiadomością gdzie został dodany komentarz, przez kogo, z jakiego IP oraz jaka jest jego treść    
    
if($ins)     
    
header("Location: http://twoja_strona.pl/".$komentarze.".php"); //strona na jaką skrypt ma przekierować po dodaniu komentarza 
    

//////////Łączymy się z naszą tabelą//////////
$wynik mysql_query("SELECT * FROM ".$komentarze."_komentarze order by id desc"
or die(
'Error!'); 
//////////Pobieramy ilość wpisów (komentarzy)//////////
$zapytanie mysql_query("SELECT Contents FROM ".$komentarze."_komentarze");
$ilosc_komentarzy mysql_num_rows($zapytanie);
//////////Wyświetlamy komentarze////////// 
if(mysql_num_rows($wynik) > 0) { 
    
//jeżeli wynik jest pozytywny, to wyświetlamy dane
    
echo '<form><fieldset><legend>'.$ilosc_komentarzy.' komentarzy</legend><br/>';
    while(
$r mysql_fetch_assoc($wynik)) {     
    echo
'<form><fieldset class="fieldset"><div class="nick">
        '
.$r['Nick'].'
        </div><div class="day">&nbsp&nbsp
        '
.$r['Day'].'
        </div><div class="coment">'
;    
    
//rozbicie komórki z treścią komentarza na linie i wyświetlenie ich po koleji
    
$tab=emotki($r['Contents']);
    
$str $tab;
    
$tab=(explode("\r\n",$str));
    foreach (
$tab as $tab
    {echo 
"$tab<br/>";}
    
//koniec rozbicia
    
echo "</div></fieldset></form><br/><br/>";
    }{
mysql_close($connection);} //zamknięcie połączenia z bazą
}
    echo
'</fieldset></form>';
//////////Formularz do dodawania komentarzy//////////
echo'<form action="'.$komentarze.'.php?action=add" method="post">
    <fieldset> 
    <legend>Dodaj komentarz [Beta]</legend> 
        <label for="Nick">Nick:</label> 
        <input type="text" id="'
.Nick.'" name="'.Nick.'"/><br/><br/>        
        <textarea id="Contents" name="Contents" cols="60" rows="8" onkeydown="zliczanie(this.form.Contents,this.form.iloscZnakow,500);" onkeyup="zliczanie(this.form.Contents,this.form.iloscZnakow,500);"></textarea><br/>        
        <br />Pozostało jeszcze: <input name="iloscZnakow" size="3" value="500" readonly> znaków.<br/>
        <img src="captcha.php" alt="" style="vertical-align: middle" /> <input name="captcha" style="width: 100px; height: 20px; vertical-align: middle;" type="text" /><br/>
        <input type="submit" value="Dodaj komentarz" id="send" name="submit" /><br/><br/>'
;
echo
'<font color="red">'.$error.'</font>'
echo
'</fieldset> 
    </form>'
;
?>

Teraz część którą musimy umieścić na każdej stronie gdzie ma znajdować się system komentarzy. Składa się ona z 4 wierszy. Pierwszy i ostatni nie muszę tłumaczyć. Drugi odpowiada za przypisanie nazwy naszego pliku php do zmiennej &komentarze o której wspominałem już wcześniej. Trzeci wierz odpowiada za wstawienie zewnętrznego kodu, który jest całym mózgiem naszego systemu.

Również na każdej stronie musimy dodać do sekcji head informację o zewnętrznym pliku JavaScript „counting.js” jak i również styli CSS "style.css".

Index.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Anonimg3 - Comments System </title>
<link rel="Stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" language="javascript" src="counting.js"></script>
</head>
<body>

<!-- Komentarze - begin -->
<?php 
$komentarze 
'Nazwa strony na kt�rej jest zainstalowany system np. Http//anonimg3.comxa.com/Coments_system.php';
include (
"Coments.php");
?>
<!-- Komentarze - end -->

</body>
</html>

Arkusz styli odpowiadający za wygląd całego systemu. Może on być edytowany wedle upodobań i kolorystyki strony.

style.css
html, body {
    background-attachment: scroll;
    background-clip: border-box;
    background-color: transparent;
    background-image: url("images/background.gif");
    background-origin: padding-box;
    background-position: 40% 0px;
    background-repeat: repeat;
    background-size: auto;
    /* opis scrollbara */
    scrollbar-3dlight-color:white;
    scrollbar-arrow-color:white;
    scrollbar-base-color:silver;
    scrollbar-dark-shadow-color:white;
    scrollbar-face-color:black;
    scrollbar-highlight-color:white;
    scrollbar-shadow-color:white
}
    

/*KOMENTARZE BEGIN*/
#komentarze {
    width: 80%;
    color: green;
    margin-left: auto;
    margin-right: auto;
}

.nick { 
    color: #333;
    border: 1px solid #ccc;
    background: #E7DBD5;
    margin: 10px 5px 5px 0px;
    padding: 10px;
    float: left;
    font-size: 13px;
    height: 15px;
    overflow: hidden;
    position: relative;
}

.day { 
    text-align: right;
    color: #333;
    border: 1px solid #ccc;
    background: #F2F2E6;
    margin: 10px 5px 5px 0px;
    padding: 10px;
    font-size: 10px;
    height: 15px;
    overflow: hidden;
}

.coment {
    color: black;
    padding-top: 7px;
    font-size: 14px;    
    border-color: #82b4cd;
     border-bottom: 0px dashed #c0d9e6;
    padding-left: 10px;
    padding-right: 10px;
    padding-bottom: 10px;
}

.fieldset {
    border: 2px dashed #E7DBD5;
}
/*KOMENTARZE END*/



Myślę, że wszystko zostało przeze mnie wytłumaczone w miarę sensowy sposób i nikt nie będzie miał problemów z prawidłowym skonfigurowaniem tego skryptu.

W razie jakikolwiek problemów proszę pisać o nich w komentarzach bądź w dziale „kontakt”. Postaram się w miarę możliwości pomóc.

Poniżej przedstawiam screen zainstalowanego systemu komentarzy. Jeśli chciałbyś przetestować ten system bez instalacji wystarczy, że dodasz komentarz do któregoś z moich news’ów, gdyż na całej mojej stronie jest zainstalowany owy system.



Nazwa: Comments System
Wersja: v1.0
Język: Polski
Rozmiar: 0.009 MB
Dodano dnia: 21.06.2012r.
Liczba pobrań: 293
Skrypt Comments System jest moim drugim skryptem który umieściłem na stronie. Wiem, że w Internecie znajduje się dużo takich skryptów, lecz wolałem napisać go sam, gdyż łatwiej mi jest później wprowadzać jakiekolwiek modyfikacje oraz oczywiście chęć sprawdzenia swoich umiejętności i wiedzy.

Możliwości tego systemu to:
-oczywiście dodawanie komentarzy,
-zabezpieczenie antyspamowe (captcha),
-IP użytkownika,
-powiadomienie e-mail o dodanym komentarzu.

Wiem, że ktoś pomyśli „dlaczego nie dodałem możliwości usuwania komentarzy?”. Nie dodałem tej funkcji, ponieważ jest ona mi nie potrzebna, gdyż wystarczy zalogować się do bazy przez PHPMyAdmin i w bardzo prosty sposób można zarządzać wszystkimi komentarzami. Jednak, gdy już ktoś będzie bardzo chciał dodać taką opcję wystarczy, że zapozna się z moim poprzednim skryptem MySQL Manager. Przy niewielkich ambicjach i wiedzy z zakresu PHP i MySQL nie będzie miał najmniejszego problemu.

Cały skrypt można pobrać poniżej. Jeśli będziesz z niego korzystał to napisz mi w komentarzu, jak się sprawuje u Ciebie na stronie. Skrypt ten możesz dowolnie modyfikować. Byłbym wdzięczny jakbyś zamieścił gdzieś link do mojej strony, lecz nie jest to konieczne.

18 komentarzy
Johna471
   Mon,14.08.2017
Would you be taken with exchanging links? debdbadeakeg


1
   Sat,17.06.2017
1


Pharmk618
   Thu,01.09.2016
Very nice site!


Pharmb260
   Sat,27.08.2016
Very nice site!


Pharme41
   Fri,26.08.2016
Very nice site!


Johnk43
   Wed,24.08.2016
Hello, i think that i saw you visited my site so i came to return the favor.I am trying to find things to enhance my web site!I suppose its ok to use some of your ideas!! adfffeeeadba


Vexus
   Sat,07.05.2016
Dziala!


Selim
   Tue,19.08.2014
nie łączy mi z tabelą komentarze i wyskakuje Error! ;x


Pharme246
   Fri,30.05.2014
Very nice site!


Pharmk645
   Wed,28.05.2014
Very nice site!


Johnd786
   Fri,23.05.2014
Do you mind if I quote a few of your posts as long as I provide credit and sources back to your weblog? My blog is in the very same niche as yours and my users would truly benefit from a lot of the information you present here. Please let me know if this alright with you. Thank you! fddcgdcgaedk


misterious
   Sun,10.11.2013
Najs


camel17
   Thu,24.01.2013
ech głupi i prosty błąd, a ja kombinowałem, trzeba było dodac http przed www


camel17
   Thu,24.01.2013
początek i koniec pliku html: <?php ob_start();?> i <?php ob_end_flush();?> i dalej w pliku comments.php:
$Www = htmlspecialchars(trim($_POST['Www']));
$href1 = '<a href="';
$href2 = '">Strona www< a>';

Www='$Www',

<input type="text" id="'.Www.'" name="'.Www.'" ><br/><br/>

< iv class="www">&nbsp&nbsp
'.$r['Www'].'
< div>


camel17
   Thu,24.01.2013
Dzięki wszystko jest super. Mam tylko jeden problem.
Dodałem zmienną $Www i inne przez formularz dodaje do bazy danych taką wartość <a href="www.onet.pl">Strona www< a> i teraz link w komentarzach jest taki: "http://mojastrona.pl/www.onet.pl" próbowałem różnych sposobów i caly czas mi ten header (location...) dodaje do "a href'a".
Jakieś pomysły ?


Anonimg3
   Sun,11.11.2012
~diadia
A wrzucasz na serwer, czy odpalasz przez XAMPP'A?


diadia
   Sat,10.11.2012
Pobrany i rozpakowany:
Notice: Undefined index: Nick in D:\zapasy komentarzy\comments_system\Coments.php on line 28

Notice: Undefined index: Contents in D:\zapasy komentarzy\comments_system\Coments.php on line 29


elo
   Fri,17.08.2012
elo dziala niewyrazne captcha!


Dodaj komentarz [Beta]



Pozostało jeszcze: znaków.





system Rating: 2.0/6 (53 votes cast)

Wyświetleń: 3005
Ostatnia edycja: 03.05.2017