Система за статии с 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


