[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Новостной скрипт
<?php
Дорогие форумчане вот новостной скрипт написал, но не смог его закончить
Помогите мне сделать Редактирование и Удаление.И защитить админ панель, а то сам пробовал Ошибки выдает)
Вот admin.php
PHP
<form action="" method="post">
  <br/><b>Заголовок:</b><br/><input type="text" name="title">
 <br/><b>Новость:</b><br/> <br/> <textarea  no wrap rows=25 cols=75 name="body"></textarea><br/>
 <input type="submit" name="submit" value="Отправить" />
  </form>


<?
$date=date('Y-m-d [H:i]');
$handle = fopen ("text.txt", "ab");
$title = trim( $_POST['title']);
$body = trim( $_POST['body']);
$text = "<br/><b>Заголовок:</b> <br>$date</br> $title <br/> <b>Текст:</b> $body";
if ( fwrite ( $handle,$text) ==FALSE)
{
echo "Новость Добавлена!";
}
else
{
echo '<a href="show.php">Посмотрть Новости</a>';
}

fclose ($handle);


А здесь выводятся новости
show.php
PHP
<? print"<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\"/>"; ?>
<?
$handle 
= fopen ("text.txt", "r");
while ( ! feof ($handle))
{

$text = fgets ($handle);
  

echo $text
,"<BR>";
}
fclose ($handle);<




Спустя 14 минут, 29 секунд (3.07.2009 - 19:22) Krevedko написал(а):
PHP
if ( fwrite $handle,$text) ==FALSE)
{
echo 
"Новость Добавлена!";


наверное все-таки == true

Спустя 1 минута, 23 секунды (3.07.2009 - 19:23) <?php написал(а):
а какая разница между ними? и еще спасибо, что помог написать скрипт wink.gif

Спустя 4 минуты, 5 секунд (3.07.2009 - 19:27) Krevedko написал(а):
и еще
$setcookie = ($_COOKIE)

; нет

Спустя 2 минуты, 4 секунды (3.07.2009 - 19:29) <?php написал(а):
)) это я пробовал сессиями сделать куки использовать.)

Спустя 3 часа, 26 минут, 1 секунда (3.07.2009 - 22:55) Shurick написал(а):
вот функция редактирования... правда давно я текстовые файлы использовал. возможно что поправить в коде необходимо, но работал он исправно

PHP
function edit_news($date, $id, $author, $subject,  $short_message, $full_message)

{
    if ($short_message == "")
    return;


    if ($full_message != FALSE){$link = 1;}
    else {$link = 0;}

        $old_news = file(__NEWS_NAME__);
        $new_news = fopen(__NEWS_NAME__, "w");
        foreach($old_news as $news_line){
        $news_arr = explode("|", $news_line);
        if($news_arr[1] == $id){
        fwrite($new_news, "$date|$id|$author|$subject|$short_message|$link\r\n");
        }else{
        fwrite($new_news, "$news_line");
        }}

        if ($full_message != FALSE){
        $full_news = fopen(__NEWS_PATH__ . $id . "_news.txt", "ab");
        fputs($full_news, "$date|$id|$author|$subject|$full_message\r\n");
        fclose($full_news);
    }
}


фот функция удаления

PHP
$old_news_file = file(__NEWS_NAME__);
            $new_news_file = fopen(__NEWS_NAME__, "w");
            foreach($old_news_file as $old_news_line){
            $old_news_line_arr = explode("|", $old_news_line);
            if($id != $old_news_line_arr[1])
            {fwrite($new_news_file, $old_news_line);}
            else{$deleted = TRUE; $user = $old_news_line_arr[2];}

            unlink(__NEWS_PATH__ . $id . "_news.txt");

           }


функция добавления

дату ставил первой для коректной сортировки

PHP
function add_news($date, $author, $subject,  $short_message, $full_message)

{
    if ($short_message == "")
    return;

    $filename = rand(10000, 99999);
    if ($full_message != FALSE){$link = 1;}
    else {$link = 0;}

    $fp = fopen(__NEWS_NAME__, "ab");
    fputs($fp, "$date|$filename|$author|$subject|$short_message|$link\r\n");
    fclose($fp);

    if ($full_message != FALSE){
    $fp = fopen(__NEWS_PATH__ . $filename . "_news.txt" , "wb");
    fputs($fp, "$date|$filename|$author|$subject|$full_message\r\n");
    fclose($fp);
    }
}


