"ВОКРУГ САЙТА" www.vokrug-saita.ru

как создать сайт самостоятельно

Главная Рассылка Видеоуроки Автор сайта
Осторожно, мошенник!
Эта информация сохранит Вам деньги! >>>>>

Уроки PHP для начинающих


Как создать сайт на PHP - легко, быстро, ПРОФЕССИОНАЛЬНО?

Меняем порядок вывода комментариев

В этой статье изменим скрипт комментариев таким образом, чтобы комментарии на страницу выводились в другом порядке, «от новых к старым».

Чтобы понимать, что мы будем делать, вам нужно знать, как осуществляется обход массивов в цикле. Об этом есть статья, которая так и называется Обход массива в цикле.  Если эта тема для вас нова или подзабыта, освежите память, обратившись к названной статье, а потом возвращайтесь сюда… Ну, допустим, вы это сделали, займёмся скриптом.

Я не стану приводить здесь скрипт полностью; если Вы выполняли упражнения с самого начала, то знаете его не хуже меня. Для экономии места буду приводить только те фрагменты скрипта, в которые нужно внести изменения.

Итак, первый фрагмент – там, где новый комментарий записывается в файл-базу.

Листинг 1.

//открываем файл-базу для записи нового комментария и - записываем
$f=fopen($gbpath,"w+") or die("Не могу открыть файл");
flock($f,2) or die("Невозможно заблокировать файл");
$date = date("d-m-Y");
$time = time ();
$H = date ('H', $time);
$i = date ('i', $time);
fputs($f, "$url\n");
fputs($f,"$name\n");
fputs($f,"$email\n");
$text=ereg_replace("\n"," ",$text);
fputs($f,"$text\n");
fputs ($f, "$date\n");
fputs ($f, "$H\n");
fputs ($f, "$i\n");

//далее идёт отправка комментария на e-mail админа сайта

Что здесь нужно изменить?

Разделители между данными: сейчас между каждой переменной разделитель – перевод строки (\n), его нужно заменить на что-нибудь другое. На что именно? В качестве разделителей (сепараторов) всегда выбирают какой-нибудь знак, встречающийся редко или совсем не встречающийся в текстах или ссылках. Например, двойное двоеточие (::). Или значок «тильда» (~).

Вот и давайте заменим переводы строк (\n) двойным двоеточием (::).

Листинг 2.

//открываем файл-базу для записи нового комментария и - записываем
$f=fopen($gbpath,"w+") or die("Не могу открыть файл");
flock($f,2) or die("Невозможно заблокировать файл");
$date = date("d-m-Y");
$time = time ();
$H = date ('H', $time);
$i = date ('i', $time);
fputs($f, "$url::");
fputs($f,"$name::");
fputs($f,"$email::");
$text=ereg_replace("\n"," ",$text);
fputs($f,"$text::");
fputs ($f, "$date::");
fputs ($f, "$H::");
fputs ($f, "$i\n"); //Обратите внимание! В этой строке перевод строки оставили, потому что с новой строки в файле-базе будет новый комментарий.
//далее идёт отправка комментария на e-mail админа сайта

Идём дальше.

Находим фрагмент, который отвечает за выборку из базы комментариев.

Листинг 3.


if(file_exists($gbpath))
{
$f=fopen($gbpath,"r") or die("Не могу открыть файл");
while(1){
$url = fgets($f, 1000);
$tmp = trim(str_replace("\n", "", $url));
$name=fgets($f,1000);
$email=fgets($f,1000);
$text=fgets($f,1000);
$date = fgets($f, 1000);
$H = fgets($f, 1000);
$i = fgets($f, 1000);
if(feof($f)) break;
if ($tmp == "http://comment" .$PHP_SELF)

{
echo "<hr>Автор:<a href=mailto:$email>$name</a><br>";
echo $date. "<br>";
echo $H. " час. " .$i. " мин.<br / >";
echo "Сообщение:<br>$text<br>";
}
}
fclose($f);
}

В этом фрагменте всё, что красным, удаляем. И пишем так:

Листинг 4.

