Система за статии с bbcode
Това е поредния скрипт, който си написах за уеб-страницата и реших да го пусна като урок
Това е много проста система за статии използваща 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










/ Трябва да сте регистриран за да напишете коментар /
От: MARIJUANA48
12:48 30-07-2010
Видях че има и одебелен текст но като напиша [b]несто[/b] не е одебелен после. Зашто така ?
От: dirwns
6:26 16-12-2010
Определено е добър,но не мисля,че е много полезно да поставяш връзка към база данни с парола и юзер във тези файлове
1