Web-мастер: курс молодого бойца

Каталог статей с возможностью оставлять комментарии

 Страницы: 1 | 2 | 3 ... >>
 

 Добавлено 2008-03-03 17:46:25
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
Это только первая часть - будет еще админка. В административной части будет возможность добавлять статьи и категории. И, возможно, редактировать комментарии.
articles.php
<?php
// Если передан ID статьи - показываем затребованную статью
if ( isset( $_GET['id_art'] ) and (int)$_GET['id_art'] > ) {
  
$id_art = (int)$_GET['id_art'];
  
$query 'SELECT * FROM articles WHERE id_art='.$id_art;
  
$res mysql_query$res );
  if ( 
mysql_num_rows$res ) > ) {
    
$art mysql_fetch_array$res );
    echo 
'<h1>'.$art['title'].'<h1>';
    echo 
'<div>'.$art['body'].'<div>';
    echo 
'<p><em>Опубликовано '.$art['date'].'</em></p>';
    
// Форма для добавления комментрия
    
echo '<form action="comments.php?id_art='.$id_art.'" method="POST">';
    echo 
'Имя: <input type="text" name="name" value="" /><br/>';
    echo 
'Сообщение:<br/> <textarea name="message"></textarea><br/>';
    echo 
'<input type="submit" name="send" value="Добавить" />';
    echo 
'</form>';
    
// Получаем из БД комментарии к статье
    
$query 'SELECT author, message FROM comments WHERE id_art='.$id_art.' LIMIT 5';
    
$res mysql_query$query );
    if ( 
mysql_num_rows$res ) > ) {
      echo 
'<h2>Последние комментарии</h2>';
      while ( 
$comm mysql_fetch_array$res ) ) {
        echo 
'<p>Автор: '.htmlspecialchars($comm['author']).'</p>';
        echo 
'<div>'.htmlspecialchars($comm['message']).'</div>';
      }
      echo 
'<p><a href="comments.php?id_art='.$id_art.'">Все комментарии</a></p>';
    }    
  } else {
    echo 
'<p>Запрошенная статья не найдена</p>';
  }  
} else {
  
// Если не передан ID статьи - значит выводим список всех 
  // статей (или список всех статей определенной категории)
  
if ( isset( $_GET['id_ctg'] ) and (int)$_GET['id_ctg'] > ) {
    
$id_ctg = (int)$_GET['id_ctg'];
    
$query 'SELECT title FROM categories WHERE id_ctg='.$id_ctg;
    
$res mysql_query$query );
    if ( 
mysql_num_rows$res ) == ) {
      
header'Location: '.$_SERVER['PHP_SELF'] )
      die();
    }
    echo 
'<h1>Категория: '.mysql_result$res0).'<h1>';
    
$tmp ' AND id_ctg='.$id_ctg;
  } else {
    
$tmp '';
  }
  
  
// Выбираем из БД количество активных статей - это нужно для 
  // построения постраничной навигации
  
$query "SELECT COUNT(*) FROM articles WHERE active=1".$tmp;
  
$res mysql_query$query );
  
$total mysql_result$res0);
  
  
// Число страниц списка статей (постраничная навигация)
  
$cntPages ceil$total ARTICLES_PER_PAGE );
  
  
// Проверяем передан ли номер текущей страницы (постраничная навигация)
  
if ( isset($_GET['page']) and (int)$_GET['page'] > )
    
$page = (int)$_GET['page'];
  else
    