if(file_exists($gbpath))
{
// следующий фрагмент кода нужно вставить вместо красного
$array = file ($gbpath); // читаем файл-базу в массив //$array
$array1 = array_reverse($array); //разворачиваем массив в обратном порядке функцией array_reverse() и помещаем результат в переменную $array1
if ($array1 == false) { return; } //если записей в базе нет, то просто возвращаем страницу без записей
else //если же записи есть
{
//запускаем цикл чтения из массива с помощью специально для этого существующей функции foreach()
foreach ($array1 as $key => $str) // функция foreach() читает массив $array1 ПОСТРОЧНО, где каждая строка и есть элемент массива. Мы каждую строку – элемент массива - помещаем в переменную $str. Но нам нужно, чтобы каждая строка тоже воспринималась как массив – МАССИВ СЛОВ, поэтому мы
{
$str = trim(str_replace(“\n”, “”, $str)); // сначала обрезаем лишние пробелы в начале и конце строки функцией trim() и удаляем перевод строки функцией str_replace()         
$arr = explode('::', $str); //  и превратили строку в массив слов с помощью функции explode(), где разделитель элементов наше двойное двоеточие (::), и результат поместили в $arr
// Далее выводим данные.
//Переменные из прежнего скрипта заменяем элементами массива $arr с соответствующими номерами. Номера взяты из файла-базы:
//там на первом месте записан URL страницы с комментарием, поэтому этому элементу присваиваем индекс 0 ($arr[0]);
//на втором месте имя комментирующего name – индекс 1 ($arr[1]);
//на третьем месте e-mail – индекс 2 ($arr[2]);
//на четвёртом текст комментария – индекс 3 ($arr[3]);
//на пятом дата добавления комментария – индекс 4 ($arr[4]);
//на шестом час добавления комментария - индекс 5 ($arr[5]);
//на седьмом минуты - индекс 6 ($arr[6]).
//просто присваиваем значения элементов массива переменным с вразумительными и понятными для нас именами, потому что таковыми пользоваться проще.
$url = $arr[0];
$name = $arr[1];
$email = $arr[2];
$text = $arr[3];
$date = $arr[4];
$H = $arr[5];
$i = $arr[6];
//и дальше уже известная нам проверка
if ($url == "http://vokrug-saita.ru".$_SERVER['PHP_SELF'])

{
echo "<hr>Автор:<a href=mailto:$email>$name</a><br>";
echo $date. "<br>";
echo $H. " час. " .$i. " мин.<br / >";
echo "Сообщение:<br>$text<br>";
          }
}

Думаю, вы понимаете, что фрагмент:

// просто присваиваем значения элементов массива переменным с вразумительными и понятными для нас именами, потому что таковыми пользоваться проще.
$url = $arr[0];
$name = $arr[1];
$email = $arr[2];
$text = $arr[3];
$date = $arr[4];
$H = $arr[5];
$i = $arr[6];

- не обязательный. Можно было бы использовать напрямую значения элементов массива.

Вместо

if ($url == "http://vokrug-saita.ru".$_SERVER['PHP_SELF'])
{
echo "<hr>Автор:<a href=mailto:$email>$name</a><br>";
echo $date. "<br>";
echo $H. " час. " .$i. " мин.<br / >";
echo "Сообщение:<br>$text<br>";
          }
}

- написать так:

if ($arr[0] == "http://vokrug-saita.ru".$_SERVER['PHP_SELF'])
{
echo "<hr>Автор:<a href=mailto:$arr[2]>$arr[1]</a><br>";
echo $arr[4]. "<br>";
echo $arr[5]. " час. " .$arr[6]. " мин.<br / >";
echo "Сообщение:<br>$arr[3]<br>";
         }
}

А также, вместо цикла foreach, с таким же успехом можно применить было бы и цикл for. То есть, вместо этой строки:

foreach ($array1 as $key => $str)

- записать так:

for ($i=0; $i < count($array); $i++)

А остальное всё так же.

Сохраните файл и посмотрите результат в браузере. А ещё лучше – проверьте оба варианта: с for и с foreach.

Успехов.

Автор: Андрей Чернобай

P. S. Подпишитесь на безплатную рассылку Вокруг Сайта и получайте на свой электронный адрес новые уроки по созданию сайта.

SmartResponder.ru
Ваше имя: *
Ваш e-mail: *

Оставьте свой отзыв о статье:



Введите цифровой код с картинки*:

"Вокруг Сайта"
подпишитесь и получайте на свой e-mail уроки, книги, статьи, скрипты, а также подарки и скидки на товары, продаваемые с сайта

SmartResponder.ru
Ваше имя: *
Ваш e-mail: *

СКАЧАТЬ
ВИДЕОКУРСЫ
СЕЙЧАС

Как записывать видео с экрана монитора и добавлять их на страницы своего сайта? - Скачать >>>


Готовы ли Вы расстаться с убеждением, что создать сайт на PHP - сложно? - Скачать >>>


Как правильно выбрать домен и хостинг? - Скачать >>>


Видеоуроки по HTML. Скачать >>>

PHP-песочница
Подписаться письмом


Карта
rss
Карта