Правда форма записи в текстовый документ может отличаться


Для авторизации использовал текстовый документ - CONFIG.txt, где хранились пароль и логины админов... если более опытные товарищи не помогут - покапаюсь

Спустя 19 минут, 27 секунд (3.07.2009 - 23:15) Shurick написал(а):
Ток вот как я заметил, и скорее всего это правльно, тут не помогают заканчивать скрипты. надобно предоставить свои наработки и тебя выведут на путь истинный

Спустя 25 минут, 54 секунды (3.07.2009 - 23:41) twin написал(а):
Цитата
вот функция редактирования

Вот тут лучше сделать так, от греха
PHP
function edit_news($date$id$author$subject,  $short_message$full_message false)

Файлы желательно блокировать, особенно если юзаешь w

Цитата
фот функция удаления

Вот это
PHP
if ($short_message == "")

красивее так
PHP
if (empty($short_message ))

хотя это косметика
Цитата
функция добавления

Вот этого момента я вообще не понял
PHP
$filename rand(1000099999);


А в общем и целом вполне.


Спустя 20 минут, 45 секунд (4.07.2009 - 00:02) Shurick написал(а):
PHP
$filename = rand(10000, 99999);


Эт я генерирую ИД строки по которому в дальнейшем ищу ее для редактирования или удаления или для отображения полной версии новости. Развернутый вид новостей записываю в отдельный текстовый документ (кто знает какие у кого новости, возможно там будет целый сочинение. вот для того что бы не нагружать один документ решил вынести его в отдельный файл, который тоже имеет уникальный ид).


Спустя 24 минуты, 11 секунд (4.07.2009 - 00:26) twin написал(а):
Нет, это то я как раз понял. Я не понял другого.
Ты таким образом пытаешься сгенерить уникальное число. Но ведь совпадения не просто возможны, а очень возможны. Что недопустимо при генерации идентификаторов. Юзай лучше time() или date('U'), это никогда не повторится. Время к сожалению назад не вернуть...

Спустя 10 часов, 26 минут, 46 секунд (4.07.2009 - 10:53) <?php написал(а):
Ребят, а вот этих переменных же у меня нету в скрипте...мне их дописать в скрипт? или же переделать эти...
PHP
$id$author$subject,  $short_message


Спустя 8 минут, 51 секунда (4.07.2009 - 11:01) twin написал(а):
Что значит нету в скрипте?

Спустя 2 минуты, 20 секунд (4.07.2009 - 11:04) <?php написал(а):
В новостном скрипте первый пост посмотри там таких переменных нету...
у меня вот эти.
PHP
$title,$body,$date,

Может быть я, что-то несовсем понял...

Спустя 4 минуты, 48 секунд (4.07.2009 - 11:09) twin написал(а):
А, вона чё. Я чесно говоря особо не вникал. Ты хочешь слепить из двух один.
То есть еще ничего не работает... Тогда вопрос. А почему на файлах, а не с базой? Для чего жизнь себе усложняешь?

Спустя 3 минуты, 39 секунд (4.07.2009 - 11:12) <?php написал(а):
Цитата (twin @ 4.07.2009 - 08:09)
А почему на файлах, а не с базой? Для чего жизнь себе усложняешь?

Понимаешь, нужно же когда нибудь попробовать и трудное в этой жизни, так как, жизнь не легкая штука)
И простой ответ) большинство Хостов не предоставляют MySQL

Спустя 15 минут, 58 секунд (4.07.2009 - 11:28) Krevedko написал(а):
что ж непонятного
У него
Цитата
$id (видимо для нумерации новостей...хотя если новость удалять, то будет дырка 0_О), $author (автор), $subject (вместо твоего тайтл),  $short_message (короткое сообщение),

а у тебя
Цитата
$title,$body,$date

Или добавь себе поля или убери у него в коде.

Спустя 5 минут, 30 секунд (4.07.2009 - 11:34) <?php написал(а):
Спасибо всем за помощь. Ребят, а вот чем защитить админпанель? JavaScript?

