Dnes si ukážeme jak vytvořit návštěvní knihu
Návštěvní kniha
Jedná se vlastně o webovou stránku, na které vám mohou jednotliví návštěvníci zanechávat vzkazy. Pro ty z vás, kterým se již nelíbí škaredá kniha od BlueBoardu a jiných podobných systémů, přináším návod jak si takovou jednoduchou návštěvní knihu vytvořit. Kniha bude vše ukládat do databáze Do knihy bude možné vložit Nick(přezdívku), email, domovskou ww stránku a vzkaz, přičemž Přezdívka a Vzkaz budou povinné položky. Pokud si bude uživatel přát, tak si ho kniha zapamatuje a nebude již muset při příštím psaním do knihy zadávat jednotlivé položky (kniha si je zapamatuje = uloží se do cookies). Do databáze se ukladá samozřejmě také ip adresa návštěvníka. Jednotlivé příspěvky se budou zobrazovat (stránkovat) po 10ti(možno změnit). Počítám, že máte alespoň minimální znalost php a mysql.
Připojení k databázi
Přihlašovací údaje do databáze vam sdělí váš poskytovatel webhostingu.
.connect.php :
<?
$dbhost = 'localhost'; // adresa serveru kde se nachazi databaze
$dbuser = 'root'; // Vase uziv. jmeno pro pristup do databaze
$dbpass = ''; // vase heslo
$dbname = 'dwb'; // jmeno databaze
@$connect = mysql_connect($dbhost,$dbuser,$dbpass);
@$db = mysql_select_db($dbname);
if (!$connect)
{
echo("Chyba: Nepodařilo se připojit k databázi!");
exit;
}
?>
A pak dále potřebujeme vytvořit tyto tabulky, například pomocí phpMyAdmin:
CREATE TABLE `navstevni_kniha` (
`id` int(11) NOT NULL auto_increment,
`nick` varchar(255) NOT NULL default '',
`vzkaz` text NOT NULL,
`datum` varchar(255) NOT NULL default '',
`web` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`ip` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=0 ;
Zobrazení návštěvní knihy
chtěl bych jen upozornit že počítám s tím, že si knihu sami includujete, libovolně do stránky a proto záměrně nepíšu hlavičku ani patku webu. (tagy html, head, metatagy apod.). Takže si je případně dodělejte.
navstevni-kniha.php
<?
include (".connect.php");
if($_POST[navstevni_kniha])
{
if(empty($_POST[nick]))
{
$message = "Musíte zadat vaši přezdívku";
$odeslano ="ne";
}
else
if(empty($_POST[vzkaz]))
{
$message = "Musíte zadat váš vzkaz";
$odeslano ="ne";
}
else
{
$nick = str_replace("<" , "<" , $_POST[nick]); // ochrana proti html tagům a javascriptu
$vzkaz = str_replace("<" , "<" , $_POST[vzkaz]);
$web = str_replace("<" , "<" , $_POST[web]);
$email = str_replace("<" , "<" , $_POST[email]);
$ip = $_SERVER["REMOTE_ADDR"];
$mesic["Jan"]="Ledna ";
$mesic["Feb"]="Února ";
$mesic["Mar"]="Března ";
$mesic["Apr"]="Dubna ";
$mesic["May"]="Května ";
$mesic["Jun"]="Června ";
$mesic["Jul"]="Července ";
$mesic["Aug"]="Srpna ";
$mesic["Sep"]="Září ";
$mesic["Oct"]="Října ";
$mesic["Nov"]="Listopadu ";
$mesic["Dec"]="Prosince ";
$rok = date(" Y");$cislod=date("j ");
$datum = $cislod.$mesic[date("M")].$rok.date(" - G:i:s");
$zapis_vzkazu=MySQL_Query("insert into navstevni_kniha values ('','$nick', '$vzkaz' , '$datum' , '$web' , '$email','$ip');");
if($zapis_vzkazu)
{
$odeslano ="ano";
$message = "Váš vzkaz byl úspěšně přidán"; // vzkaz uspesne ulozen
if($_POST['zapamatovat']=="checked") // Kontrola jestli si ma kniha zapamatovat uzivatele
{
setcookie("cnick", $nick, mktime(18,30,0,1,1,2020));
setcookie("cweb", $web, mktime(18,30,0,1,1,2020));
setcookie("cemail", $email, mktime(18,30,0,1,1,2020));
}
else
{
setcookie("cnick", "", mktime(18,30,0,1,1,2020));
setcookie("cweb", "", mktime(18,30,0,1,1,2020));
setcookie("cemail", "", mktime(18,30,0,1,1,2020));
}
}
else
{
$message = "Váš vzkaz se nepodařilo přidat"; // vzkaz se nepodarilo pridat
}
}
}
$strankovani = $_GET['s']; // Tato promenna urcuje na ktere strance se prave nechazite
$pocet = $strankovani * 10;
$prispevky = mysql_query("SELECT * FROM navstevni_kniha ORDER BY id DESC LIMIT $pocet,10"); // vybrani jen prispevku ktere se maji zobrazit
$prispevky_radky = mysql_fetch_array($prispevky);
$prispevky_pocet = mysql_num_rows(mysql_query("SELECT * FROM navstevni_kniha ORDER BY id")); // celkem pocet prispevku
?>
<h2>Návštěvní kniha</h2>
<br />
V návštěvní knize je celkem <? echo($prispevky_pocet) ?> vzkazů. <br />
<br />
<h3>Přidat vzkaz</h3> <br />
<form action="" method="post">
<table cellspacing="0" border="0">
<tr>
<td align="right">
<label for="nick"><strong>Jméno (Nick):</strong></label>
</td>
<td>
<input name="nick" type="text" id="nick" class="input" value="<? if($odeslano == "ne") {echo($_POST['nick']);}else{echo ($_COOKIE['cnick']);}?>" />
</td>
</tr>
<tr>
<td align="right">
<label for="email">E-mailová adresa:</label>
</td>
<td>
<input name="email" type="text" id="email" class="input" value="<? if($odeslano == "ne") {echo($_POST['email']);}else{echo($_COOKIE['cemail']);}?>" />
</td>
</tr>
<tr>
<td align="right">
<label for="web">WWW stránky:</label>
</td>
<td>
<input name="web" type="text" class="input" id="web" value="<? if($odeslano == "ne") {echo($_POST['web']);}else{echo ($_COOKIE['cweb']);}?>" />
(bez http://)
</td>
</tr>
<tr>
<td valign="top" align="right"><label for="vzkaz"><strong>Vzkaz:</strong></label></td>
<td><textarea name="vzkaz" id="vzkaz" class="input" cols="40" rows="6"><? if($odeslano == "ne") {echo($_POST['vzkaz']);} ?></textarea></td>
</tr>
<tr>
<td colspan="2">
<input name="zapamatovat" type="checkbox" id="zapamatovat" value="checked" checked="checked" class="tlacitko" />
<label for="zapamatovat">Zapamatovat si mě (Příště není nuné zadávat Nick, email a webovou stránku)</label>
</td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2">
<div align="center"><input name="navstevni_kniha" type="submit" class="tlacitko" id="navstevni_kniha" value="Odeslat" /></div>
</td>
</tr>
<tr>
<td colspan="2" align="right" valign="top">
<br /><small>Upozornění: Ip adresy jsou logovány. Sprosté a flame příspěvky budou mazány!
</td>
</tr>
</table>
</form>
<br />
<h3>Vzkazy</h3> <br />
<div align="center">
<? if ($strankovani != 0) {?>
<a href="?s=<? echo($strankovani - 1) ?>" title="Zobrazit novější příspěvky"><< Novější </a>
<? } ?>
<? if ($strankovani+1 < $prispevky_pocet/10) {?>
<a href="?s=<? echo($strankovani + 1) ?>" title="Zobrazit starší příspěvky">Starší >></a>
<? } ?>
</div>
<br />
<?
while ($prispevky_radky) // cyklus ktery zajistuje jednotlive zobrazovani vzkazu v knize, dle strankovani $s
{
?>
<div class="vzkaz">
<div class="vrch">
<strong>
<? if (($prispevky_radky[email] != "")&&($prispevky_radky[email] != "@")){ ?>
<a href="mailto:<? echo $prispevky_radky[email] ?>"><? } ?>
<? echo $prispevky_radky[nick] ?>
<? if (($prispevky_radky[email] != "")&&($prispevky_radky[email] != "@")){ ?></a><? } ?>
</strong>
<? if ($prispevky_radky[web] != "") { ?>[<a href="http://<? echo $prispevky_radky[web] ?>">www</a>] <? } ?>
<span class="datum"><? echo $prispevky_radky[datum] ?></span>
</div>
<div class="zprava">
<? echo $prispevky_radky[vzkaz] ?>
</div>
</div>
<div class="oddelovac"></div>
<?
$prispevky_radky = mysql_fetch_array($prispevky);
}
?>
<div align="center">
<? if ($strankovani != 0) {?>
<a href="?s=<? echo($strankovani - 1) ?>" title="Zobrazit novější příspěvky"><< Novější </a>
<? } ?>
<? if ($strankovani+1 < $prispevky_pocet/10) {?>
<a href="?s=<? echo($strankovani + 1) ?>" title="Zobrazit starší příspěvky">Starší >></a>
<? } ?>
</div>
Administrace návštěvní knihy
Administraci je ještě nutné zabezpečit proti nežádoucím uživatelům. Je více způsobů, například vložení stránky do složky admin a pomocí .htacces tam zamezit uživatelům přístup. O dobrém zabezpečení stránek si povíme příště.
admin-navstevni-kniha.php
<?
include (".connect.php");
$strankovani = $_GET['s'];
$pocet = $strankovani * 50;
$prispevky = mysql_query("SELECT * FROM navstevni_kniha ORDER BY id DESC LIMIT $pocet,50");
$prispevky_radky = mysql_fetch_array($prispevky);
$prispevky_pocet = mysql_num_rows(mysql_query("SELECT * FROM navstevni_kniha ORDER BY id"));
?>
<h3>Info</h3><br />
Smazat příspěvek můžete křířkem vedle id příspěvku, níže můžete dle vašich kriterií smazat i více příspěvků. Pozor: Všechny smazání jsou nenávratné!
<br />
<br />
V návštěvní knize je celkem <? echo($prispevky_pocet) ?> příspěvků. Příspěvky se stránkují po 50-ti příspěvcích.
<br />
<br />
<h3>Příspěvky</h3>
<br />
<?
while ($prispevky_radky)
{
?>
<div class="vzkaz">
<div class="vrch">
<strong><a href="?d=<? echo $prispevky_radky[id] ?>" title="Smazat príspevek císlo <? echo $prispevky_radky[id] ?>">[X]</a></strong>
<strong><? echo $prispevky_radky[id] ?></strong>
<strong><? echo $prispevky_radky[nick] ?></strong> - <? echo $prispevky_radky[ip] ?>
<strong><?
if (($prispevky_radky[email] != "")&&($prispevky_radky[email] != "@"))
{
echo (" - ".$prispevky_radky[email]);
}
?></strong>
<? if ($prispevky_radky[web] != "") { ?> - <a href="<? echo $prispevky_radky[web] ?>"><? echo $prispevky_radky[web] ?></a> <? } ?>
<span class="datum"><? echo $prispevky_radky[datum] ?></span>
</div>
<div class="zprava">
<? echo ($prispevky_radky[vzkaz]) ?>
</div>
</div>
<div class="oddelovac"></div>
<?
$prispevky_radky = mysql_fetch_array($prispevky);
}
?>
<div align="center">
<? if ($strankovani != 0) {?>
<a href="?s=<? echo($strankovani - 1) ?>" title="Zobrazit novější příspěvky"><< Novější </a>
<? } ?>
<? if ($strankovani+1 < $prispevky_pocet/50) {?>
<a href="?s=<? echo($strankovani + 1) ?>" title="Zobrazit starší příspěvky">Starší >></a>
<? } ?>
</div><br />
if($_GET['c'] == "admin-navstevni-kniha") {
if ($_GET['d'] != "")
{
$id = $_GET['d'];
$query = mysql_query("DELETE FROM navstevni_kniha WHERE id='$id' ");
if ($query)
{
$message = "Příspěvěk úspěšně smazán";
}
else {
$message = "Chyba příspěvek nebylo možné smazat ";
}
}
}
Nejasnosti piště do diskuze. Bohůžel kód vůbec nedodržuje odsazení, tak je místy nepřehledný. Knihu si pomocí css můžete libovolně ostylovat, ale o tom až příště.
Vojtěch Vrbka
http://www.vrbkadesign.com/
Autor: Vojtěch Vrbka