$page $cntPages;

  if ( 
$page $cntPages $page $cntPages;
  
// Начальная позиция (постраничная навигация)
  
$start = ( $page ) * ARTICLES_PER_PAGE;

  
$query "SELECT id_art, title, announce, DATE_FORMAT(puttime, '%d.%m.%Y') AS date 
            FROM articles 
            WHERE active=1"
.$tmp." ORDER BY puttime DESC LIMIT ".$start.", ".ARTICLES_PER_PAGE;
  
$res mysql_query$query );
  if ( 
mysql_num_rows$res ) > ) {
    while( 
$art mysql_fetch_array$res ) ) {
      echo 
'<h2>'.$art['title'].'<h2>';
      if ( isset( 
$id_ctg ) )
        echo 
'<div><a href="'.$_SERVER['PHP_SELF'].'?id_ctg='.$id_ctg.'&id_art='.
             
$art['ad_art'].'">'.$art['announce'].'</a></div>';
      else
        echo 
'<div><a href="'.$_SERVER['PHP_SELF'].'?id_art='.$art['ad_art'].'">'.$art['announce'].'</a></div>';
      echo 
'<p><em>Опубликовано '.$art['date'].'</em></p>';
    }
    
// Строим постраничную навигацию, если это необходимо
    
if ( $cntPages ) {
      if ( isset( 
$id_ctg ) ) 
        
$pages pageIterator$page$cntPages$_SERVER['PHP_SELF'].'?id_ctg='.$id_ctg ); 
      else
        
$pages pageIterator$page$cntPages$_SERVER['PHP_SELF'] );    
    }
  } else {
    echo 
'<p>Нет статей</p>';
  }
}  

// Функция возвращает html меню для постраничной навигации
function pageIterator$page$cntPages$url )
{

  
$html '<div class="pagesDiv">&nbsp;Страницы: ';
  
// Проверяем нужна ли стрелка "В начало"
  
if ( $page )
    
$startpage '<a class="pages" href="'.$url.'&page=1"><<</a> ... ';
  else
    
$startpage '';
  
// Проверяем нужна ли стрелка "В конец"
  
if ( $page < ($cntPages 2) )
    
$endpage ' ... <a class="pages" href="'.$url.'&page='.$cntPages.'">>></a>';
  else
    
$endpage '';

  
// Находим две ближайшие станицы с обоих краев, если они есть
  
if ( $page )
    
$page2left ' <a class="pages" href="'.$url.'&page='.($page 2).'">'.($page 2).'</a> | ';
  else
    
$page2left '';
  if ( 
$page )
    
$page1left ' <a class="pages" href="'.$url.'&page='.($page 1).'">'.($page 1).'</a> | ';
  else
    
$page1left '';
  if ( 
$page <= $cntPages )
    
$page2right ' | <a class="pages" href="'.$url.'&page='.($page 2).'">'.($page 2).'</a>';
  else
    
$page2right '';
  if ( 
$page <= $cntPages )
    
$page1right ' | <a class="pages" href="'.$url.'&page='.($page 1).'">'.($page 1).'</a>';
  else
    
$page1right '';

  
// Выводим меню
  
$html $html.$startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.
          
$page1right.$page2right.$endpage."\n";

  
$html $html.'</div>'."\n";

  return 
$html;
}
?>
comments.php
<?php
if ( !isset( $_GET['id_art'] ) ) {
  
header'Location: articles.php' );
  die();
}
$id_art = (int)$_GET['id_art'];
if ( 
$id_art ) {
  
header'Location: articles.php' );
  die();
}
// Убеждаемся в том, что такая статья существует
$query 'SELECT 1 FROM articles WHERE id_art='.$id_art;
$res mysql_query$query );
if ( 
mysql_num_rows$res ) == ) {
  
header'Location: articles.php' );
  die();
}

// Добавляем новый комментарий
if ( $_SERVER['REQUEST_METHOD'] == 'POST' and isset( $_POST['name'] ) and isset( $_POST['message'] ) ) {
  
$name    substr$_POST['name'], 030 );
  
$message substr$_POST['$message'], 0250 );
  
$name    trim$name );
  
$message trim$message );
  if ( !empty( 
$name ) and !empty( $message ) ) {
    
$name    mysql_real_escape_string$name );
    
$message mysql_real_escape_string$message );
    
$query "INSERT INTO comments VALUES (".$id_art.", '".$name."', '".$message."')";
    
