Воскресенье, 24 Ноября 2024, 03:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Мини форум на PHP
Andrew01Дата: Пятница, 27 Февраля 2015, 19:04 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Привет всем! искал в интернете скрипты форумов, нашел только готовые, а само описание как писать скрипты нет(((
мне на сайт с игрой нужен форум без всяких прибомбасов, только основные функции создание тем и переписка в них... решил сам написать и выложить может кому пригодится... вот что получилось, если я где-то не то написал то исправляйте меня (пхп изучаю в общей сложности пол года) , и по возможности подскажите как может его улучшить, особенно с бд там вообще сами увидите.

БД
4 таблицы (вот так вот вышло)))))
forum_user(id, login, password, reg) - пользователи;
forum_section(id, name, total, reg) - таблица с заголовками;
forum_topic(id, name, section, total, data) - таблица с темами;
forum_reply(id, section, topic, text, login, data) - таблица с ответами;

name - название раздела или темы
total - количество тем в разделе или ответов в теме
остальное думаю понятно)))

на комментарии в выводе ошибок не обращайте внимания это черновой вариант, на localhost все работает нормально вроде)))))))))
Код

<?php
session_start();
require_once "../config/db.php";
[b]require_once "text_replace.php";[/b]
?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Форум </title>
</head>
<body id="body_game">
<header id="page_heder"><h1>Форум</h1>
</header>
<?php
if($_POST['go']){
    $sql = "SELECT * FROM `forum_user` WHERE `login` = '{$_POST['login']}' AND `password` = '{$_POST['password']}' ";
    $res = mysql_query($sql);
    $num = mysql_num_rows($res);
    if($num > 0){
     $_SESSION['forum_login'] = $_POST['login'];
    }else{
     echo "Неправильный логин или пароль";
    }
}
echo '<section id="enter_forum">';
if($_SESSION['forum_login'] == ""){
    echo '<form action="" method="POST">
<table>
    <tr><td>Логин:</td><td><input type="text" name="login" /></td><td>Пароль:</td><td><input type="password" name="password"/></td><td><input type="submit" name="go" value="Вход"/></td><td><a href = "">Регистрация</a></td></tr>
</table>
</form>';
}else{
    echo "Добро пожаловать ".$_SESSION['forum_login'];
}
echo "</section>";
if($_POST['addtopic']){
  [b]$topic = trim(replacer($_POST['name_topic'])) ;
  $text = trim(replacer($_POST['text_topic'])) ;
  if($topic != "" && $text != ""){[/b]
   $sqlup = "SELECT `total` FROM `forum_section` WHERE `name` = '{$_GET['section']}' ";
   $resup = mysql_query($sqlup) or die("Не выбирается из разделов");
   $tot = mysql_fetch_assoc($resup);
   
   $total = $tot['total'] + 1;
   $sql = "UPDATE `forum_section` SET `total` = '{$total}', `reg` = NOW() WHERE `name` = '{$_GET['section']}' ";
   mysql_query($sql)  or die("не обновляется раздел");
   
   $sql = "INSERT INTO `forum_topic` (`name`, `section`, `login`, `total`, `data`) VALUES ('{$topic}', '{$_GET['section']}', '{$_SESSION['forum_login']}', '0', NOW())";
   mysql_query($sql)  or die("не вставляется в топик");
   
   $sql = "INSERT INTO `forum_reply` (`section`, `topic`, `text`, `login`, `data`) VALUES ('{$_GET['section']}', '{$topic}', '{$text}', '{$_SESSION['forum_login']}', NOW())";
   mysql_query($sql)  or die("не добавляется в коменты");
  }else{
   echo "Вы не заполнили одно из полей!!!";
  }
   
}