Спустя 7 минут, 2 секунды (4.07.2009 - 11:41) twin написал(а):
Цитата
большинство Хостов не предоставляют MySQL

да... впервые слышу. Ну дело хозяйское конечно.
Тогда тебе лучше не так начинать, а по порядку. Сначала определиться с выводом. У тебя это сделано не очень красиво. Я бы посоветовал хранить новости в отдельных файлах, по одному на новость. Иначе файл может так разрастись, что и открыть его будет проблема. А так старые можно спокойно удалять либо архивировать. По этой схеме гораздо легче сделать постраничку и поиск.

Спустя 2 минуты, 42 секунды (4.07.2009 - 11:43) <?php написал(а):
А если сделать для каждого новостя 1 файл представь сколько файлов будет если дать 10000 новостей) мне бы еще автоматическу архивацию реализовать...

Спустя 14 минут, 14 секунд (4.07.2009 - 11:58) twin написал(а):
Цитата
представь сколько файлов будет если дать 10000 новостей

А ты представь какой это будет файл. И грузиться он будет весь, при каждом вызове страницы. Ты сожрешь сервер.

Цитата
мне бы еще автоматическу архивацию реализовать...

Ну а в чем проблема...

Спустя 1 час, 1 минута, 30 секунд (4.07.2009 - 12:59) <?php написал(а):
Цитата
А ты представь какой это будет файл. И грузиться он будет весь, при каждом вызове страницы. Ты сожрешь сервер.


согласен. Но выхода нет.
Цитата
Ну а в чем проблема...

проблема в знаниях php)

Спустя 3 минуты, 29 секунд (4.07.2009 - 13:03) twin написал(а):
Цитата
Но выхода нет.

Даже если тебя съели, всегда есть два выхода.
Цитата
проблема в знаниях php)

Вот и надо решать эту проблему, а не лепить из горбатого.
Вот это посмотри, потом на много легче будет.

Спустя 12 минут, 55 секунд (4.07.2009 - 13:16) <?php написал(а):
Спасибо за ссылку.Прочитаю попозже.
Может дашь направление как Защитить админ панель? я пробовал так
но не получается...
PHP
<?
if (!isset(
$_SERVER['PHP_AUTH_USER'])) 
  {
     
header('WWW-Authenticate: Basic realm="<Workgroup>"');
     
header('HTTP/1.0 401 Unauthorized');
     echo 
'You press cancel button';   
     exit;
  } 
  else 
  {
     if (
$PHP_AUTH_USER!="admin" and $PHP_AUTH_PW!="admin_paasword"
     {
        echo 
'Access denied';
        die();
     }
  }
  

Спустя 1 минута, 51 секунда (4.07.2009 - 13:17) Xakep написал(а):
Цитата
А если сделать для каждого новостя 1 файл представь сколько файлов будет если дать 10000 новостей


А старые новости зачем нужны? Их же можно удалять.

Спустя 3 минуты, 2 секунды (4.07.2009 - 13:20) twin написал(а):
Зачем удалять? Архив иметь всегда приятнее. Через пару лет посмотрет - чем жил народ.

Спустя 1 минута, 18 секунд (4.07.2009 - 13:22) twin написал(а):
Цитата
Прочитаю попозже.
Может дашь направление как Защитить админ панель?

Зря попозже. Там это есть.

Спустя 4 минуты, 49 секунд (4.07.2009 - 13:27) <?php написал(а):
Я хотел сайт про биржовые новости, а там как раз нужны старые новости даже новости на 3 года 4 года так, что удаление-это не решение проблемы)

