Сегодня нашей целью будет создание простенькой системы новостей. Мы не будем использовать базу данных. Всю информацию мы будем хранить в текстовом файле. Также мы создадим отдельную HTML страничку с формой, в которую мы будем вводить новости и защитим эту страничку паролем.

Для начала давайте создадим простую HTML форму для ввода наших новостей. Она будет иметь 3 текстовых поля. Первое поле давайте назовём headline. Оно будет содержать название новости. Второе поле назовём text, и будем помещать туда текст самой новости. Третье поле будет называться password. Теперь давайте посмотрим как должен выглядеть код нашей формы:

< FORM ACTION="< ?=$PHP_SELF?>" METHOD="POST" NAME="ad_news">
Заголовок:< BR>
< INPUT TYPE="text" SIZE="30" NAME="headline">< BR>
Текст новости:< BR>
< TEXTAREA NAME="text" COLS="40" ROWS="5">< /TEXTAREA>< BR>< BR>
Пароль:< BR>
< INPUT TYPE="password" SIZE="30" NAME="password">< BR>
< INPUT TYPE="submit" NAME="submit" VALUE="Добавить!"> < BR>
< /FORM> 

Проверка полей формы
Хорошо, теперь у нас есть форма для ввода новостей. Теперь нам нужно поместить эти новости в текстовый файл. Прежде чем сделать это, давайте для сначала проверим была ли наша форма правильно заполнена. Первое что для этого нужно сделать это проверить была ли нажата кнопка "Добавить". Для этого воспользуемся массивом $HTTP_POST_VARS в который после нажатия кнопки "Добавить" автоматически будут помещены переменный из нашей формы.

< ?PHP
if($HTTP_POST_VARS['submit'])
{
    echo "Форма успешно обработана";
}
?>

Если привёдённое выше условие истина, значит кнопка submut была нажата и массив $HTTP_POST_VARS содержит значения полей нашей формы. Далее проверим совпадает ли пароль введённый в форме с нашим секретным паролем.

< ?PHP
if($HTTP_POST_VARS['submit'])
{
    if($HTTP_POST_VARS['password'] == 'mysecretpassword')
	{
        echo "Форма успешно обработана";
    }
	else
	{
        echo "Неверный пароль";
    }
}
?>

Следующим нашим шагом будет проверка на то содержат ли другие два поля введённую пользователем информацию. Приведённый ниже код показывает как это сделать.

< ?PHP
if($HTTP_POST_VARS['submit'])
{
    if($HTTP_POST_VARS['password'] == 'mysecretpassword')
    {
        if(!$HTTP_POST_VARS['headline'])
        {
            echo "Вы должны ввести заголовок новости";
            exit;
        }
        if(!$HTTP_POST_VARS['text'])
        {
            echo "Вы должны ввести текст новости";
            exit;
        }
        echo "Форма успешно обработана";
    }
    else
    {
        echo "Неверный пароль";
    }
}
?>

Последнее что нам нужно сделать перед записью новости в файл это проверить не содержит ли информация, введённая в поля формы символ "|". Дело в том, что когда мы будем записывать данные в файл, мы будем записывать каждую новость отдельной строкой, а разделителем полей формы в этой строке как раз и будет символ "|".

< ?PHP
if($HTTP_POST_VARS['submit'])
{
    if($HTTP_POST_VARS['password'] == 'mysecretpassword')
    {
        if(!$HTTP_POST_VARS['headline'])
        {
            echo "Вы должны ввести заголовок новости";
            exit;
        }
        if(!$HTTP_POST_VARS['text'])
        {
            echo "Вы должны ввести текст новости";
            exit;
        }
        if(strstr($HTTP_POST_VARS['headline'],"|"))
        {
            echo "Заголовок не должен содержать символ - |";
            exit;
        }
        if(strstr($HTTP_POST_VARS['text'],"|"))
        {
            echo "Текст не должен содержать символ - |";
            exit;
        }
        echo "Форма успешно обработана";
    }
    else
    {
        echo "Неверный пароль";
    }
}
?>

Запись информации в файл
Теперь, когда мы убедились что данные в форме содержат именно то, что нам нужно преступим к сохранению полей формы в текстовый файл. Первое что нам нужно сделать это открыть наш текстовый файл для записи. Для этого воспользуемся функцией fopen().

< ?PHP
$fp = fopen('news.txt','a');
if(!$fp)
{
    echo "Ошибка открытия файла!";
    exit;
}
?>