if($_POST['addreply']){
  [b]$text = trim(replacer($_POST['text_topic'])) ;
  if($text != ""){[/b]
   $sqlup = "SELECT `total` FROM `forum_topic` WHERE `name` = '{$_GET['reply']}' ";
   $resup = mysql_query($sqlup) or die("неправильный запрос в топик");
   $tot = mysql_fetch_assoc($resup);
   
   $sql = "UPDATE `forum_section` SET  `reg` = NOW() WHERE `name` = '{$_POST['section']}' ";
   mysql_query($sql)  or die("не обновляется раздел");
   
   $total = $tot['total'] + 1;
   $sql = "UPDATE `forum_topic` SET `total` = '{$total}', `data` = NOW() WHERE `name` = '{$_GET['reply']}' ";
   mysql_query($sql)  or die("не обнвляется топик");
   
   $sql = "INSERT INTO `forum_reply` (`section`, `topic`, `text`, `login`, `data`) VALUES ('{$_POST['section']}', '{$_GET['reply']}', '{$text}', '{$_SESSION['forum_login']}', NOW())";
   mysql_query($sql)  or die("не вставляется ответ");
  }else{
   echo "Вы ничего не написали!!!";
  }
   
}
?>
<section id="content">
<nav id="nav_bar">
     <table>
         
        
      <?php
       if(!$_GET){
        echo "<tr><th><a href='index.php'>Главная >></a></th></tr>
        </table></nav>
        <table>
        <tr><th id='text'>Раздел</th><th>Кол-во тем</th><th>Последняя запись</th></tr>";
        $sql = "SELECT * FROM `forum_section`";
        $res = mysql_query($sql);
        while($row = mysql_fetch_assoc($res)){
         echo "<tr><td><a href='?section={$row['name']}&page=1'>{$row['name']}</a></td><td>{$row['total']}</td><td id='data'>{$row['reg']}</td></tr>";
        }
       }
       if($_GET['section']){
        echo "<tr><th><a href='index.php'>Главная >></a></th><th>{$_GET['section']}</th></tr>
        </table></nav>
        <table><tr><th id='text'>Тема</th><th>Автор</th><th>Ответы</th><th>Последняя запись</th></tr>";
           
        $sql = "SELECT * FROM `forum_topic` WHERE `section` = '{$_GET['section']}' ORDER BY `data` DESC";
        $res = mysql_query($sql);
        $num = mysql_num_rows($res);
           
        $arr = array();
        if($num > 0){
         while($row = mysql_fetch_assoc($res)){
          $echo = "<tr><td><a href='?reply={$row['name']}&page=1'>{$row['name']}</a></td><td>{$row['login']}</td><td>{$row['total']}</td><td id='data'>{$row['data']}</td></tr>";
          array_push($arr, $echo);
         }
         for($i = 30 * ($_GET['page'] - 1); $i < (30 * $_GET['page']); $i++){
          echo $arr[$i];
         }
         $page = ceil($num / 30) + 1;
         echo "<tr><td colspan = '3'>Страницы: ";
         for($a = 1; $a < $page; $a++ ){
          echo "<a href='?section={$_GET['section']}&page={$a}'>{$a} </a>";
         }
         echo "</td></tr>";
        }else{
         echo "В данном разделе еще не создано тем<br/><a href='?page=newtopic§={$_GET['section']}'>Создать тему</a>";
        }
       }
          
       if($_GET['reply']){
           
        $sql = "SELECT * FROM `forum_reply` WHERE `topic` = '{$_GET['reply']}' ORDER BY `data` ASC";
        $res = mysql_query($sql);
        $num = mysql_num_rows($res);
        $arr = array();    
        $section;    
        while($row = mysql_fetch_assoc($res)){
         $echo  = "<tr><td id='autor'>{$row['login']}</td><td>{$row['text']}<hr/><span id='data'>{$row['data']}</span></td></tr>";
         $section = $row['section'];
         array_push($arr, $echo);
        }
           
        echo "<tr><th><a href='index.php'>Главная </a>>></th><th><a href='?section={$section}&page=1'>{$section}</a> >></th><th>{$_GET['reply']}</th></tr>
        </table></nav>
        <table><tr><th id='autor'>Автор</th><th id='text'>Ответ</th></tr>";
           
           
        for($i = 30 * ($_GET['page'] - 1); $i < (30 * $_GET['page']); $i++){
          echo $arr[$i];
         }
         $page = ceil($num / 30) + 1;
         echo "<tr><td colspan = '2'>Страницы: ";
         for($a = 1; $a < $page; $a++ ){
          echo "<a href='?reply={$_GET['reply']}&page={$a}'>{$a} </a>";
         }
           
        echo "</td></tr></table><br/><br/>";
        if($_SESSION['forum_login'] != ""){
         echo "<form action='?reply={$_GET['reply']}&page={$_GET['page']}' method='POST'>";
         echo '<table>
          <tr><th id="autor">Сообщение:</th>
          <th id="text"><textarea cols="120" rows="10" name="text_topic"></textarea></th></tr>
             
          <tr><th><input type="submit" name="addreply" value="Добавить отзыв"/></th></tr>
          </table>';
          echo "<input type='hidden' name='section' value='{$section}' /></form>";
             
        }else{
         echo "Вы не можете оставлять коментарии, пожалуйста войдите или <a href = ''>зарегистрируйтесь!</a>";
        }
       }
          
          
       if($_GET['page'] == "newtopic"){
        if($_SESSION['forum_login'] != ""){
         echo "<form action='?section={$_GET['sect']}&page=1' method='POST'>";
         echo '<table>
          <tr><td>Название темы:</td></tr>
          <tr><td><input type="text" name="name_topic"/></td></tr>
          <tr><td>Сообщение:</td></tr>
          <tr><td><textarea cols="60" rows="20" name="text_topic"></textarea></td></tr>
          <tr><td><input type="submit" name="addtopic" value="Добавить тему"/></td></tr>
          </table>
          </form>';
        }else{
         echo "Вы не можете создавать темы, пожалуйста войдите или <a href = ''>зарегистрируйтесь!</a>";
        }
       }
          
      ?>
     </table>

