Отправляет email-рассылки с помощью сервиса Sendsay

Еженедельник сайтостроителя

  Все выпуски  

Еженедельник сайтостроителя


Подшивка рассылки Обратная связь

№8 28.07.07

Приветствую всех, кому еще не надоело мое брюзжание и тех, кто только собирается начать его читать! Начну с того, что дам ответ любознательному подписчику, чьего имени и почтового адреса я не знаю. Он/она попросил в каждом выпуске выкладывать какие-нибудь примеры кода на Java Script. К моему величайшему сожалению я совершенно не силен в этом языке, во-первых, по тому, что мне это пока не представлялось интересным, а интерес, вероятно, еще не возник по причине сравнительно небольшого опыта и возраста. Но это натолкнуло меня на мысль о том, что пора бы нам немного попрактиковаться. Почему бы ни разобрать скрипт более близкой мне сферы? Итак, сегодня соберем по частям и заставим работать полезную для многих вещь - скрипт для публикации статей на сайте.

Какие должны быть требования для нашей нехитрой программы? Во-первых, должна быть форма для ввода текста статьи. Во-вторых, неплохо бы, чтобы в тексте можно было заменять HTML-символы на их эквиваленты, чтобы знаки <, >, "" и т.п. выглядели сами собой. Предлагаю идти по пути наименьшего сопротивления и записывать каждую статью в отдельный текстовый файл. Так мы упростим работу с выводом статей, но не сможем организовать, например сложную систему рейтинга, комментариев etc (то есть, конечно, сможем, но это будет более громоздко и некрасиво, как если бы мы хранили все данные в базе данных (см. третий выпуск подшивки)). Итак, приступим


файл admin.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=Windows-1251">
<title>Articl_Public</title>
<STYLE type="text/css">
<!--
body {font-family: "arial"; color: 3366ff;}
A:link {color: 0099cc; text-decoration: none; font-size: 14px;}
A:visited {color: 3366ff; text-decoration: none; font-size: 14px;}
A:hover, A:active {color: ff6633; text-decoration: none; font-size: 14px;}
p {color: 3366ff; font-size: 12px;}
-->
</STYLE>
</head>
<body>
<div align="left">
<?php

$dir = "stat";
mkdir($dir, 0755); //на всякий случай создаем новый каталог с правами доступа 775

//Прверяем нажата ли кнопка отправки
if (isset($_REQUEST['newarticl'])) {
if ($_REQUEST['statname'] == ""){
//вдруг забыли ввести название новой статьи :)
//также назовем и файл, в котором она будет хранитьчя

$mes = "Не введено название новой статьи";
}
else { //если название есть..
$ras = "txt"; //расширение будущего файла
$stat = "$dir/".$_REQUEST['statname'].".txt";
$f = fopen ($stat, "a+"); //открываем новый файл с нашим названием статьи
if (!$f) {$mes = "Ошибочка вышла";}
else {
flock ($f, 2); //блокировка на всякий случай

//проверяем нужно ли заменять спецсимволы
if ($_REQUEST['zamena'] == 1) {
$st = htmlspecialchars($_REQUEST['stattext']);
}

//если не нужно, так и сохраняем
else {
$st = $_REQUEST['stattext'];}

//а надо ли заменять перенос строки?
if (@$_REQUEST['perenos'] == 1) {
$st = str_replace("\n", "<br>\n", $st);
}

//обработанную по полной программе строку
//записываем в открытый ранее файл
fwrite ($f, $st);
fclose ($f);
$mes = "Статья создана";
chmod ($stat, 0755); //устанавливаем на новый файл права доступа
}
}
}
//сама форма отправки данных
//выводим ее в конце, чтобы в начале шла проверка
//а ни отправлены ли уже данные
echo '
<FORM ACTION="admin.php?act=public" METHOD=POST NAME="pub"><p>
Название новой статьи<br>(латинскими буквами без расширения) :<br>
<INPUT TYPE="text" NAME="statname" VALUE=""><br><br>
Текс :<br>
<TEXTAREA NAME="stattext" WRAP="virtual" COLS="80" ROWS="15">Вставьте текст статьи</TEXTAREA><br>
<INPUT TYPE="hidden" NAME="zamena" VALUE="0">
<INPUT TYPE="checkbox" NAME="zamena" VALUE="1">Заменить HTML-символы на их эквиваленты<br>
<INPUT TYPE="checkbox" NAME="perenos" VALUE="1">Заменить перенос строки на &lt;br&gt;<br><br>
<INPUT TYPE="submit" NAME="newarticl" VALUE="Добавить"></p>
</FORM>';

echo '<p>'.@$mes.'</p>';//Выводим сообщения

?>
</div>
</body>



Правда придется еще выключить режим magic_quotes_gpc, т.к. при записи в файл, будут автоматически экранированы все ковычки, что нас совсем не устраивает. Создайте в данной директории файл .htaccess и пропишите в нем строку
php_flag magic_quotes_gpc Off
По непонятной мне пока причине этот метод не на всех хостингах работает так корректно, как на локальной машине. Возможно, придется проконсультироваться с администрацией хостинга. Если кто знает в чем дело, пожалуйста, поделитесь соображениями.

Не составит труда добавить систему авторизации и некоторые навороты вроде редактирования старых статей.
На сегодня все, скачивайте подшивку, пишите в обратную связь, жду все пожелания с нетерпением. Следующий выпуск, возможно, задержится на несколько дней, но мы наверстаем :)

Сделай свой сайт оригинальнее вместе с Еженедельником сайтостроителя!


В избранное