mysql_query $query );
  }
  
header'Location: '.$_SERVER['PHP_SELF'].'id_art='.$id_art );
  die();
}

// Выбираем из БД количество комментариев к статье - это нужно для 
// построения постраничной навигации
$query "SELECT COUNT(*) FROM comments WHERE id_art=".$id_art;
$res mysql_query$query );
$total mysql_result$res0);

// Число страниц списка комментариев (постраничная навигация)
$cntPages ceil$total COMMENTS_PER_PAGE );

// Проверяем передан ли номер текущей страницы (постраничная навигация)
if ( isset($_GET['page']) and (int)$_GET['page'] > )
  
$page = (int)$_GET['page'];
else
  
$page $cntPages;

if ( 
$page $cntPages $page $cntPages;
// Начальная позиция (постраничная навигация)
$start = ( $page ) * COMMENTS_PER_PAGE;

// Получаем из БД комментарии к статье
$query "SELECT author, message 
          FROM comments 
          WHERE id_art="
.$id_art.
          ORDER BY id DESC 
          LIMIT "
.$start.", ".COMMENTS_PER_PAGE;
$res mysql_query$query );
if ( 
mysql_num_rows$res ) > ) {
  echo 
'<h2>Комментарии к статье</h2>';
  while ( 
$comm mysql_fetch_array$res ) ) {
    echo 
'<p>Автор: '.htmlspecialchars($comm['author']).'</p>';
    echo 
'<div>'.htmlspecialchars($comm['message']).'</div>';
  }
  
// Строим постраничную навигацию, если это необходимо
  
if ( $cntPages ) {
    
$pages pageIterator$page$cntPages$_SERVER['PHP_SELF'].'?id_art='.$id_art );    
  }
} else {
  echo 
'<p>Нет комменгтариев</p>';
}  
?>
P.S. В работе еще не проверял - просто сел и написал. Если кто-то заметит ошибки - не поленитесь, черканите пару строк.


Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 03.03.2008

 Добавлено 2008-03-03 17:49:07
UserID
Модератор


Сообщений: 153
Зарегистрирован: 29.12.2007

Цитировать
evgenijj :) правильные программисты компилят на бумажке. Молодец, evgenijj.


Master...
Наверх  Посмотреть профиль    

 Добавлено 2008-03-03 18:44:08
zap


Сообщений: 141
Зарегистрирован: 05.02.2008

Цитировать
думаю стоит еще добавить к форме добавления антибота:
<?
// Запустим сессию и разные заголовки для запрета кеширования
session_start();
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: image/png");

// Генерируем число, и регестрируем его в сессии
$bTest=rand(10000000,99999999);
session_register("btest");

$x=82$y=20;
// Генерируем изображение
$image=imagecreate($x,$y);
$bg imagecolorallocate($image,140,70,0);
$colTxt imagecolorallocate($image,255,255,255);

// Генерируем код
imagestring($image,5,5,2,$bTest,$colTxt);

// выводим изображение на экран
imagepng($image);
// застрелим :)
imagedestroy($image);

?>



оптимисты учат английский, пессимисты - китайский, а реалисты изучают автомат калашникова
Наверх  Посмотреть профиль    

 Добавлено 2008-03-03 18:47:14
zap


Сообщений: 141
Зарегистрирован: 05.02.2008

Цитировать
блин клевый форум :) я уже каждый день сюда заглядываю) как наркотик уже))) правда бывает не до компа)


оптимисты учат английский, пессимисты - китайский, а реалисты изучают автомат калашникова
Наверх  Посмотреть профиль    

 Добавлено 2008-03-05 21:55:50


Цитировать
Evgenijj,ты прям поэт))сходу написал
Наверх Незарегистрированный пользователь  
 Страницы: 1 | 2 | 3 ... >>
 
Быстрый ответ
 
Цвет шрифта: Закрыть все теги
Сообщение
Защитный код