Vytvoření Návštěvní knihy

Napsal O webu (») 29. 5. 2006 v kategorii PHP/HTML, přečteno: 5055×

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("<" , "&lt" , $_POST[nick]); // ochrana proti html tagům a javascriptu

$vzkaz = str_replace("<" , "&lt;" , $_POST[vzkaz]);

$web = str_replace("<" , "&lt;" , $_POST[web]);

$email = str_replace("<" , "&lt" , $_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
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
cxcxcxc z IP 90.176.30.*** | 22.8.2012 19:08
dsdsdsdsdsdsdsdsd


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel tři a dvě