Вот мы и открыли файл news.txt находящийся в той же директории что и запущенный нами скрипт. 'a' - означает что мы будем добавлять новую информацию в конец файла если он уже существует на диске если же нет, то будет создан новый файл.

Затем нам нужно построить строку, которую мы хотим поместить в файл. Для этого нам понадобится дата добавления новости и информация, введённая в форму. Также давайте в полученной нами строке заменим все переводы строки на HTML тэг
с помощью функции str_replace().

< ?PHP
$line = date("m.d.y") . "|" . $HTTP_POST_VARS['headline'];
$line .= "|" . $HTTP_POST_VARS['text'];
$line = str_replace("rn","",$line);
$line .= "rn";
?> 

Всё теперь наши новости заносятся в текстовый файл. Давайте поместим все это вместе и посмотрим, что у нас получилось.

< ?PHP 

//Поместите этот код в один файл и назовите его addnews.php

if($HTTP_POST_VARS['submit'])
{
    if($HTTP_POST_VARS['password'] == 'mysecretpassword')
    {
        if(!$HTTP_POST_VARS['headline'])
        {
            echo "Вы должны ввести заголовок новости";
            exit;
        }
        if(!$HTTP_POST_VARS['text'])
        {
            echo "Вы должны ввести текст новости";
            exit;
        }
        if(strstr($HTTP_POST_VARS['headline'],"|"))
        {
            echo "Заголовок не должен содержать символ - |";
            exit;
        }
        if(strstr($HTTP_POST_VARS['text'],"|"))
        {
            echo "Текст не должен содержать символ - |";
            exit;
        }
        $fp = fopen('news.txt','a');
        if(!$fp)
        {
            echo "Ошибка открытия файла!";
            exit;
        }
        $line = date("m.d.y") . "|" . $HTTP_POST_VARS['headline'];
        $line .= "|" . $HTTP_POST_VARS['text'];
        $line = str_replace("rn","< BR>",$line);
        $line .= "rn";
        if(!fclose($fp))
        {
            echo "Ошибка закрытия файла!";
            exit;
        }
        echo "Форма успешно обработана";
    }
    else
    {
        echo "Неверный пароль";
    }
}
?>
< FORM ACTION="< ?=$PHP_SELF?>" METHOD="POST" NAME="ad_news">
Заголовок:< BR>
< INPUT TYPE="text" SIZE="30" NAME="headline">< BR>
Текст новости:< BR>
< TEXTAREA NAME="text" COLS="40" ROWS="5">< /TEXTAREA>< BR>< BR>
Пароль:< BR>
< INPUT TYPE="password" SIZE="30" NAME="password">< BR>
< INPUT TYPE="submit" NAME="submit" VALUE="Добавить!"> < BR>
< /FORM> 

Отображение Новостей
Итак, мы добились того, что информация вводимая в HTML форму браузера сохраняется в текстовом файле. Теперь всё что нам нужно это показать эти новости пользователям нашего сайта. Для этого нам нужно поместить содержимое файла в массив. Затем, поскольку новая информация находится в конце массива, нам нужно инвертировать массив при помощи функции array_reverse(). Далее разделить нашу строку на составные части, чтобы выделить отдельные поля формы и вывести всё это на экран.

Сначала занесём данные из файла в массив. Для этого мы используем функцию file(). Эта функция построчно считывает файл и заносит каждую строку в массив как отдельный элемент.

< ?PHP
$data = file('news.txt');
?> 

Так как новые новости у нас добавлялись в конец файла, нам нужно инвертировать массив чтобы самая последняя новость находилась в начале массива.

< ?PHP
$data = file('news.txt');
$data = array_reverse($data);
?>

Теперь, когда мы получили данные из файла нам нужно разделить каждую строку на дату, заголовок и на текст новости. Для этого нам понадобится функция explode(). Которую мы будем запускать в каждом повторе цикла, пока не переберём все элементы массива.

< ?PHP
$data = file('news.txt');
$data = array_reverse($data);
foreach($data as $element)
{
    $element = trim($element);
    $pieces = explode("|", $element);
    echo $pieces[0] . "< BR>" . "< b>" . $pieces[1] . "< /b>< BR>" .
	$pieces[2] . "< BR>< BR>";
}
?>  

В этом примере функция trim() использована, чтобы удалить признак конца
строки из всех элементов массива.
Ну, вот и всё, теперь помещайте этот код в любом месте вашей странички и наслаждайтесь
результатом



Постоянные ссылки

При копировании ссылка на TeaM RSN обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.