Пишем новостную ленту, с удобной админкой при помощи php & mysql
(Скрипты будут взаимодействовать с форумом vBulletin 3.5.3).
Ну чтож приступим, сначала представим себе как это будет выглядеть на деле:
- скрипт вывода новостей на страницу
- скрипт добавления новостей
- скрипт редактирования\удаления статей
- отдельный модуль конекта к базе данных
- модуль защиты, фильтрация всего - что плохо ;)


Для начала подумаем над структурой таблицы новостей у меня получилось что то типа этого:
CREATE TABLE mytable(
id bigint(20) auto_increment,        //id новости                                     
body text,                                     //"тело" новости 
time text,                                     //время добавления
hide int(6) default null,               //0 - открыта, 1- закрыта,это на той случай если замучает ностальгия 
;)
prior int(6) default null,              //приоритет новости, до этого я тока додумался, кароче бут: если 
приор 1 то будет выводится всегда по верх всего сверху а 0 это просто новость,но это уже каму 
как
PRIMARY KEY(id));                     

Структура таблицы готова теперь напишем модуль конекта к базеданных, тут все просто как жопа:

<?
//имя скрипта  - dbcon.php 
$dblocation='ссылка на ваш сайт';
$dbname='база данных';
$sqluser='логин';
$sqlpass='пароль';

if(!$dbcn=@mysql_connect($dblocation,$sqluser,$sqlpass)){

        echo 'Не удается подключиться к серверу!';
        exit();

}else{

         if(!@mysql_select_db($dbname,$dbcn)){

                    echo 'Нет такой базы данных!';
                    exit();
         }
}
?>

Его нужно совать во все файлы которые работают с сервером mysql.

Дальше скрипт добавления новостей:

<?
//имя скрипта - add.news.php
include 'dbcon.php';   //сод. этого файла выше
include 'func.php';      //сдесь функции для скриптов,юз. только функц. cutty, для фильтрации

chdir('vBulletin353/'); //переходим в каталог с форумом для успешного инклудинга жизнено 
необходимого файла global.php
require_once('global.php');
require_once('inc.slogin.php'); // скрипт авторизации !!! будет рассмотрен ниже

chdir('../');                  //возвращаемся обратно


             echo '<table><tr>';
             echo '<td><a hrefн.re-news.php>Листинг, удаление\редактирование</a></td>'; 
             echo '</tr></table>';


//ниже идет форма для добавления новости
echo '<table>';
echo '<form action­d.news.php method=get>';
echo '<tr><td>add-news</td></tr>';
echo '<tr><td><input type=text name=body></td></tr>';
echo '<tr><td><input type=submit name­d value="add"></td></tr></td></tr>';
echo '</form>';
echo '</table>';


//события при нажатии кнопки add

@$add=cutty($_GET['add']);
@$body=cutty($_GET['body']);

if($add){

//если поле "тело" пусто, то грязно материмся
   if($body == ""){

       echo '<table><tr>';
       echo '<td>Напиши что-нибудь</td>\n'; 
       echo '</tr></table>\n';

      echo '<meta http-equiv="refresh" content="1; url­d.news.php">';
      exit();

   }

//далее записываем переданные параметры в таблицу

         $dateЪte("m.d.y");

         if(mysql_query("INSERT INTO mytable VALUES('','".$body."','".$date."','')")){

             echo '<table><tr>';
             echo '<td>Новость добавлена</td>'; 
             echo '</tr></table>';

                   echo '<meta http-equiv="refresh" content="1; url­d.news.php">';

//усё, записали, возвращаемся в зад

 }
}
?>

Вобщем как всегда форма и обработчик, мог бы и сам=)
Дальше больше бум выводить, редактировать, удалять ненавистные новости


<?
//имя скрипта - ed.re-news.php
include 'dbcon.php';  //ну вобщем все тоже
include 'func.php';

chdir('../../vBulletin/');
require_once('global.php');
require_once('inc.slogin.php');

chdir('../iostream/inc/');


@$do=cutty($_GET['do']);
@$id=cutty($_GET['id']);

