Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ООП В PHP 5
 
 автор: Skinhead1   (23.06.2009 в 23:30)   письмо автору
 
 

Для меня долгое время (почти 3 месяца) это было чем-то непонятным и казалось совсем ненужным... Сегодня же я задался целью разобраться как это реализовано в php, все оказалось очень просто (благодаря изучению яваскрипта). На чтение чудо-учебника Колесниченко где этому вопросу посвящено аж целых две страницы ушло 5 минут, на борьбу с ошибками целых 20 и вот он результат(это подобие гостевой без дизайна, постраничной навигации и админки):

Класс гостевой guest.class.php:

<?php
class guest{
var $date;
var $name;
var $message;
var $path = "data/messages.txt";

function getDate(){
$this->date = date("d/m/Y H:i:s");
return $this->date;

}

function getName(){

if(empty($_POST['name'])){
$this->name = "Аноним";
}else{
$this->name = htmlspecialchars($_POST['name']);
$this->name = trim($this->name);


$this->name = str_replace("\n", "", $this->name);
$this->name = str_replace("|", "", $this->name);
$this->name = substr($this->name, 0, 15);

}

return $this->name;
}

function getMessage(){
$this->message = htmlspecialchars($_POST['message']);
$this->message = trim($this->message);

$this->message = str_replace("\n", "<br />", $this->message);
$this->message = str_replace("|", "", $this->message);
$this->message = substr($this->message, 0, 500);

return $this->message;
}

function addMessage(){
$date = $this->getDate();
$name = $this->getName();
$message = $this->getMessage();
$f=fopen($this->path, "a+");
flock($f, LOCK_EX);
fwrite($f, "$date|$name|$message\r\n");
flock($f, LOCK_UN);
fclose($f);
}

function showMessages(){
$messages = file($this->path);
krsort($messages);
if (!empty($messages)){
foreach($messages as $message){
$element=explode("|", $message);
echo "<div>".$element[0]."<br />".$element[1]."<br />".$element[2]."</div>";
}
}
}
}
?>

Главная страница index.php:

<!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=windows-1251" />
<title>Гостевая</title>
</head>
<body>
<?php
include("guest.class.php");
$obj = new guest;
$obj->showMessages();
?>
<form action="handler.php" method="post">
Имя:
<input type="text" name="name" /><br />
Сообщение:<br />
<textarea name="message"></textarea><br />
<input name="add" type="submit" />
</form>
</body>
</html>

Файл обработчик handler.php:

<?php
if (isset($_POST['add']) && !empty($_POST['message'])){
include("guest.class.php");
$obj = new guest;
$obj->addMessage();
header("location: index.php");
}
?>

Сообщения хранятся в data/messages.txt.
Жду комментариев (насчет того, что var $message и т.д. тут лишние я знаю). Вот только у меня возник один вопрос: а почему
var $name = $_POST['name'];
приводит к ошибке?

  Ответить  
 
 автор: Skinhead1   (24.06.2009 в 21:40)   письмо автору
 
   для: Skinhead1   (23.06.2009 в 23:30)
 

<?php
class guest{
/*свойства*/
var $admin;
var $date;
var $email;
var $name;
var $message;
const path = "data/messages.txt";//константа

/*методы*/
function __construct(){//метод-конструктор класса, выполняется при создании объекта
session_start();
$this->admin = $_SESSION['admin'];
$this->date = date("d/m/Y H:i:s");
$this->email = $_POST['email'];
$this->name = $_POST['name'];
$this->message = $_POST['message'];
}


//методы доступные только внутри класса
private function checkEmail($email){
if(eregi('^([a-z0-9_]|\\-|\\.)+'.'@'.'(([a-z0-9_]| \\-)+\\.)+'.'[a-z0-9]{2,4}$', $email)){
$email = "<a href=\"mailto: $email\">$email</a>";
}else{
$email = "Не указан";
}

return $email;
}


private function getName($name){
$name = htmlspecialchars($name);
$name = trim($name);
$name = str_replace(" ", "", $name);
$name = str_replace(chr(160), "", $name);
$name = str_replace(":|:", "", $name);
$name = substr($name, 0, 20);
if (empty($name)){
$name = "Аноним";
}

return $name;
}


private function getMessage($message){
$message = htmlspecialchars($message);
$message = trim($message);
$message = str_replace("\n", "<br />", $message);
$message = str_replace(":|:", "", $message);
$message = substr($message, 0, 500);

return $message;
}


//методы доступные в любом месте
public function addMessage(){
$this->email = $this->checkEmail($this->email);
$this->name = $this->getName($this->name);
$this->message = $this->getMessage($this->message);
$f=fopen(self::path, "a+");
flock($f, LOCK_EX);
fwrite($f, $this->date.":|:".$this->name.":|:".$this->email.":|:".$this->message."\r\n");
flock($f, LOCK_UN);
fclose($f);
header("location: index.php");
}


public function delMessage(){
$i=$_GET['del_mess'];
$i--;
$messages = file(self::path);
krsort($messages);
$messages=array_values($messages);
unset($messages[$i]);
krsort($messages);
$messages=array_values($messages);
$f=fopen(self::path, "w+");
flock($f, LOCK_EX);
fwrite($f, implode("", $messages));
fflush($f);
flock($f, LOCK_UN);
fclose($f);
header("location: index.php");
}


public function showMessages(){
$messages = file(self::path);
$count = count($messages);
krsort($messages);//сортировка массива по ключам в обратном порядке
$messages=array_values($messages);//переиндексация массива
if ($count!=0){
if (isset($_GET['n'])){
$i = $_GET['n'];
}else{
$i = 0;
}
$limit = $i+10;
$back = $i-10;
$k=$i+1;
while($i<$limit){
if ($i%2==0){
$elclass="a1";
}else{
$elclass="a2";
}
$element=explode(":|:", $messages[$i]);
if ($i==$count){
break;
}
echo "<div class=\"message\"><div class=\"$elclass\">Сообщение #".$i."<br />".$element[0]."<br />".$element[1]."<br />".$element[2]."</div>".$element[3];
if ($this->admin){
echo "\n<br />\n<a href=\"{$_SERVER['PHP_SELF']}?del_mess=$k\">Удалить сообщение</a>";
}
echo "</div>\n";
$i++;
$k++;
}
echo "<div>";
if ($back<0){
$back = 0;
}
echo "<a href=\"{$_SERVER['PHP_SELF']}?n=$back\">&laquo;Назад</a>";
if ($i!=$count){
echo "|<a href=\"{$_SERVER['PHP_SELF']}?n=$i\">Далее&raquo;</a></div>\n";
}
}else{
echo "Здесь нет пока сообщений.\n";
}
}
}//class
/*Конец*/
?>

  Ответить  
 
 автор: 34534   (24.06.2009 в 21:57)
 
   для: Skinhead1   (24.06.2009 в 21:40)
 

особенно гениально "резать" строку с помощью substr после htmlspecialchars'а...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования