Webmaster общности: Predpriemach.com | SearchEngines.bg

    Система за статии с bbcode

    Автор: alex95_bg_2

    Това е поредния скрипт, който си написах за уеб-страницата и реших да го пусна като урок
    Това е много проста система за статии използваща MySQL (колебаех се между използването на база данни или текстови файлове, но се спрях на по-производителното)
    Така, стига съм се обяснявал, ето го урока: Veryhappy

    базата данни:

    CREATE TABLE `articles`.`article` (
    `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    `cid` INTEGER UNSIGNED NOT NULL,
    `art_name` VARCHAR(255) NOT NULL,
    `art_date` DATETIME NOT NULL,
    `art_txt` VARCHAR(15000) NOT NULL,
    PRIMARY KEY(`id`)
    )
    ENGINE = InnoDB;

    articles.php – изкарва статиите

    <?php
    /*
    Александър Станоев
    АлексСофт
    alexsoft-bg.com
    */
    
    //mysql връзки
    $dbhost = 'localhost'; //localhost попринцип
    $dbuser = 'root'; //юзър име
    $dbpass = ''; //парола
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('mysql error');
    
    $dbname = 'articles'; //име на бд
    mysql_select_db($dbname);
    
    $art = $_GET['aid'];
    
    //проверки на входните данни
    if ( empty($art) ) {
    die ("article id missing");
    }
    if ( !is_numeric($art) ) {
    die ("article id must be numeric");
    }
    
    //izkarvame sadarzanieto
    $query = "SELECT * FROM article WHERE id='$art'";
    $result = mysql_query($query);
    echo ' <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">'; echo "\n";
    echo '<style type="text/css">
    <!--
    .style3 {color: #987654; margin: 1;}
    .style6 {font-size: 8pt}
    -->
    </style>'; echo "\n\n";
    
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) //може и без цикъл, но така ги правя аз
    {
    
    echo "<h1 class=\"style3\">{$row['art_name']}</h1> \n";
    echo "<span class=\"style6\">Публикувано на: {$row['art_date']}г. </span><br /> \n";
    echo "<p> \n{$row['art_txt']} \n</p> \n ";
    
    
    }
    ?>

    article_list.php – изкарва без никакво форматиране написаните статии и линкове към тях

    <?php
    /*
    Александър Станоев
    АлексСофт
    alexsoft-bg.com
    */
    //mysql connection
    $dbhost = 'localhost';
    $dbuser = 'ODBC';
    $dbpass = '';
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('mysql error');
    
    $dbname = 'articles';
    mysql_select_db($dbname);
    
    $query = "SELECT * FROM article";
    $result = mysql_query($query);
    
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
    
    echo "<a href=\"a/article/view/{$row['id']}/index.html\">{$row['art_name']}</a><br /> \n"; //използва се rewrite за този адрес
    
    }
    ?>

    Свършихме с потребителската част – файловете по-надолу нямат вградена защита, за това може да ги сложите в паролно защитена директория

    addart.html – формата за написване на статия

    <!--
    Александър Станоев
    АлексСофт
    alexsoft-bg.com
    -->
    <body bgcolor="gray">
    <title>Add article</title>
    <form action="addart.php" name="editform" method="post" onsubmit="return checkForm(this)">
    <table>
    <tr> <td colspan="2"><pre> [i] [u] [quote] [quote=someone] [url] [url=someurl] [img] [color=fontcolor] [size=fontsize] [code ] </pre></td></tr>
    <tr> <td>Category id</td><td><input type="text" name="cat" value="1"></td></tr>
    <tr><td>Title</td><td><input type="text" name="title"></td></tr>
    <tr><td>Date</td><td><input type="text" name="forms"></td></tr>
    <tr><td>Text</td><td><textarea name="contents" rows="7" cols="40" class="form_elements_text">content here</textarea></td></tr>
    <tr><td colspan="2"><input type="submit" value="Add article"></td></tr>
    </table>
    </form>
    <script language="Javascript">
    <!--
    // please keep these lines on when you copy the source
    // made by: Nicolas - http://www.javascript-page.com
    
    var today = new Date()
    var month = today.getMonth() + 1
    var day = today.getDate()
    var year = today.getFullYear()
    var s = "."
    
    document.editform.forms.value = day + s + month + s + year
    //-->
    </script>
    </body>

    идеята за датата е да може да промените кога е публикувана статията
    ами за категориите – бях замислил скрипта по друг начин и това остана от стария вариант – не се ползва никъде

    addart.php – обработва данните от предишния файл

    <?php
    /*
    Александър Станоев
    АлексСофт
    alexsoft-bg.com
    */
    //mysql connection
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('mysql error');
    
    $dbname = 'articles';
    mysql_select_db($dbname);
    
    //bbcode
    function bbcode($text){
    $text=preg_replace("/\[b\](.+?)\[\/b\]/s", '<b>$1</b>',$text);
    
    $text=preg_replace("/\[i\](.+?)\[\/i\]/s", '<i>$1</i>',$text);
    
    $text=preg_replace("/\[u\](.+?)\[\/u\]/s", '<u>$1</u>',$text);
    
    $text=preg_replace("/\[quote\](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>Quote:</td></tr><tr><td width="100%" style="border:solid 1px black">$1</td></tr></table>',$text);
    
    $text=preg_replace("/\[quote\=(.+?)](.+?)\[\/quote\]/s", '<table cellspacing="1" width="100%" border="0"><tr><td>$1 каза:</td></tr><tr><td width="100%" style="border:solid 1px black">$2</td></tr></table>',$text);
    
    $text=preg_replace("/\[url\](.+?)\[\/url\]/s", '<a href="$1">$1</a>',$text);
    
    $text=preg_replace("/\[url\=(.+?)\](.+?)\[\/url\]/s", '<a href="$1">$2</a>',$text);
    
    $text=preg_replace("/\[img\](.+?)\[\/img\]/s", '<img src="$1" alt="User submitted image" title="User submitted image"/>',$text);
    
    $text=preg_replace("/\[color\=(.+?)\](.+?)\[\/color\]/s", '<span style="color:$1">$2</span>',$text);
    
    $text=preg_replace("/\[size\=(.+?)\](.+?)\[\/size\]/s", '<span style="font-size:$1">$2</span>',$text);
    
    $text=preg_replace("/\[code\](.+?)\[\/code\]/s",'<table cellspacing="1" width="100%" border="0"><tr><td>Code:</td></tr><tr><td width="100%" style="border:solid 1px black">$1</td></tr></table>',$text);
    
    
    
    $text = nl2br($text);
    return $text;
    }
    
    
    $cid = $_POST['cat'];
    $title = $_POST['title'];
    $date = $_POST['forms'];
    $text = $_POST['contents'];
    $text = htmlspecialchars("$text", ENT_QUOTES);
    $text = bbcode("$text");
    
    $query = mysql_query("INSERT INTO article VALUES ('',$cid,'$title','$date','$text')");
    if ($query) {
    echo "Query ok";
    echo "<br /><a href=\"../article_list.php\">All articles</a>";
    } else {
    echo "Query error";
    }
    ?>

    както виждате има само един htmlspecialchars за защита – все пак вие няма да тръгвате да хаквате собствения си сайт, нали Veryhappy

    .htaccess

    Options +FollowSymLinks
    
    RewriteEngine On
    
    #ako niakoga se polzwa kategoriata
    #RewriteRule ^article/(.*)/(.*)/index.html articles.php?cid=$1&aid=$2
    #ako niakoga se polzwa kategoriata
    
    RewriteRule ^article/view/(.*)/index.html articles.php?&aid=$1

    благодарение на това адреса изглежда така: article/view/ид-то/index.html
    за този код благодаря на AlekoBG от този форум Smile

    както виждате това е много проста система и има доста неща за дооправяне
    за момента ббкод-а се пише на ръка в формата за добавяне

    Урока е авторски и ви моля да запазите трита реда отгоре на всеки файл ако ви е свършил работа скрипта просто за да ги има Veryhappy

    Оставете коментар