Пятница, 26.04.2024, 03:49
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Delphi [12]
С++ [0]
С# [1]
PHP [7]
Мини-чат
Наш опрос
Оцените мой сайт
Всего ответов: 23
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2012 » Январь » 9 » Гостевая книга на PHP. Часть 1
19:46
Гостевая книга на PHP. Часть 1
Шаг 1. SQL
Для работы нашего приложения требуется создать таблицу:
Code
CREATE TABLE IF NOT EXISTS `s178_guestbook` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) default '',
  `email` varchar(255) default '',
  `description` varchar(255) default '',
  `when` int(11) NOT NULL default '0',
  `ip` varchar(20) default NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Шаг 2. PHP

Основной файл будет содержать следующий код:
guestbook.php 

Code
// Отключаем возможные предупреждения
if (version_compare(phpversion(), "5.3.0", ">=") == 1)
  error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
else
  error_reporting(E_ALL & ~E_NOTICE);  

require_once('classes/CMySQL.php'); // including service class to work with database

// Получаем IP посетителя
function getVisitorIP() {
  $ip = "0.0.0.0";
  if( ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) && ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) {
  $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } elseif( ( isset( $_SERVER['HTTP_CLIENT_IP'])) && (!empty($_SERVER['HTTP_CLIENT_IP'] ) ) ) {
  $ip = explode(".",$_SERVER['HTTP_CLIENT_IP']);
  $ip = $ip[3].".".$ip[2].".".$ip[1].".".$ip[0];
  } elseif((!isset( $_SERVER['HTTP_X_FORWARDED_FOR'])) || (empty($_SERVER['HTTP_X_FORWARDED_FOR']))) {
  if ((!isset( $_SERVER['HTTP_CLIENT_IP'])) && (empty($_SERVER['HTTP_CLIENT_IP']))) {
  $ip = $_SERVER['REMOTE_ADDR'];
  }
  }
  return $ip;
}

// Получаем последние записи в гостевой книге
function getLastRecords($iLimit = 3) {
  $sRecords = '';
  $aRecords = $GLOBALS['MySQL']->getAll("SELECT * FROM `s178_guestbook` ORDER BY `id` DESC LIMIT {$iLimit}");
  foreach ($aRecords as $i => $aInfo) {
  $sWhen = date('F j, Y H:i', $aInfo['when']);
  $sRecords .= <<

  

Автор {$aInfo['name']} ({$sWhen}):


  

{$aInfo['description']}



EOF;
  }
  return $sRecords;
}

if ($_POST) { // Принимаем новые записи

  $sIp = getVisitorIP();
  $sName = $GLOBALS['MySQL']->escape(strip_tags($_POST['name']));
  $sEmail = $GLOBALS['MySQL']->escape(strip_tags($_POST['name']));
  $sDesc = $GLOBALS['MySQL']->escape(strip_tags($_POST['text']));

  if ($sName && $sEmail && $sDesc && $sIp) {

  // Защита от спами
  $iOldId = $GLOBALS['MySQL']->getOne("SELECT `id` FROM `s178_guestbook` WHERE `ip` = '{$sIp}' AND `when` >= UNIX_TIMESTAMP() - 600 LIMIT 1");
  if (! $iOldId) {

  // Можно добавлять комментарий
  $GLOBALS['MySQL']->res("INSERT INTO `s178_guestbook` SET `name` = '{$sName}', `email` = '{$sEmail}', `description` = '{$sDesc}', `when` = UNIX_TIMESTAMP(), `ip` = '{$sIp}'");

  // Выводим последние 10 записей
  $sOut = getLastRecords();
  echo $sOut;
  exit;
  }
  }
  echo 1;
  exit;
}

// Выводим последние 10 записей
$sRecords = getLastRecords();

ob_start();
?>
<div class="container" id="records">
  <div id="col1">
  <h2>Гостевая книга</h2>
  <div id="records_list"></div>
  </div>

  <div id="col2">
  <h2>Добавьте ваш отзыв здесь</h2>
  <script type="text/javascript">
  function submitComment(e) {
  var name = $('#name').val();
  var email = $('#email').val();
  var text = $('#text').val();

  if (name && email && text) {
  $.post('guestbook.php', { 'name': name, 'email': email, 'text': text },  
  function(data){  
  if (data != '1') {
  $('#records_list').fadeOut(1000, function () {  
  $(this).html(data);
  $(this).fadeIn(1000);  
  });  
  } else {
  $('#warning2').fadeIn(2000, function () {  
  $(this).fadeOut(2000);  
  });  
  }
  }
  );
  } else {
  $('#warning1').fadeIn(2000, function () {  
  $(this).fadeOut(2000);  
  });  
  }
  };
  </script>

  <form onsubmit="submitComment(this); return false;">
  <table>
  <tr><td class="label"><label>Ваше имя: </label></td><td class="field"><input type="text" value="" title="Введите ваше имя" id="name" /></td></tr>
  <tr><td class="label"><label>Ваш email: </label></td><td class="field"><input type="text" value="" title="Введите ваш адрес email" id="email" /></td></tr>
  <tr><td class="label"><label>Отзыв: </label></td><td class="field"><textarea name="text" id="text" maxlength="255"></textarea></td></tr>
  <tr><td class="label"> </td><td class="field">
  <div id="warning1" style="display:none">Заполните все обязательные поля</div>
  <div id="warning2" style="display:none">Вы не можете размещать более одного отзыва в течении 10 минут (защита от спама)</div>
  <input type="submit" value="Отправить" />
  </td></tr>
  </table>
  </form>
  </div>
</div>
$sGuestbookBlock = ob_get_clean();

?>
<!DOCTYPE html>
<html lang="ru" >
  <head>
  <meta charset="utf-8" />
  <title>Гостевая книга на PHP | Материалы сайта RUSELLER.COM</title>

  <link href="css/main.css" rel="stylesheet" type="text/css" />
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
  </head>
  <body>
  
  <footer>
  <h2>Гостевая книга на PHP</h2>
  <a href="http://www.ruseller.com" class="stuts" target="_blank">Материалы сайта <span>RUSELLER.COM</span></a>
  </footer>
  </body>
</html>


При открытии страницы вы увидите записную книжку. На левой стороне выводится последние три записи, а справа - форма для размещения нового отзыва. Когда отправляется форма, скрипт посылает данные POST (той же PHP странице), затем сохраняет полученные данные в базе и возвращает три последние записи. С использованием эффекта проявления записи выводятся на левой стороне книги.

Также используется файл PHP

classes/CMySQL.php

Данный файл содержит код класса для работы с базой данных. В нем требуется настроить три переменных для подключения к серверу.

Code
$this->sDbName = 'ИМЯ_БАЗЫ_ДАННЫХ';
$this->sDbUser = 'ИМЯ ПОЛЬЗОВАТЕЛЯ';
$this->sDbPass = 'ПАРОЛЬ'; 
Категория: PHP | Просмотров: 2743 | Добавил: vavilov8 | Теги: css, PHP, MySQL, Гостевая книга | Рейтинг: 0.0/0
Всего комментариев: 1
1 Joan  
0
That's an astute answer to a tricky quositen

Имя *:
Email *:
Код *: