Задача №.1: Гостевая Книга

Статус
Закрыто для дальнейших ответов.

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Название: Гостевая книга

Задача: написать полноценную гостевую книгу.

Техническое Описание: Гостевая книга по структуре должна состоять из хранилища данных (сессии, MySQL, plain.txt и т.д.)
должен иметь страницу с управлением этой книги.
(Необязательно) Поддержка небольшого количества HTML кода, или собственный вид BBCod'a, подсветка синтаксиса.
[hr]
Код, прикрепляем код с архивом и вставляем отдельные файлы в [ code ] тэг.

Берусь за дело!
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Это че такое и в чем прикол?
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Это че такое и в чем прикол?
Это задачка по Программированию.
Это не прикол, это так сказать развлечение, кто хочет тот пишет, для новичков очень полезно.

Я сам её сейсас сам решаю
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Мне казалось ты далеко не новичок.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Я не новичок, просто Тигра...
Короче вот как было: я спросил у тигры как идея, он сказал "не плохо, но с реализацией будет сложно, так что начни сам, оценщики появятся да и кодеры начнут", ну ты сам теперь наверное понял что я имел ввиду.
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Нет, не понял. А чем не устраивают готовые?
Я как всегда спамлю скриптами с сайта, с которых я учился, если можно так сказать - wrscript.ru. Мне нравиться их код и легки в понимание. Условиям задачи скрипт гостевой с выше озвученного сайта вроде подходит :D
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Для чего я написал задачки?)

Тут то на развитие алгоритмного составления, создания структуры, а готовые скрипты ничего не развивабт.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Ну вот, все! Иду спать, админку завтра сделаю!

config.php
Код:
<?
require_once("db.class.php");
require_once("objects.php");

iconv_set_encoding("input_encoding","UTF-8");
iconv_set_encoding("output_encoding","UTF-8");
iconv_set_encoding("internal_encoding","UTF-8");

$db = DB::getDB();

$db->init("localhost","root","");

$db->connect();
$db->selectDB("book");
?>
index.php
Код:
<?
require("config.php");

$db->query("SELECT * FROM messages","messages");
$db->query("SELECT * FROM page WHERE id = 1","page");

$query = $db->getQuery("page");
$page = new Page();
$page->createFromAssoc($query->getArray(MYSQL_ASSOC));

$query = $db->getQuery("messages");
$array = $query->getArray(MYSQL_ASSOC);

$messages; $i;

do {
  $messages[$i] = new Message();
  $messages[$i]->createMessageFromAssoc($array);
  $i++;
} while ($array = $query->getArray(MYSQL_ASSOC));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	  <link href="style.css" type="text/css" rel="stylesheet" />
    <title><? echo $page->title; ?></title>
</head>
<body>
  <div id="wrapper">
   <div id="head">
    <? echo $page->title; ?>
   </div>
  
   <div id="body">
    <div id="text">
	 <? echo $page->text; ?>
    </div>
    <div id="messageBody">
	 <?
	  if ($query->getNumRows() == 0) {
	   print("<div id=\"nullMessage\">Нет ни одной записи.</div>");
	  }
	  else {
	   foreach($messages as $key => $value) {
	    printf("<div class=\"message\">
		   <table class=\"messageTable\">
		    <tr>
			 <td class=\"double\">%s</td>
			 <td class=\"double\">%s</td>
		    </tr>
		    <tr>
			 <td colspan=\"2\">%s</td>
		    </tr>
		   </table>
		  </div>"
		 ,$value->author,$value->date,$value->text);
	   }
	  }
	 ?>
    </div>
    <div id="form">
	 <form action="sendMessage.php" method="POST">
	  <table id="formTable">
	   <tr>
	    <td class="double"><label for="author">Имя: </label></td>
	    <td class="double"><input type="text" id="author" name="author" value="" /></td>
	   </tr>
	   <tr>
	    <td class="double"><label for="email">Е-Mail: </label></td>
	    <td class="double"><input type="text" id="email" name="email" value="" /></td>
	   </tr>
	   <tr>
	    <td class="double"><label for="text">Сообщение: </label></td>
	    <td class="double"><textarea name="text" id="text"></textarea></td>
	   </tr>
	   <tr>
	    <td colspan="2">
		 <div id="submit">
		  <input type="submit" name="sub" value="Отправить!" />
		 </div>
	    </td>
	   </tr>
	  </table>
	 </form>
    </div>
   </div>
  
   <div id="footer">
    <? echo $page->footer; ?>
   </div>
  </div>
</body>
</html>
style.css
Код:
body {
margin: 0px;
padding: 0px;
background-color: #000;
font-family: Arial;
}
table {
width:100%;
}
body input:focus {
outline:none;
}
div#wrapper {
background-color: #333;
color: #fff;
width: 720px;
margin: 10px auto;
border: 2px solid #fff;
border-radius: 10px;
}
div#head {
text-align: center;
font-size: 20px;
background: #222;
border-radius: 8px;
padding:10px;
border: 2px solid #555;
}
div#head:hover {
border: 2px solid #700;
}
div#body {
padding: 0px 10px 10px 10px;
}
div#text {
padding:5px;
border: 1px solid #fff;
border-radius: 5px;
margin: 5px 0px;
background: #222;
}
div.message {
padding:5px 5px;
background: #333;
text-align: left;
margin: 10px 0px;
border-radius: 5px;
border: 1px solid #444;
}
div#messageBody {
padding:10px;
background: #222;
text-align: center;
margin: 10px 0px;
border-radius: 5px;
border: 1px solid #888;
}
table.messageTable td.double {
text-align: center;
}
table.messageTable td {
background: #222;
padding:10px 10px;
border-radius:5px;
border:1px solid #fff;
margin:10px;
}
table.messageTable {

}
div#form {
padding: 2px;
background: #444;
padding: 0px 10px;
border-radius: 5px;
border: 1px solid #888;
}
table#formTable {
width:100%;
}
table#formTable tr td {
text-align:right;
}
table#formTable input[type=text] {
float:left;
width: 200px;
padding: 3px;
background:#888;
border: 1px solid #fff;
border-radius: 5px;
color: #fff;
}
table#formTable input[type=text]:focus {
outline:none;
box-shadow: 0px 0px 10px #000;
}
table#formTable input[type=submit] {
border-radius: 5px;
border: 1px solid #aaa;
background: #111;
color:#fff;
box-shadow: 0px 0px 10px #555;
}
table#formTable input[type=submit]:hover {
background: #222;
color: #0f0;
border: 1px solid #555;
box-shadow: 0px 0px 10px #000;
}
table#formTable textarea {
float:left;
width: 202px;
height: 100px;
padding: 3px;

color: #fff;
background:#888;
border: 1px solid #fff;
border-radius: 5px;

max-height: 100px;
max-width: 202px;
}
table#formTable textarea:focus {
outline:none;
box-shadow: 0px 0px 10px #000;
}
table tr td.double {
width: 48%;
padding: 1%;
}
div#submit {
margin:10px auto;
width:10%;
}
div#footer {
text-align: center;
font-size:13px;
background: #222;
border-radius: 10px;
padding:8px;
border: 2px solid #555;
}
div#footer:hover {
border: 2px solid #700;
}
db.class.php
Код:
<?
class Query {
  protected $db;

  protected $plainSQL;
  protected $query;
 
  protected $fetchedArray;
  protected $numRows;
 
  function __construct($query) {
   $this->db = DB::getDB();
  
   $this->plainSQL = $query;
   // print $this->plainSQL;
   $this->query = mysql_query($query);
  
   if (is_int(stripos($this->plainSQL,"select"))) {
    $this->numRows = mysql_num_rows($this->query);
   }
  }
 
  function getNumRows() {
   return $this->numRows;
  }
 
  function changeQuery($query) {
   $this->plainSQL = $query;
   $this->query = mysql_query($query);
  
   if (stripos($this->plainSQL,"select") === true) {
    $this->numRows = mysql_num_rows($this->query);
   }
  }
 
  function getArray($key = MYSQL_BOTH){
   $this->fetchedArray = mysql_fetch_array($this->query,$key);
  
   return $this->fetchedArray;
  }
}
class DB {
  private $mysql;
  private $query;
 
  private $queries;
  private $currentDB;
 
  private $host;
  private $dbnames;
  private $username;
  private $password;
 
  protected static $instance;
 
  private function __construct() {}
  private function __clone() {}
  private function __wakeup() {}
 
  static function getDB() {
   if (self::$instance == NULL) {
    self::$instance = new DB();
   }
   return self::$instance;
  }
 
  function init($host, $username, $password) {
   $this->host = $host;
   $this->username = $username;
   $this->password = $password;
  }
 