//########list news#####
if($do!='rem' || $do!='edit'){


             echo '<table><tr>';
             echo '<td><a hrefн.re-news.php>Добавить новость</a></td>'; 
             echo '</tr></table>';

//листинг новостей,форма

   echo "<table>";
   echo "<form actionн.re-news.php method=get>";

//выдираем все "открытые" новости
   $order=mysql_query("SELECT * FROM mytable WHERE hide=0");

         while($desk=mysql_fetch_array($order)){

//дальше будет скрипт вывода новостей в виде галка(пометить нужное и удалить) и тело 
письма(см. ниже)
                echo "<tr><td><input type=checkbox name='box[]' value=".$desk['id']."></td>
                                 <td><a hrefн.re-news.php?doнit&id=".$desk['id'].">"; 
//чтобы не засирать эран всякой хуйней сделаем вывод первых 30-ти символов 
                                      for($i=0;$i<30;$i++){
                                          echo $desk['body'][$i];
                                     }
                                  echo "</a></td></tr>";
           }

   echo "<tr><td></td><td>";
   echo "<input type=submit name=remove value='remove'></td></tr>";
   echo "</td></tr>";




//#####if $doнit#############
}elseif($do=='edit'){

//если адрес выглядит типа ed.re-news.php?doнit&id=6 и переменная do имеет значение edit то:


           $mq=mysql_query("SELECT body FROM mytable WHERE hide=0 AND id=$id");
             while($mfa=mysql_fetch_array($mq)){

//выдираем инфу о новости и загоняем значение столбца body где id=$id и hide=0 тоесть открыта

                   echo '<table>';
                   echo '<form actionн.re-news.php method=get>';
                   echo '<tr><td><textarea name=body 
style="width:300px;height:95px">'.$mfa['body'].'</textarea></td></tr>';
                   echo '<tr><td><input type=submit nameнit valueнit>';
                   echo '<input type=submit name=rem value=remove></td></tr>';
                   echo '<input type=hidden name=hid value='.$id.'>';
           }
//########if do=rem##########
}elseif($do=='rem'){

//если адрес выглядит типа ed.re-news.php?do=rem&id=6 и переменная do имеет значение rem то:

    mysql_query("UPDATE mytable SET hide=1 WHERE id=".$id."");

//удаляем в жопу эту новость а точнее делаем ее невидимой для юзеров

             echo '<table><tr>';
             echo '<td>Новость успешно удалена</td>'; 
             echo '</tr></table>';

                   echo '<meta http-equiv="refresh" content="1; urlн.re-news.php">';

}

//#########edit###########
if(@$edit=cutty($_GET['edit'])){
//если кто то дрочил кнопку edit:

    @$ebody=cutty($_GET['body']);
    @$hid=cutty($_GET['hid']);

    mysql_query("UPDATE mytable SET body='".$ebody."' where id=".$hid."");

             echo '<table><tr>';
             echo '<td>Новость успешно редактирована</td>'; 
             echo '</tr></table>';

                   echo '<meta http-equiv="refresh" content="1; urlн.re-news.php">';

}
//#########remove#########
if(@$rem=cutty($_GET['rem'])){
//если кто то дрочил кнопку remove  в форме редактирования:

    @$hid=cutty($_GET['hid']);

    mysql_query("UPDATE mytable SET hide=1 WHERE id=".$id."");

             echo '<table style="width:310px;height:10px"><tr>';
             echo '<td class=s10>Новость успешно удалена</td>'; 
             echo '</tr></table>';

                   echo '<meta http-equiv="refresh" content="1; urlн.re-news.php">';

}

//########remove mooore######
if(@$remove=cutty($_GET['remove'])){
//если кто то дрочил кнопку remove  в форме вывода:

         foreach ($_GET['box'] as $val) {

                 if($val==''){

                      echo 'Блять выбери что-нибудь,сука';

                  }else{ 

           mysql_query("UPDATE mytable SET hide=1 WHERE id='$val'");

                 }

       }

             echo '<table><tr>';
             echo '<td>Новость(и) успешно удалена(ы)</td>'; 
             echo '</tr></table>';

   echo '<meta http-equiv="refresh" content="1; urlн.re-news.php">';


}

Уфф,вот это было удаление,редактирование,листинг.Теперь осталось немного модуль 
фильтрации и авторизации

<?
function cutty($string)
        {
        $string = str_replace ("<", "<", $string);
        $string = str_replace (">", ">", $string);
        $string = str_replace ('\\\"', "", $string);
        $string = str_replace ("\\\'", "", $string);
        $string = str_replace ("\r", "", $string);
        $string = str_replace ("\n", "<br>", $string);
        $string = str_replace ("%", "", $string);
        $string = str_replace ("^", "", $string);
        $string = str_replace ("*", "", $string);
        $string = str_replace ("$", "", $string);
        $string = str_replace ("@", "", $string);
        $string = str_replace ("#", "", $string);
        $string = str_replace ("|", "", $string);
        $string = str_replace ("+'+", "", $string);
        $string = str_replace ('+"+', '"', $string);
        $string = str_replace ("--", " ", $string);
        $string = str_replace (" \ ", "", $string);
        $string = str_replace ("/*", "", $string);
        $string = str_replace ("-", "", $string);
        $string = str_replace ("'", "", $string);
        $string = str_replace ('"', "", $string);
        return ($string);
        }
?>
Я его решил урезать,не надо же все таки раскрывать всех секретов ;)

Скрипт авторизации:

<?
chdir('vBulletin353/');
require_once('global.php');

chdir('../');
//Всю проверку авторизации я перекладываю на форум это кнешно  плюс,но и все таки минус...

if($vbulletin->userinfo['userid']){ //проверка аторизации

 $a=mysql_query("select usergroupid,username from user where 
userid=".$vbulletin->userinfo['userid']." "); //таблица форума с одеражщая инфу о юзерах
   while($arr=mysql_fetch_array($a)){

$admn="root";

     if($arr['usergroupid']==6 && $arr['username']==$admn){ //если usergroupid юзера с 
$vbulletin->userinfo['userid'] равен 6 и имя юзера равно root(сам ставь че там у тя) то гуд а если нет 
то мы тут просто гости

      $i=mysql_query("select username,posts from user where userid='$id' ");

               while($inf=mysql_fetch_array($i)){

                    echo "<table><tr>";
                    echo  "<td class=s10>Добро пожаловать, ".$inf['username']." | ";
                    echo "<a href=\"login.php?" . $GLOBALS['vbulletin']->session->vars['sessionurl'] . 
"do=logout&logouthash=" . $GLOBALS['vbulletin']->userinfo['logouthash'] . "\" 
>Выход</a></td></tr></table>";
              //login.php файл форума,лежит в корне
}
   
     }else{


                echo "<table>";
                echo "<tr><td >Доступ запрещен!</td></tr>";
                echo "</table>";
                echo '<meta http-equiv="refresh" content="1; url=index.php">';
                exit();


    }         //close 'if'

  }           //close 'while'

}elseif($vbulletin->userinfo['userid']==""){

                echo "<table>";
                echo "<tr><td>Доступ запрещен!</td></tr>";
                echo "</table>";
                echo '<meta http-equiv="refresh" content="1; url=index.php">';
                exit();

                       echo '<form action="login.php" method="post">';
                       echo '<table><tr>';
                       echo '   <td>Имя</td>';
                       echo '   <td><input type="text" name="vb_login_username" value="Имя" /></td>';
                       echo '   <td><input type="checkbox" name="cookieuser" value="1" 
>Запомнить?</label></td>';
                       echo '</tr>';

                       echo '<tr>';
                       echo '   <td>Пароль</td>';
                       echo '   <td><input type="password" name="vb_login_password"/></td>';
                       echo '   <td><input type="submit" value="Вход" /></td>';
                       echo '</tr>';

                       echo '</table>';
                       echo '<input type="hidden" name="s" value="" />';
                       echo '<input type="hidden" name="do" value="login" />';	
                       echo '<input type="hidden" name="vb_login_md5password" />';
                       echo '<input type="hidden" name="vb_login_md5password_utf" /></form>';
                    exit();

			
}?>

На деле все получается очень удобно и красиво=)