Każdy z Was chciałby posiadać na swojej stronie system, dzięki któremu będzie jeszcze bliżej z użytkownikami.
Najprostszym sposobem jest zaimplementowanie u siebie prostego systemu komentarzy, poprzez który wizytatorzy naszego portalu będą mogli również dzielić się swoimi przemyśleniami na dany temat.
Ciekawostką jest fakt, że komentarze, które dodamy muszą najpierw zostać zaakceptowane w Panelu Administracyjnym (zapobiegnie to niechcianego spamu).
Naszą przygodę zaczynamy od stworzenia tabeli w bazie danych (patrz: KOD.1).
Gdzie:
ID - id komentarza
data - czas dodania
autor - autor komentarza
host - host autora
ip - ip autora
tresc - treść komentarza
id_newsa - id newsa pod, którym jest komentarz
status - status komentarza (1-zaakceptowany, 0-niezaakceptowany).
Następnie w rozwinięciu danego newsa, czyli plik readmore.php, czytaj.php itp. tworzymy formularz dodawania komentarzy (patrz: KOD.3), wraz ze skryptem sprawdzającym, czy zostały dodane już jakieś komentarze. Jeżeli zostały dodane wyświetlamy je pod danym newsem.(patrz: KOD.2)
Plik odpowiadający za dodawanie odpowiednich rekordów to komentarz2.php (patrz: KOD.5). To właśnie on jest uruchamiany po wciśnięciu przycisku Akceptuj przez użytkownika.
Aby uniknąć sytuacji dodawania dwa razy tego samego komentarza przy odświeżaniu strony, generujemy dla każdego komentarza unikalny kod za pomocą funkcji (patrz: KOD.4).
Tutaj kończy się rola użytkownika. Teraz przejdziemy do Panelu Administracyjnego, a raczej miejsca gdzie akceptujemy wybrane komentarze. (patrz: KOD.6).
Listing
CREATE TABLE `project`.`comments` (
`id` INT( 10 ) NOT NULL ,
`data` VARCHAR( 50 ) NOT NULL ,
`autor` VARCHAR( 40 ) NOT NULL ,
`host` VARCHAR( 100 ) NOT NULL ,
`ip` VARCHAR( 80 ) NOT NULL ,
`tresc` VARCHAR( 250 ) NOT NULL ,
`id_newsa` VARCHAR( 20 ) NOT NULL ,
`status` VARCHAR( 2 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;
//KOD.2 - Sprawdzanie, czy istnieją już jakieś komentarze
$data=date('Y-m-d H:i:s'); //aktualna data
$ok = trim($_POST['ok']);
$result = mysql_query("SELECT * FROM newsy WHERE id='$id'"); //pobiera nam dane o wybranym newsie
$row = mysql_fetch_array($result);
$news = $row['id']; //przypisujemy id newsa do zmiennej
$result = mysql_query("SELECT * FROM komentarze WHERE id_newsa='$news' AND status='1' order by data DESC"); //wybieramy komentarze, które mają id_newsa zgodne ze zmienną $news, a także status=1.
$row = mysql_fetch_array($result);
if(mysql_num_rows($result)<=0) //sprawdzamy czy są już jakieś komentarze do tego newsa, a jeśli nie wyświetlamy komunikat
{
echo "<center>Brak komentarzy!<p></center>";
}
else //jeśli tak to je wyświetlamy
{
do
{
echo '<div style="float: right;">('.$row['host'].', '.$row['ip'].')<br/></div>
<b>'.$row['autor'].'</b> - '.$row['data'].'<br/>
'.nl2br($row['tresc']).'<p>';
}
while($row = mysql_fetch_array($result));
}
//KOD.3 - Formularz dodawania komentarzy
echo '<form action="komentarz2.php" method="post">
<div style="float: left; width:30%;">Autor</div>
<div style="float: left; width:70%"><input type="text" name="autor" size="30" maxlength="10"></input></div>
<div style="float: left; width:30%;">Treść</div>
<div style="float: left; width:70%"><textarea name="tresc" cols="65" rows="8"></textarea></div>
<input type="hidden" name="data" value="'.$data.'"/>
<input type="hidden" name="id_newsa" value="'.$news.'"/>
<input type="hidden" id="hash" name="hash" value="'.generateHash().'">
<input type="hidden" id="ip" name="ip" value="'.gethostbyname($_SERVER['REMOTE_ADDR']).'">
<input type="hidden" id="host" name="host" value="'.ethostbyaddr($_SERVER['REMOTE_ADDR']).'">
<div style="float: left; width:30%;">Finalizacja</div>
<div style="float: left; width:70%"><input type="submit" value="Akceptuj"><p></div>
</form>';
//KOD.4 - Funkcja generujące kod dla danego komentarza
function generateHash()
{
return md5(time() * rand());
}
//KOD.5 - Plik komentarz2.php dodaje napisany komentarz do bazy
// odbieramy dane z formularza
$data = $_POST['data'];
$tresc = $_POST['tresc'];
$autor = $_POST['autor'];
$id_newsa = $_POST['id_newsa'];
$hash = $_POST['hash'];
$ip = $_POST['ip'];
$host = $_POST['host'];
if($autor && $tresc && $data && $id_newsa) {
// łączymy się z bazą danych
$connection = @mysql_connect('xxx', 'xxx', 'xxx')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('xxx', $connection)
or die('Nie mogę połączyć się z bazą danych');
// dodajemy rekord do bazy
if (!$_SESSION['adduser'] || $_POST['hash'] != $_SESSION['adduser']){
$_SESSION['adduser'] = $_POST['hash']; //sprawdzamy, czy użytkownik nie odświeżył strony
$ins = @mysql_query("INSERT INTO komentarze SET autor='$autor', tresc='$tresc', data='$data', id_newsa='$id_newsa', href='$href', ip='$ip', host='$host'");
echo 'Komentarz dodany do kolejki oczekujących';
}
else //jeżeli odświeżył wyświetlamy komunikat
{
echo 'Ten komentarz został już dodany';
}
//KOD.6 - Miejsce akceptacji komentarzy w Panelu
A. - komentarze niezaakceptowane (niesprawdzone)
$result = mysql_query("SELECT * FROM komentarze WHERE status='0' order by data DESC");
$row = mysql_fetch_array($result);
do
{
echo'<div style="float: left; width:6%;"><font color="red">'.$row['id'].'</font></div>
<div style="float: left; width:10%;">'.substr($row['autor'], 0, 9).'</div>
<div style="float: left; width:25%;">'.substr($row['data'], 0, 24).'</div>
<div style="float: left; width:33%;">'.substr($row['tresc'], 0, 30).'</div>
<div style="float: left; width:18%"><a href="panel.php?page=edytuj_komentarz_tresc&id='.$row['id'].'" target="_parent"></a>
<a href="panel.php?page=usun_komentarz&id='.$row['id'].'" target="_parent">Usuń</a></div><br>';
}
while($row = mysql_fetch_array($result));
B. - Komentarze już zaakceptowane i wyświetlone już na stronie
$result = mysql_query("SELECT * FROM komentarze WHERE status='1' order by data DESC");
$row = mysql_fetch_array($result);
do
{
echo '<div style="float: left; width:6%;"><font color="green">'.$row['id'].'</font></div>
<div style="float: left; width:10%;">'.substr($row['autor'], 0, 9).'</div>
<div style="float: left; width:25%;">'.substr($row['data'], 0, 24).'</div>
<div style="float: left; width:33%;">'.substr($row['tresc'], 0, 30).'</div>
<div style="float: left; width:18%"><a href="panel.php?page=edytuj_komentarz_tresc&id='.$row['id'].'" target="_parent"></a>
<a href="panel.php?page=usun_komentarz&id='.$row['id'].'" target="_parent">Usuń</a></div><br>';
}
while($row = mysql_fetch_array($result));
//KOD.7 - Edytowanie komentarzy i ich akceptacja
function edytuj_komentarz_tresc($id)
{
{
$ok = trim($_POST['ok']);
$result = mysql_query("SELECT * FROM komentarze WHERE id='$id'");
$row = mysql_fetch_array($result);
echo'<form action="" method="post">
<div style="float: left; width:30%;">Autor</div>
<div style="float: left; width:70%"><textarea name="autor" cols="65" rows="1">'.stripslashes($row['autor']).'</textarea></div>
<div style="float: left; width:30%;">Data</div>
<div style="float: left; width:70%"><textarea name="data" cols="65" rows="1">'.stripslashes($row['data']).'</textarea></div>
<div style="float: left; width:30%;">Treść</div>
<div style="float: left; width:70%"><textarea name="tresc" cols="65" rows="4">'.stripslashes($row['tresc']).'</textarea></div>
<div style="float: left; width:30%;">IP autora</div>
<div style="float: left; width:70%"><textarea name="ip" cols="65" rows="2" readonly="readonly">'.stripslashes($row['ip']).'</textarea></div>
<div style="float: left; width:30%;">HOST autora</div>
<div style="float: left; width:70%"><textarea name="host" cols="65" rows="2" readonly="readonly">'.stripslashes($row['host']).'</textarea></div>
<div style="float: left; width:30%;">Status</div>
<div style="float: left; width:70%"><input type="checkbox" name="status" value="1"/> Pokaż na stronie<p></div> //jeśli zaznaczymy komentarz pojawi się na stronie
<div style="float: left; width:30%;">Finalizacja</div>
<div style="float: left; width:70%"><input type="submit" name="ok" value="Edytuj">
<input type="reset" value="Reset"></div>
</form>';
}
if ($ok == 'Edytuj')
{
$autor = $_POST['autor'];
$data = $_POST['data'];
$tresc = $_POST['tresc'];
$status = $_POST['status'];
mysql_query ("UPDATE komentarze SET autor='$autor', data='$data', tresc='$tresc', status='$status' WHERE id=$id ")
or die('Błąd zapytania');
}
}
//KOD.8 - Usuwanie komentarzy
function usun_komentarz($id)
{
$query = "DELETE FROM komentarze WHERE id = '$id'";
if(mysql_query($query) && !empty($id) )
echo 'Komentarz został usunięty poprawnie!<p><a href="javascript:history.go(-1)">wróć</a></p>';
else
echo 'Błąd wprowadzania danych.<p>Wybrałeś złe ID komentarza';
}