  function getMYSQL() {
   return $this->mysql;
  }
 
  private function setCharset() {
   mysql_query('set character_set_client="utf8"');
   mysql_query('set character_set_results="utf8"');
   mysql_query('set collation_connection="utf8_general_ci"');
  }
   
  function connect() {
   $this->mysql = mysql_connect($this->host, $this->username, $this->password);
   $this->setCharset();
  }
 
  function selectDB($dbname) {
   if (empty($this->dbnames[$dbname])) {
    $this->dbnames[$dbname] = $dbname;
   }
   if ($this->currentDB != $dbname) {
    $this->currentDB = $dbname;
   }
 
   mysql_select_db($this->dbnames[$dbname], $this->mysql);
  }
 
  function query($query,$key) {
   $this->query = new Query($query);
   $this->queries[$currentDB][$key] = $this->query;
  }
 
  function getQuery($key) {
   return $this->queries[$currentDB][$key];
  }
   
  function fetchArray($marker,$key) {
   switch ($marker) {
    case "A":
	 return $this->queries[$currentDB][$key]->getArray(MYSQL_ASSOC);
    break;
   
    case "I":
	 return $this->queries[$currentDB][$key]->getArray(MYSQL_NUM);
    break;
   
    case "AI":
	 return $this->queries[$currentDB][$key]->getArray(MYSQL_BOTH);
    break;
   
    default:
	 echo("MySQL #".mysql_errno()."ошибка:".mysql_error());
    break;
   }
  }
 
  function close() {
   mysql_close($this->mysql);
  }
}
?>
objects.php
Код:
<?
class Page {
  public $id;
  public $title;
  public $text;
  public $footer;
 
  function createFromAssoc($array) {
   $this->id = $array['id'];
   $this->title = $array['title'];
   $this->text = $array['text'];
   $this->footer = $array['footer'];
  }
 
  function createFromArray($array) {
   $this->id = $array[0];
   $this->title = $array[1];
   $this->text = $array[2];
   $this->footer = $array[3];
  }
}

class Message {
  public $id;
  public $author;
  public $email;
  public $text;
  public $date;
 
  function checkEmailForRegExp($exp) {
   $regExp = preg_match($exp,$this->email);
  
   if ($regExp > 0) {
    return true;
   }
  }
 
  function createMessageWithArgs($author, $email, $text, $date) {
   $this->author = $author;
   $this->email = $email;
   $this->text = $text;
   $this->date = $date;
  }
 
  function secureText() {
   $this->text = htmlspecialchars(addslashes($this->text));
  }
 
  function createMessageFromAssoc($array) {
   $this->author = $array['author'];
   $this->email = $array['email'];
   $this->text = $array['text'];
   $this->date = $array['date'];
  }
 
  function createMessageFromArray($array) {
   $this->author = $array[0];
   $this->email = $array[1];
   $this->text = $array[2];
   $this->date = $array[3];
  }
}
?>
sendMessage.php
Код:
<?
require("config.php");

$message = new Message();
$message->createMessageFromAssoc($_POST);

$message->date = date("Y-m-d, H:i");

if($message->checkEmailForRegExp("/([a-z0-9.]*)@([a-z0-9.]*)/i")) {
  $message->secureText();
 
  $sql = "INSERT INTO `messages` (`author`,`email`,`text`,`date`) VALUES ('".$message->author."','".$message->email."','".$message->text."','".$message->date."')";
  $db->query($sql,"messagesInsert");
 
  header("Location: ./");
}
else {
  header("Location: ./");
}
?><?
require("config.php");

$message = new Message();
$message->createMessageFromAssoc($_POST);

$message->date = date("Y-m-d, H:i");

if($message->checkEmailForRegExp("/([a-z0-9.]*)@([a-z0-9.]*)/i")) {
  $message->secureText();
 
  $sql = "INSERT INTO `messages` (`author`,`email`,`text`,`date`) VALUES ('".$message->author."','".$message->email."','".$message->text."','".$message->date."')";
  $db->query($sql,"messagesInsert");
 
  header("Location: ./");
}
else {
  header("Location: ./");
}
?>
Ну все. (Я слегка на говнокодил, и не отрицаю этого, во-первых: пол года не писал на PHP, во-вторых: я сонный)
 

Вложения

Статус
Закрыто для дальнейших ответов.
Верх Низ