</section>
</body>
</html>
    


добавил файл text_replace.php


Сообщение отредактировал Andrew01 - Суббота, 28 Февраля 2015, 15:57
dima9595Дата: Пятница, 27 Февраля 2015, 19:24 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
MVC в помощь!



Сообщение отредактировал dima9595 - Пятница, 27 Февраля 2015, 19:25
staconikДата: Пятница, 27 Февраля 2015, 20:15 | Сообщение # 3
участник
Сейчас нет на сайте
HTML и PHP в одном файле не есть хорошо.
Как сказал dima9595, изучи хотя бы основы MVC и тогда сможешь написать нормальный форум.
Если будут какие-нибудь вопросы, можешь написать мне в ЛС.


Andrew01Дата: Пятница, 27 Февраля 2015, 20:28 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Ясно, спасибо за советы, буду дальше учить)))))))
или лучше подключить уже готовый форум? исходник есть но разбираться там не очень хочется....


Сообщение отредактировал Andrew01 - Пятница, 27 Февраля 2015, 20:34
XakepДата: Пятница, 27 Февраля 2015, 23:14 | Сообщение # 5
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата staconik ()
HTML и PHP в одном файле не есть хорошо.

почему? для шаблонов по мне так лучший вариант вместо своих непонятных костылей, для реализации по сути того же самого?
uberchelДата: Суббота, 28 Февраля 2015, 05:29 | Сообщение # 6
частый гость
Сейчас нет на сайте
Для простенького форума и так сойдет, чем писать MVC или юзать готовые и таскать несколько мигабайт не использованного кода, имхо
ТС, прошу обратить ваше внимание на то, что у вас все запросы не фильтруются, а сразу попадают в БД, Любой школьник навернет ваш форум.


// скоро тут что нибудь появится )
staconikДата: Суббота, 28 Февраля 2015, 09:16 | Сообщение # 7
участник
Сейчас нет на сайте
Цитата Xakep ()
почему? для шаблонов по мне так лучший вариант вместо своих непонятных костылей, для реализации по сути того же самого?

Если страница достаточно больших размеров, то разобраться потом в этом говнокоде будет очень сложно. Лучше в начале немного пострадать, за то потом не будет проблем с поддержкой этого кода.


XakepДата: Суббота, 28 Февраля 2015, 11:38 | Сообщение # 8
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата staconik ()
Если страница достаточно больших размеров, то разобраться потом в этом говнокоде будет очень сложно. Лучше в начале немного пострадать, за то потом не будет проблем с поддержкой этого кода.

