|
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме: 956872
Репутация:
186
|
|
Гостевая книга
http://develop.clubweb.ru/guestbook/guestbook_index.php
guestbook_index.php:
PHP код:
<!--Таблица cтилей-->
<link rel = "stylesheet" type = "text/css" href = "style.css" />
<?php
//Максимальное количество новостей на страницу
$maxNews = 5;
include('guestbook_config.php');
session_start();
//Если отправлены данные из формы...
if(isset($_POST['nameUser']) && isset($_POST['mailUser']) && isset($_POST['bodyUser']) && isset($_POST['captcaUser'])) {
//Проверка отправленных данных
foreach($badNames as $badName) {
$testNameUser = preg_match('/^[^ ^($badName)].{1,12}$/', $_POST['nameUser']);
if($testNameUser === TRUE) $filNameUser = $_POST['nameUser'];
}
$filMailUser = preg_match('/^[a-z0-9\-_\.]{1,15}@[a-z0-9\-_\.]{1,15}$/i', $_POST['mailUser']);
$filBodyUser = preg_match('/^.{1,5000}$/', $_POST['bodyUser']);
//Если принятые из формы данные прошли проверку, то записываем их в базу...
if($filNameUser == TRUE && $filMailUser == TRUE && $filBodyUser == TRUE && $_SESSION['captcha'] == $_POST['captcaUser'] /* && $badNames */) {
//Чтение базы и сортировка её данных по массивам через цикл
$fileBase = file('base.txt');
foreach($fileBase as $fileBase2) {
list($id[], $name[], $mail[], $body[]) = split('\|&\|', $fileBase2);
}
//К последней записи id добавляем 1 для записи нового id
$id = array_pop($id);
$id++;
//$bodyUser = $_POST['bodyUser'];
//$bodyUser = str_replace("\r\n", '<br />', $bodyUser);
$_POST['bodyUser'] = wordwrap(str_replace("\r\n", '<br>', htmlspecialchars($_POST['bodyUser'])), 60, '<br>', 1);
$_POST['bodyUser'] = preg_replace('#(https?://[^ ]+)#i','<a href="\\1">\\1</a>',$_POST['bodyUser']);
//Отерытие файла на добавление записи
$fp = fopen('base.txt', 'a');
//Запись данных в файл
//fputs($fp, $id.'|&|'.htmlspecialchars($_POST['nameUser']).'|&|'.htmlspecialchars($_POST['mailUser']).'|&|'.htmlspecialchars($bodyUser)."\r\n");
fputs($fp, $id.'|&|'.htmlspecialchars($_POST['nameUser']).'|&|'.htmlspecialchars($_POST['mailUser']).'|&|'.$_POST['bodyUser']."\r\n");
fclose($fp);
$_SESSION['captcha'] = '';
echo <<<HERE
<table width = "500px" border = "0" align = "center" id = "mainTable">
<tr>
<td>
<center>Комментарий успешно добавлен</center>
</td>
</table>
HERE;
//Если данные не верны...
} else {
echo <<<HERE
<table width = "500px" border = "0" align = "center" id = "mainTable2">
<tr>
<td>
<center>Не верные данные</center>
</td>
</tr>
HERE;
echo '';
if($filNameUser == FALSE) echo '<tr><td><span id = "mainTable2_2">- Не верное имя.</span><br />
<span id = "mainTable2_21">Имя может содержать только буквы русского и английского алфавита.</span></td></tr>';
if($filMailUser == FALSE) echo '<tr><td><span id = "mainTable2_2">- Не верный e-mail адрес.</span><br />
<span id = "mainTable2_21">E-mail адрес может содержать только буквы английского алфавита, цифры и символы "-_.@".</span></td></tr>';
if($filBodyUser == FALSE) echo '<tr><td><span id = "mainTable2_2">- Не верный текст комментария.</span><br />
<span id = "mainTable2_21">Текст должен быть не длиннее 5 тысяч символов.</span></td></tr>';
if($_SESSION['captcha'] !== $_POST['captcaUser']) echo '<tr><td><span id = "mainTable2_2">- Не верно введён текст с проверочного изображения.</span><br />
<span id = "mainTable2_21">Если Вам не понятен текст, изображённый на проверочном изображении, просто обновите страницу.</span></td></tr>';
echo '</table>';
}
} else {
//Чтение базы и сортировка её данных по массивам через цикл
$fileBase = file('base.txt');
foreach($fileBase as $fileBase2) {
list($id[], $name[], $mail[], $body[]) = split('\|&\|', $fileBase2);
}
echo <<<HERE
<table width = "100%" height = "100%" border = "0" cellspacing = "0"><tr><td valign = "top">
<table width = "500px" border = "0" align = "center" id = "mainTable">
HERE;
//Если в данных сессии содержатся верные логин администратора и пароль
if(isset($_SESSION['loginName']) && isset($_SESSION['loginPass'])) {
if($_SESSION['loginName'] == $admin['name'] && $_SESSION['loginPass'] == $admin['pass']) {
echo <<<HERE
<tr>
<td valign = "top" height = "1px" id = "tdNew">
<span id = "adminLink"><a href = "guestbook_admin.php">Адмынко</a></span>
</td>
</tr>
HERE;
}
}
//Если передан номер страницы ($_GET['page'])...
if(empty($_GET['page'])) $_GET['page'] = 1;
if(isset($_GET['page']) && is_array($_GET['page']) === FALSE) {
//$huy = $maxNews * $_GET['page'];
//Проверка каждой новости на существование и вывод существующих на экран
//Если в guestbook_config.php, в переменной $commentsOrder выбрано значение "1" (От меньшего к большему)...
if($commentsOrder === 1) {
for($i = $maxNews * $_GET['page'] - $maxNews; $i < $maxNews * $_GET['page']; $i++) {
//$countId = count($id) - 1; for($i = $countId - $maxNews * $_GET['page'] + $maxNews; $i > $countId - $maxNews * $_GET['page']; $i--) {
if(isset($id[$i]) && isset($name[$i]) && isset($mail[$i]) && isset($body[$i])) {
echo <<<HERE
<tr>
<td valign = "top" height = "1px" id = "tdNew">
<span id = "titleComment"><b>$id[$i]</b>, От: <a href = "mailto:$mail[$i]?subject=GuestBookClubWeb">$name[$i]</a><br /></span>
$body[$i]
</td>
</tr>
HERE;
}
}
}
//Если в guestbook_config.php, в переменной $commentsOrder выбрано значение "2" (От большего к меньшему)...
if($commentsOrder === 2) {
$countId = count($id) - 1;
for($i = $countId - $maxNews * $_GET['page'] + $maxNews; $i > $countId - $maxNews * $_GET['page']; $i--) {
if(isset($id[$i]) && isset($name[$i]) && isset($mail[$i]) && isset($body[$i])) {
echo <<<HERE
<tr>
<td valign = "top" height = "1px" id = "tdNew">
<span id = "titleComment"><b>$id[$i]</b>, От: <a href = "mailto:$mail[$i]?subject=GuestBookClubWeb">$name[$i]</a><br /></span>
$body[$i]
</td>
</tr>
HERE;
}
}
}
}
//Вывести список (количество по отношению к новостям) страниц
echo <<<HERE
<tr>
<td valign = "top" id = "pageString" height = "1px">
<center>
HERE;
for($i = 1; $i <= ceil(count($name)/$maxNews); $i++) {
if($_GET['page'] == $i) echo '<font color = "gray">'."$i".'</font> ';
else echo "<a href = \"?page=$i\">$i </a>";
}
//Поле для добавления комментария
echo <<<HERE
</center>
</td>
</tr>
<tr>
<td height = "1px">
<table width = "100%" border = "0">
<form method = "POST">
<tr>
<td width = "1px" id = "secondTable">
Ваше Имя:
</td>
<td width = "100%">
<input type = "text" name = "nameUser" style = "width: 100%;">
</td>
</tr>
<tr>
<td id = "secondTable">
Ваш Mail:
</td>
<td>
<input type = "text" name = "mailUser" style = "width: 100%;">
</td>
</tr>
<tr>
<td colspan = "2">
<textarea style = "width: 100%; height: 100px;" name = "bodyUser"></textarea>
</td>
</tr>
<tr>
<td colspan = "2">
<img src = "img.php"><input type = "text" name = "captcaUser">
</td>
</tr>
<tr>
<td colspan = "2" align = "right" height = "1px">
<input type = "submit" value = "Отправить">
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</td></tr><tr><td height = "1px" valign = "top" align = "right">
<span id = "cop"><a href = "http://develop.clubweb.ru">GuestBookClubWeb 1.1</a></span>
</td></tr></table>
HERE;
//var_dump($_SESSION['captcha']);
}
?>
guestbook_admin.php:
PHP код:
<?php
include('guestbook_config.php');
$maxStrings = 15;
session_start();
if(isset($_POST['loginName']) && isset($_POST['loginPass'])) {
$_SESSION['loginName'] = $_POST['loginName'];
$_SESSION['loginPass'] = $_POST['loginPass'];
}
if(isset($_POST['exit'])) {unset($_SESSION); session_destroy();}
if(isset($_SESSION['loginName']) && isset($_SESSION['loginPass'])) {
if($_SESSION['loginName'] == $admin['name'] && $_SESSION['loginPass'] == $admin['pass']) {
echo <<<HERE
<form method = "POST">
<input type = "submit" name = "exit" value = "Выход"> <a href = "guestbook_index.php">Гостевая книга</a>
</form>
<a href = "guestbook_admin.php?list">Список новостей</a> -
<a href = "guestbook_admin.php?settings">Настройки системы</a>
<hr>
HERE;
if(isset($_GET['list'])) {
echo <<<HERE
<table width = "100%" border = "1">
<tr>
<td align = "center" width = "1px">
<b>ИД</b>
</td>
<td align = "center" width = "1px">
<b>Имя</b>
</td>
<td align = "center" width = "1px">
<b>E-mail</b>
</td>
<td align = "center">
<b>Текст</b>
</td>
<td align = "center" width = "1px">
<b>Дата</b>
</td>
<td align = "center" width = "1px">
<b>Действия</b>
</td>
</tr>
HERE;
$fileBase = file('base.txt');
foreach($fileBase as $fileBase2) {
list($id[], $name[], $mail[], $body[]) = split('\|&\|', $fileBase2);
}
$huy = $maxStrings * $_GET['page'];
for($i = $huy - $maxStrings; $i < $huy; $i++) {
if(isset($id[$i]) && isset($name[$i]) && isset($mail[$i]) && isset($body[$i])) {
echo <<<HERE
<tr>
<td>
$id[$i]
</td>
<td>
$name[$i]
</td>
<td>
$mail[$i]
</td>
<td>
$body[$i]
</td>
<td>
дата
</td>
<td>
<a href = "?edit=$i">Редактировать</a> - <a href = "?delete=$i">Удалить</a>
</td>
</tr>
HERE;
}}
echo '<tr><td colspan = "6" align = "center">';
for($i = 1; $i <= ceil(count($name)/$maxStrings); $i++) {
if(!isset($_GET['page'])) $_GET['page'] = 1;
if($_GET['page'] == $i) echo '<font color = "gray">['."$i".']</font> ';
else echo "<a href = \"?list&page=$i\">[$i] </a>";
}
echo '</td></tr></table>';
}
} else echo 'Все бомжи';
} else {
echo <<<HERE
<table height = "100%" width = "100%" border = "0">
<tr>
<td align = "center">
<form method = "POST">
<input type = "text" name = "loginName"><br>
<input type = "password" name = "loginPass"><br>
<input type = "submit" value = "Вход">
</form>
</td>
</tr>
</table>
HERE;
}
if(isset($_GET['settings'])) {
if(isset($_POST['order'])) {
$fgcConf = file_get_contents('guestbook_config.php');
$fpConf = fopen('guestbook_config.php', 'w');
$fgcConf = preg_replace('|\$commentsOrder = [1,2];|', '$commentsOrder = '."{$_POST['order']}".';', $fgcConf);
fputs($fpConf, $fgcConf);
fclose($fpConf);
echo 'Настройки успешно изменены';
} else {
echo <<<HERE
<table border = "1" width = "100%">
<form method = "POST">
<tr>
<td>
Показ новостей:
</td>
<td width = "100%">
<input type = "radio" name = "order" value = "1">От меньшего к большему
<input type = "radio" name = "order" value = "2">От большего к меньшему
</td>
</tr>
<tr>
<td colspan = "2" align = "right">
<input type = "submit" value = "Сконфигурировать">
</td>
</tr>
</form>
</table>
HERE;
}
}
?>
guestbook_config.php:
PHP код:
<?php
$admin['name'] = 'login';
$admin['pass'] = 'pass';
$commentsOrder = 2;
$badNames = array(
'Admin',
'Administrator',
'Админ',
'Администратор',
'Аdmin',
'Аdministrator',
'Аdministrаtor',
'Аdministratоr'
);
?>
img.php:
PHP код:
<?php
session_start();
$image = imageCreate(100, 30);
imageColorAllocate($image, 255, 255, 255);
for($i = 0; $i < 10; $i++) $color[] = imageColorAllocate($image, mt_rand(0,240), mt_rand(0,240), mt_rand(0,240));
$abc = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','1','2','3','4','5','6','7','8','9');
$rand = array();
$fullRand = '';
for($i = 0; $i < 6; $i++) $rand[] = $abc[mt_rand(0,22)];
foreach($rand as $randOne) $fullRand .= $randOne;
$_SESSION['captcha'] = $fullRand;
for($i = 0; $i < 6; $i++) imageTtfText($image,mt_rand(12,15),mt_rand(-20,20),15 * $i + mt_rand(4,8),mt_rand(20,25),$color[$i],'arial.ttf',$rand[$i]);
for($i = 0; $i < 3; $i++) imageArc($image, mt_rand(0,90), mt_rand(0,20), mt_rand(10,60), mt_rand(10,60), mt_rand(-380,0), mt_rand(0,380), $color[$i]);
header('Content-type: image/png');
imagePng($image);
?>
style.css:
Код HTML:
body {
font-family: tahoma;
margin: 0px;
}
#mainTable {
background-color: #dbeaff;
}
#mainTable2 {
background-color: #dbeaff;
color: red;
}
#mainTable2_2 {
background-color: #dbeaff;
font-size: 12px;
color: #c50000;
}
#mainTable2_21 {
background-color: #dbeaff;
font-size: 10px;
color: #797979;
}
#secondTable {
background-color: #f6faff;
font-size: 14px;
color: #426ba4;
}
#tdNew {
border-bottom: 1px solid #f6faff;
font-size: 14px;
}
#tdNew a:link {
color: #0074bd;
}
#tdNew a:visited {
color: #0074bd;
}
#tdNew a:hover {
color: #24aaff;
}
#pageString a {
color: #70acff;
text-decoration: none;
}
#adminLink a {
color: #70acff;
text-decoration: none;
}
#cop {
font-size: 10px;
}
#cop a:link {
color: #77caff;
}
#cop a:visited {
color: #77caff;
}
#cop a:hover {
color: #24aaff;
}
#titleComment {
color: gray;
}
base.txt (Заполняется скриптом):
Код:
1|&|макииа|&|cevr@erbvrb.ru|&|vwrrbrbrg erhk gerh guiwer gui3rhgui er
2|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
3|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
4|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
5|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
6|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
7|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
8|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
9|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
10|&|btr|&|trtntntn@iehf.com|&|rbetntnt4nt4 t4 n tr4n t4
+ кладём arial.ttf
Писал чисто для самообучения так сказать
Админка недописана, если кто-то хочет - пишите))
|