Пишем гостевую книгу(вывод записей)
С добавлением вроде разобрались, ну а теперь попробуем написать вывод сообщений.
<? header("Content-type:text/vnd.wap.wml;charset=UTF-8"); print"<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http:// www.wapforum.org/DTD/wml_1.1.xml\"> <wml><card id=\"main\" title=\"Гостевая\"> <p>"; print "<a href=\"say.php\">Сказать</a>";} //Считаем количество строк в файле с записями: $ss = @file("rek/mess.txt"); $strok = sizeof($ss); //так, как последняя строка у нас всегда пустая, то мы её будем игнорировать: $strok=$strok-1; $ps=0; //обнуляем счетчик показанных сообщений //если не передан номер сообщения, с которого необходимо выводить сообщения, то выводим их начиная с крайнего: if($ts==""){$ts=$strok;} //А теперь мы имеем все необходимое, для того чтобы вывести сообщения: $armes=@file("rek/mess.txt"); while($ps<7 & $ts>=0){ $artext=@explode("#",$armes[$ts]); $obr=trim($artext[0]); $mess=trim($artext[1]); $mail=trim($artext[2]); $vremja=trim($artext[3]); $brauz=trim($artext[4]); if($mess!=""){ $vremja =date("H:I / d f Y", $vremja); print"<b><anchor title=\"$obr\">$obr <go href=\"say.php\" method=\"post\"> <postfield name=\"obr\" value=\"$obr\"/> </go></anchor></b> <small>[$vremja]<small>: $mess<br/> <small>Мыло: $mail<br/> [$brauz]<br/>-------<br/>"; $ps=$ps+1;} $ts=$ts-1;} if($ts>=0){print "<a href=\"index.php?ts=$ts\">Далее</a>";} print"</p></card></wml> "; ?>
Ну а теперь попробуем разобраться в написанном.
$ss = @file("rek/mess.txt"); $strok = sizeof($ss); - таким приемом мы считаем количество строк в файле. Тут мы делаем следующие:
$ss = @file("rek/mess.txt"); - читаем содержимое файла в массив, таким образом, что каждый элемент массива равен одной строчке, а индекс массива равен порядковому номеру строчки начиная с 0. Иными словами, $ss[2]=второй строчки из файла (или третий, если считать по порядку). Синтаксис оператора: массив = file("путь к файлу, который надо прочитать в массив");
$strok = sizeof($ss); - считаем количество элементов в массиве, те в данном случае – количество строк в файле. Тут вроде все понятно. Синтаксис оператора: элементов = sizeof("массив");
$armes=@file("rek/mess.txt"); - тут мы читаем файл с сообщениями в массив. Обращу ваше внимание на то, что собака перед этими и другими операторами ставится в случае, если мы не хотим чтобы в случае неудачного чтения файла скрипт выдавал ошибку. while($ps<7 & $ts>=0){ <…>} – цикл, который выводит сообщения.
Оператор while называется оператором цикла с предусловием. При входе в цикл вычисляется выражение условие, и, если его значение истинно, выполняется тело цикла. Затем вычисления выражения условия и операторов тела цикла выполняется до тех пор, пока значение выражения условия не станет ложным. Оператором while удобно пользоваться для просмотра всевозможных последовательностей, в данном случае мы используем его для просмотра элементов массива. Синтаксис: while(условие){ группа операторов} Условие здесь может быть такимже, как и в условном операторе.
$artext=@explode("#",$armes[$ts]); - тут мы читаем уже нужную нам строку из файл в массив. # - тут выступает в качестве знака, по которому происходит разделение (знак может быть любым). Чтение в массив происходит от начала строки, те элемент который стоит от начала строки до первого знака #, является элементом массива с индексом 0, от 1 до 2 знака – элемент массива с индексом 1 и тд до конца строки. Синтаксис оператора такой: $массив=explode("знак по которому происходит разделение","Строка, которую необходимо разбить");
$obr=trim($artext[0]); - обрабатываем полученные элементы (удаляем лишние пробелы) и присваиваем переменным значения соответствующих элементов массива (можно и не присваивать, это я для понятливости сделал). $ps=$ps+1; - увеличиваем на 1 количество показов сообщений $ts=$ts-1; - уменьшаем на 1 номер строки, с которой мы будем далее работать.
if($ts>=0){print "<a href=\"index.php?ts=$ts\">Далее</a>";} – Если строка, которую мы вывели последний, имеет порядковый номер больший чем 0, то мы выводим ссылку на следующею страницу, где мы будем выводить уже сообщения начиная с последний строки, которую мы вывели на этой странице. С этим вроде все.
Ну а теперь, как я уже выше обещал мы вернемся к странице, на которой у нас форма для написания нового сообщения (say.php).
И пропишем там в строке "<input name=\"mess\" maxlength=\"100\" value=\"\"/> " в значение value=\"$obr, \" Должно получится так: <input name=\"mess\" maxlength=\"100\" value=\"$obr, \"/> Это нужно для того, чтобы когда мы пожелаем обратится к кому либо уже писавшему в нашей гостевой, мы попросту нажимали на его имя, и оно уже отображалось в поле для нового сообщения.
Ну вот в общем, на этом пожалуй скрипт и закончен. Теперь нужно создать папку "rek" в тойже папке, где и лежит сам скрипт, и установит права доступа для неё chmod 777 (в случае если сервер конечно работает под осью Юникс).