[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простая гостевая книга.
Саньчес
В общем написал код простой гостевой книги, может кому будет полезен.
Код написан основываясь на уроках "PHP5 & MySQL5 - В примерах и на проектах" авторы книги - Кристина пейтон, Андре Меллер, так что сильно не **** меня если вдруг обнаружите ошибки. :huh: у меня Гостевая книга работает 100%
Ниже представлен запрос MySQL с созданием таблиц и сам код книги.
Запрос MySQL.
CREATE TABLE IF NOT EXISTS `faqs` (
`ID` int(14) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`tema` varchar(100) DEFAULT NULL,
`mess` mediumtext,
`date` date DEFAULT NULL,
`vals` tinyint(2) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;
Код гостевой книги
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<
title>Простая гостевая книга</title>
<
style type="text/css">
.
title
{
color: #FFF;
font-size: 14px;
font-weight: bold;
font-family: Tahoma, Geneva, sans-serif;
}
.text1
{
color: #000;
font-size: 12px;
font-family: Arial, Helvetica, sans-serif;
}
.text2
{
color: #000;
font-size: 14px;
font-family: Tahoma, Geneva, sans-serif;
}
a:link
{color: #000;}
a:visited
{color: #000;}
a:hover
{color: #F90;}
a:active
{color: #F90;}
</style>
</
head>
<
body>
<
table width="673" border="0" align="center" cellpadding="0" cellspacing="0">
<
tr><td width="679" align="center" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<
tr><td align="center" valign="top"><table width="100%" border="0" cellpadding="2" cellspacing="2">
<
tr><td align="center" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<
tr><td align="center" valign="top" bgcolor="#2471B2" class="title">Сообщения.</td></tr>
<
tr><td align="center" valign="top" class="text1">
<?php
// Число записей, отображаймых на одной странице. 1* часть
$show_order=2;
if(@$_GET['next']){$start=$_GET['limit']+$show_order;}
if(@$_GET['back']){$start=$_GET['limit']-$show_order;}
if(@!$start){$start=0;}
// Чтение данных из базы mysql.
$tabelename="faqs";
$sql="SELECT * FROM $tabelename WHERE vals=1 ORDER BY date DESC LIMIT ".$start.",".$show_order;
$sqllink = mysql_connect("localhost", "login", "pass");
if(!mysql_select_db("datebase", $sqllink);){echo "Ошибка! Попробуйте ещё раз.<br/>";}
$result = mysql_query($sql, $sqllink);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$sql_info[$i]=mysql_fetch_array($result);
}
// Число записей, отображаймых на одной странице. 2* часть
$sql1="SELECT COUNT(*) FROM $tabelename WHERE vals=1 ";
$result1 = mysql_query($sql1, $sqllink);
$max=mysql_result($result1,0,0);
// Удаление указонной записи.
if(isset($_GET['val'])==1 AND ($_GET['ID']))
{
$tabelename="faqs";
$sql="DELETE FROM $tabelename WHERE ID=".$_GET['ID'];
$sqllink = mysql_connect("localhost", "login", "pass");
mysql_select_db("datebase", $sqllink);
$result = mysql_query($sql, $sqllink);
}
/*
// Можно подключить функции разрешения и запрета отображения указонной записи,
// также нужно сформировать отображение ссылок на запрет и разрешение отображения.
// Разрешение отображения указонной записи.
if(isset($_GET['val'])==2 AND ($_GET['ID']))
{
$tabelename="faqs";
$sql="UPDATE FROM $tabelename SET vals=1 WHERE ID=".$_GET['ID'];
$sqllink = mysql_connect("localhost", "login", "pass");
mysql_select_db("datebase", $sqllink);
$result = mysql_query($sql, $sqllink);
}
// Запрет отображения указонной записи.
if(isset($_GET['val'])==3 AND ($_GET['ID']))
{
$tabelename="faqs";
$sql="UPDATE FROM $tabelename SET vals=-1 WHERE ID=".$_GET['ID'];
$sqllink = mysql_connect("localhost", "login", "pass");
mysql_select_db("datebase", $sqllink);
$result = mysql_query($sql, $sqllink);
}
*/
// Отображение записей Сообщений.

for($i=0;$i<count($sql_info);$i++)
{
// Перенос строки сообщенияю
$text=nl2br($sql_info[$i]['mess']);
echo "<table width=\"660\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">
<tr><td bgcolor=
\"#CCCCCC\"><table width=\"660\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">
<tr><td bgcolor=
\"#F1EFEF\" class=\"text2\">Отправитель: ".$sql_info[$i]['name']."</td></tr>
<tr><td bgcolor=
\"#F1EFEF\" class=\"text2\">E-mail: ".$sql_info[$i]['email']."</td></tr>
<tr><td bgcolor=
\"#F1EFEF\" class=\"text2\">Тема: ".$sql_info[$i]['tema']."</td></tr></table></td></tr>
<tr><td bgcolor=
\"#CCCCCC\"><table width=\"660\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\"><tr>
<td bgcolor=
\"#F1EFEF\" class=\"text1\"><strong>Сообщение : ".$sql_info[$i]['date']."</strong><hr/>".$text."<br/><br/></td></tr></table></td></tr>
<tr><td class=
\"text2\"><a href=\"".$_SERVER['PHP_SELF']."?ID=".$sql_info[$i]['ID']."&val=1\">Удалить</a></td>";
}
// Таблицы с сылками для листания "Вперёд" - "Назад".
echo "<table width=\"400\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">
<tr><td align=
\"center\" valign=\"top\"><table width=\"400\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\">
<tr><td align=
\"center\" valign=\"top\">";
if($start>=$show_order)
{ echo "<a href=\"".$PHP_SELF."?limit=".$start."&back=1 \"><- Назад</a>"; }
echo "</td><td align=\"center\" valign=\"top\">";
if($start+$show_order<$max)
{ echo "<a href=\"".$PHP_SELF."?limit=".$start."&next=1 \">Вперёд -></a>"; }
echo "</td></tr></table></td></tr></table>";
?>
</td></tr>
</
table></td></tr>
<
tr><td align="center" valign="top" bgcolor="#2471B2" class="title">Ваш коментарий.</td></tr>
<
tr><td align="center" valign="top"><table width="100%" border="0" cellspacing="2" cellpadding="2">
<
tr><td width="50%" align="left" valign="top" bgcolor="#CCCCCC" class="text1"><table width="100%" border="0" cellspacing="2" cellpadding="2">
<
tr><td align="left" valign="top" bgcolor="#F1EFEF">
<?php
// Обработка форм ввода данных и сохранение их в базу данных.
if (isset($_POST['faqsform']) == 1)
{
// Удаление ведущих и замыкающих пробелов.
$_POST['name']=trim($_POST['name']);
$_POST['email']=trim($_POST['email']);
$_POST['tema']=trim($_POST['tema']);
$_POST['mess']=trim($_POST['mess']);
// Удаление HTML-кода если он встречается.
$_POST['name']=strip_tags($_POST['name']);
$_POST['email']=strip_tags($_POST['email']);
$_POST['tema']=strip_tags($_POST['tema']);
$_POST['mess']=strip_tags($_POST['mess']);
// Проверка заполнения всех полей.
if (!$_POST['name']) {$error_set="<br/>Введите ваше имя!";}
if (!$_POST['email']) {$error_set.="<br/>Укажите ваш E-mail!";}
if (!$_POST['tema']) {$error_set.="<br/>Введите тему вашего сообщения!";}
if (!$_POST['mess']) {$error_set.="<br/>Оставте сообщение!";}
// При наличии ошибок выдаётся соответствующее сообщение и переменная $_POST['faqsform'] сбрасываеться чтобы показать содержимое формуляра.
if (@$error_set)
{
$messages="<font color=red>".$error_set."</font>";
unset($_POST['faqsform']);
}
// При отсутствии ошибок данные сохраняються в бвзе данных.
else
{
// Формирование sql строки.
$tabelename="faqs";
$sql="INSERT INTO $tabelename (name, email, tema, mess, date) values ('".$_POST['name']."', '".$_POST['email']."', '".$_POST['tema']."', '".$_POST['mess']."', now())";
// Подключение к базе данных.
$sqllink = mysql_connect("localhost", "login", "pass");
mysql_select_db("datebase", $sqllink);
mysql_query($sql, $sqllink);
$messages="<h3>".$_POST['name']."</h3><font color=red>Ваш запрос отправлен!</font><br/><a href=\"".$_SERVER['PHP_SELF']."\">Отобразить формуляр</a>";
}
// Выдача сообщения.
echo $messages;
}
if (@!$_POST['faqsform'])
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<
input type="hidden" name="faqsform" value="1" />
<
table width="100%" border="0" cellspacing="1" cellpadding="1">
<
tr><td align="left" valign="top" class="text1">Имя:</td></tr>
<
tr><td align="left" valign="top"><label>
<
input name="name" title="Введите ваше имя." type="text" class="menu1" value="<?php echo @$_POST['name']; ?>" size="53" maxlength="53" />
</
label></td></tr>
<
tr><td align="left" valign="top" class="text1"> E-mail:</td></tr>
<
tr><td align="left" valign="top"><label>
<
input name="email" title="Введите ваш E-mail." type="text" class="menu1" value="<?php echo @$_POST['email']; ?>" size="53" maxlength="53" />
</
label></td></tr>
<
tr><td align="left" valign="top" class="text1">Тема сообщения:</td></tr>
<
tr><td align="left" valign="top" class="text1"><label>
<
input name="tema" title="Введите тему вашего сообщения." type="text" class="menu1" value="<?php echo @$_POST['tema']; ?>" size="53" maxlength="100" />
</
label></td></tr><tr>
<
td align="left" valign="top" class="text1">Ваше сообщение:</td></tr>
<
tr><td align="left" valign="top"><label>
<
textarea name="mess" title="Введите ваше сообщение." cols="50" rows="8" class="menu1"><?php echo @$_POST['mess']; ?></textarea>
</
label></td></tr>
<
tr><td align="left" valign="top"><label>
<
input name="Send" title="Отправить ваше сообщение." type="submit" class="menu1" value="Отправить" />
</
label></td></tr></table>
</
form>
<?php } ?>
</td></tr></table></td>
<
td width="50%" align="right" valign="top" bgcolor="#CCCCCC"><table width="100%" border="0" cellspacing="2" cellpadding="2">
<
tr><td bgcolor="#F1EFEF"><table width="100%" border="0" cellspacing="1" cellpadding="1">
<
tr><td align="center" valign="top" class="text2">Условия отправки сообщения .<hr/></td></tr>
<
tr><td align="left" valign="top" class="text1"> 1. Все поля формуляра должны быть заполнены.<br/><br/>2. Использование HTML тегов не поддерживается.</td></tr>
</
table></td>
</
tr></table></td>
</
tr></table></td>
</
tr></table></td>
</
tr></table></td>
</
tr></table>
</
body>
</
html>
Не забываем поменять на свой пароль и логин для подключения к базе данных, а также название базы данных :
$sqllink = mysql_connect("localhost", "login", "pass");
mysql_select_db("datebase", $sqllink);




Спустя 32 минуты, 35 секунд (12.02.2012 - 03:41) Rand написал(а):
Скрипт не безопасен. SQL-injection.

Спустя 19 минут, 59 секунд (12.02.2012 - 04:01) veolancer написал(а):
Цитата
datebase

По логике database

ps: неудержался smile.gif

Спустя 9 часов, 1 минута, 13 секунд (12.02.2012 - 13:02) inpost написал(а):
XSS инъекция так же присутствует.
Стилей оформления кода - нет.
Логика приложения должна быть в начале, а вывод данных в конце.
Нет очистки POST данных.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.