Спустя 2 минуты, 19 секунд (4.07.2009 - 13:29) PandoraBox2007 написал(а):
PHP
<?
if (!isset(
$_SERVER['PHP_AUTH_USER'])) 
  {
     
header('WWW-Authenticate: Basic realm="<Workgroup>"');
     
header('HTTP/1.0 401 Unauthorized');
     echo 
'You press cancel button';   
     exit;
  } 
  else 
  {
     if (
$PHP_AUTH_USER == "admin" && $PHP_AUTH_PW == "admin_paasword"
     {
        echo 
'<h1>Successfully Authentication</1>';
     } else {
        echo 
'Access denied';
        die();
     }
     
// продолжение действий если аунтификация прошла успешно...
  
}

Спустя 2 минуты, 34 секунды (4.07.2009 - 13:31) <?php написал(а):
Цитата
Зря попозже. Там это есть.


Я посмотрел там, гостевую книгу делают с нуля..а с новостным скриптом общее что-то есть.Кроме Формы добавления и обработки..

Спустя 3 минуты, 8 секунд (4.07.2009 - 13:35) <?php написал(а):
PandoraBox2007 , я продолжние написал скрипт Админки, но я временно сделал отдельный скрипт логин и в него внес скрипт Входа, но я даже не набираю захожу в Логин.пхп и на Экране сообщение Access denied это типо если неудачная попытка выводить это или что-то другое?

Спустя 10 минут, 7 секунд (4.07.2009 - 13:45) PandoraBox2007 написал(а):
Цитата (<?php @ 4.07.2009 - 10:35)
Access denied это типо если неудачная попытка выводить это или что-то другое?

да пробуй добавить в самое начало кода или в .htaccess файл закрепить

Спустя 6 минут, 6 секунд (4.07.2009 - 13:51) Xakep написал(а):
Цитата
Зачем удалять? Архив иметь всегда приятнее. Через пару лет посмотрет - чем жил народ.

ну...кому как...

Спустя 1 час, 11 минут, 5 секунд (4.07.2009 - 15:02) <?php написал(а):
Вот написал так, но админ и пароль почему-то Любой можно писать и он заходит...В чем может быть проблема?
PHP
<?
if (!isset(
$_SERVER['PHP_AUTH_USER'])) 
  {
     
header('WWW-Authenticate: Basic realm="<Workgroup>"');
     
header('HTTP/1.0 401 Unauthorized');
     echo 
'You press cancel button';   
     exit;
  } 
  else 
  {
     if (
$PHP_AUTH_USER!="admin" and $PHP_AUTH_PW!="admin_paasword"
     {
?>
    <html>
       <form action="" method="post">
  <br/><b>Заголовок:</b><br/><input type="text" name="title">
 <br/><b>Новость:</b><br/> <br/> <textarea  no wrap rows=25 cols=75 name="body"></textarea><br/>
 <br/><b>Тема:</b>
 <select name="menu" id="menu">
   <option value="ABS">ABS. Amerika X?b?rl?ri</option>
   <option value="Kanada" selected>Kanada x?b?rl?ri </option>
   <option value="Isverc?">Isverc? x?b?rl?ri</option>
   <option value="Az?rbaycan">Az?rbaycan x?b?rl?ri</option>
 </select>
 <br/> <p>
   <input type="submit" name="submit" value="Отправить" />
  <input type="reset" name="reset" value="Сброс" />
  </form>
</html>

<?
$date
=date('Y-m-d [H:i]');
$handle fopen ("text.txt""ab");
$title trim$_POST['title']);
$body trim$_POST['body']);
$select trim($_POST['select']);
$text "<br/><b>Заголовок:</b> <br>$date</br> $title <br/>$select<br/> <b>Текст:</b> $body";
if ( 
fwrite $handle,$text) ==FALSE)
{
echo 
"Новость Добавлена!";
}
else
{
echo 
'<a href="show.php">Посмотрть Новости</a>';
}

fclose ($handle);

     }
  }
  

Спустя 16 минут, 46 секунд (4.07.2009 - 15:19) PandoraBox2007 написал(а):
PHP
<?
if (!isset($_SERVER['PHP_AUTH_USER'])) 
{
     header('WWW-Authenticate: Basic realm="<Workgroup>"');
     header('HTTP/1.0 401 Unauthorized');
     echo 'You press cancel button';   
     exit
;
}
 else {
     if ($PHP_AUTH_USER == "admin" && $PHP_AUTH_PW == "admin_paasword") 
     
{?>
    <html>
     <form action="" method="post">
       <br/><b>Заголовок:</b><br/><input type="text" name="title">
       <br/><b>Новость:</b><br/> <br/> <textarea  no wrap rows=25 cols=75 name="body"></textarea><br/>
       <br/><b>Тема:</b>
       <select name="menu" id="menu">
          <option value="ABS">ABS. Amerika X?b?rl?ri</option>
          <option value="Kanada" selected>Kanada x?b?rl?ri </option>
          <option value="Isverc?">Isverc? x?b?rl?ri</option>
          <option value="Az?rbaycan">Az?rbaycan x?b?rl?ri</option>
       </select>
       <br/> <p>
       <input type="submit" name="submit" value="Отправить" />
       <input type="reset" name="reset" value="Сброс" />
     </form>
    </html>
<?
        $date   
= date  ( 'Y-m-d [H:i]'    );
        $handle = fopen ( "text.txt", "ab" );
        $title  = trim  ( $_POST['title']  );
        $body   = trim  ( $_POST['body']   );
        $select = trim  ( $_POST['select'] );
        $text   = "<br/><b>Заголовок:</b> <br>$date</br> $title <br/>$select<br/> <b>Текст:</b> $body";
        if ( fwrite($handle, $text) == FALSE) {
            echo "Новость Добавлена!";
        } else {
            echo '<a href="show.php">Посмотрть Новости</a>';
        }
        fclose ($handle);
     }
}

Спустя 5 минут, 24 секунды (4.07.2009 - 15:24) <?php написал(а):
Нет, что-то не так...набираешь Логин Пароль загружается пустая страница

Спустя 34 минуты, 59 секунд (4.07.2009 - 15:59) twin написал(а):
Проблема в лени. Потому что пытаешься перепрыгнуть через голову, даже не размявшись. Не говоря о тренировках. Ты же совершенно не понимаешь, что пишешь. И советов не слушаешь. держи.

Спустя 13 минут, 18 секунд (4.07.2009 - 16:12) <?php написал(а):
twin , спасибо за совет и постараюсь слушать твои советы smile.gif

Спустя 5 часов, 24 минуты, 57 секунд (4.07.2009 - 21:37) Shurick написал(а):
Цитата (Krevedko @ 4.07.2009 - 08:28)
что ж непонятного
У него
Цитата
$id (видимо для нумерации новостей...хотя если новость удалять, то будет дырка 0_О), $author (автор), $subject (вместо твоего тайтл),  $short_message (короткое сообщение),

а у тебя
Цитата
$title,$body,$date

Или добавь себе поля или убери у него в коде.

Дырок никаких не будет...


а по поводу количества новостей - так у меня их было больше чем 1000 и все работало очень быстро и бесперебойно....

Функция архивации тоже есть, надобно посмотреть. Там все просто.

Но как уже подметили - не стоит прыгать выше своей головы. Нет особой пилюли которая даст тебе все эти знания - все познается только в упорной работе над ошибками. И чем больше ты пользуешься готовыми скриптами тем меньше вообще соображаешь что и как делать.

По поводу переменных которых у тебя нет - советую 10 раз хорошенько подумать и тщательно спланировать свою база, запись и вывод(лучше начинать с вывода, ручками записывать новости в текстовый документ а уж после админку делать).

Спустя 12 минут, 25 секунд (4.07.2009 - 21:50) twin написал(а):
Цитата
а по поводу количества новостей - так у меня их было больше чем 1000 и все работало очень быстро и бесперебойно....

Ну во первых заявлено количество на прядок больше, а именно 10 000. Конечно это гепотетически, но все же. Посчитаем. Твой пост в текстовом файле весит 1.74 kb Умножим на 10 000 и получим больше 17 метров. Теперь умнож эту цифру на посещаемость. И получишь трафик, который сожрет твой скрипт.
Так что...
Оперировать отдельными файлами гораздо проще, чем парсить один большой. Возникнет проблема с разделителями, идентификаторами и куча еще других. А поместить файлы, у которых кончился срок годности в архив - вообще плевое дело. Плюс постраничный режим вывода (я писал уже) и поиск, коли потребуется. Это же сильно все усложняется в одном файле. Удаление, редактирование...
Хотя дело хозяйское.

Спустя 2 минуты, 52 секунды (4.07.2009 - 21:53) Kuliev написал(а):
twin
+100 wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.