а что мешает тебе часть реализацию вытащить в отдельные файлы, а шаблоны делать отдельными?? Просто напросто не нужно быть говнокодером, чтобы не было говно кода. В WordPress именно так шаблоны и реализованы, там нет своих шаблонизаторов, и это хорошо!
Andrew01Дата: Суббота, 28 Февраля 2015, 16:00 | Сообщение # 9
почетный гость
Сейчас нет на сайте
Цитата uberchel ()
прошу обратить ваше внимание на то, что у вас все запросы не фильтруются, а сразу попадают в БД


вы это имели ввиду?
добавил проверку на замену символов в отдельном файле
Код

<?php
function replacer ($text) { // ФУНКЦИЯ очистки кода
$text=str_replace(" ",' ',$text);
$text=str_replace(">",'>',$text);
$text=str_replace("<",'<',$text);
$text=str_replace("\"",'"',$text);
$text=str_replace("\'",''',$text);
$text=preg_replace("/\n\n/",'<p>',$text);
$text=preg_replace("/\n/",'<br>',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
if (get_magic_quotes_gpc()) {  // если magic_quotes включена - чистим СЛЭШи: одиночные (') и двойные кавычки ("), обратный слеш (\)
$text=str_replace("\"",'"',$text);
$text=str_replace("\'",'\'',$text);
$text=str_replace("\\",'\',$text);}
$text=str_replace("\r\n","<br> ",$text);
$text=str_replace("\n\n",'<p>',$text);
$text=str_replace("\n",'<br> ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace('   ',' ',$text);
do {$text=str_replace("<br><br><br>","<br>",$text);} while (preg_match("/<br><br><br><br>/i",$text));
do {$text=str_replace("   "," ",$text);} while (preg_match("/   /i",$text));
$text=str_replace("\t",' ',$text);
$text=str_replace("\r",' ',$text);
$text=str_replace('   ',' ',$text);
$text=rtrim($text);
return $text; }
?>

правда не сам придумал нашел в интернете


Сообщение отредактировал Andrew01 - Суббота, 28 Февраля 2015, 16:05
uberchelДата: Суббота, 28 Февраля 2015, 21:48 | Сообщение # 10
частый гость
Сейчас нет на сайте
Нэ, у вас страх какой то просто ) вот так лучше будет:

Код

function filter($query, $html = false, $decode = false, $admin = false) {
       
    if (empty(query))    
    {
     header('location:/');
     exit;
    }
       
    if (empty($decode))
    {      
        $query = preg_replace ('/x27|x22|x25|x60|x3C|x3E|' .(empty($admin) ? '<\/?[scr|obj|emb|a\shr|img|ifra].+>' : ''). '/isU', '', $query);
           $query = empty($html) ? preg_replace('/[^a-z0-9-_]{1,50}/is', '', $query) : htmlspecialchars($query, ENT_QUOTES);
       }
       else
       {
        $query = nl2br(html_entity_decode($query));
       }
    return trim($query);
}



$query - запрос
$html - приобразовывать html в сущности / удалять html код, кроме перевода строки (true/false)
$decode - преобразовывать сушьности в html код, если $admin = false, то теги a,img, embed,script,object,iframe, будут удалены.
$admin - если true, про при входе теги a,img, embed,script,object,iframe остаются.


// скоро тут что нибудь появится )

Сообщение отредактировал uberchel - Суббота, 28 Февраля 2015, 21:52
dima9595Дата: Воскресенье, 01 Марта 2015, 12:05 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
Цитата uberchel ()
if (empty(query))

возможно показалось, но не должно ли быть вот так:
Цитата uberchel ()
if (empty($query))


Andrew01Дата: Воскресенье, 01 Марта 2015, 23:09 | Сообщение # 12
почетный гость
Сейчас нет на сайте
uberchel, видимо я еще только в начале пути изучения PHP не очень понял назначение функции и как её ипользовать sad ....
uberchelДата: Понедельник, 02 Марта 2015, 01:23 | Сообщение # 13
частый гость
Сейчас нет на сайте
dima9595, Да, обсолютно прав, писал на скорую руку )

// скоро тут что нибудь появится )

Сообщение отредактировал uberchel - Понедельник, 02 Марта 2015, 01:24
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг