А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/golos1/
Rambler's Top100
Пишем на PHP: Голосование (продолжение-1)

Очень печально, но задача про ротэйтор рекламы пока не решена.

Обсуждения на форуме идут, но как-то очень вяло, участвующим в беседе явно не хватает широты мысли. Но ничего, я подожду. Уж кому-кому, а мне торопиться некуда.

Будем считать, что задача про rotator -- ваша задолженность. Вы еще ее не решили, а я уж придумал для вас новую.

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

А задачу можно назвать: "Построение иерархического древа".

Сформулируем задачу следующим образом, чтобы предметнее было ее обсуждать.

Дано:

1. Таблица с договорами (уникальный номер договора, название договора, номер родительского договора, дата договора, его приоритет, другие данные).

2. Каждый вновь создаваемый договор получает свой уникальны номер методом auto_increment в базе данных.

3. Если договор является самостоятельным, ячейке "номер родительского договора" присваивается значение 0. Если же создаваемый договор является дополнением к другому, уже существующему договору, данной ячейке присваивается уникальный номер родительского договора.

4. Любой договор может быть дополнением к другому договору и одновременно быть родительским договором для других дополнений.

5. Любой договор может иметь только одного родителя, но может иметь при этом любое количество дополнений (быть родителем для множества договоров).

6. Договор не может быть сам себе родителем или дополнением.

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

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

Лично меня сильно интересуют два метода решения, которые я находил:

1. Рекурсивная работа с ассоциативным массивом

2. Построения древа без использования массива и циклов, т.е. построение "на ходу" в результирующую переменную, последовательно получая по одной строке из базы

Другие варианты тоже принимаются с большим вниманием и интересом, т.к. они для меня будут новы.

Вот такая задача. Еще раз напоминаю, что решения из учебников меня не интересует. Интересуют ваши личные варианты, причем, в виде исполняемого кода.

А мы переходим к написанию голосования для нашего сайта.

Я подумал и решил, что нам не следует делать голосование "абы о чем", мы сделаем систему рейтинга статей, опубликованных на сайте.

Как это будет выглядеть...

В конце последней страницы текста (а у нас будет когда-нибудь, автоматическое разбиение на страницы) будет размещаться форма со следующими полями:

1. Имя цензора
2. E-mail цензора
3. Выпадающее меню с оценками
4. Поле для ввода пояснения к оценке

Эта форма будет привязана к данному тексту по его идентификационному номеру.

Голосующий будет ставить оценку и писать пояснение к оценке.

Наша задача при получении оценки и пояснения:

1. Проверить на корректность ввода имени и e-mail-адреса
2. Проверить на корректность оценку (чтобы не подсунули лишнего)
3. Проверить на наличие комментария/пояснения
4. Проверить на отсутствие запрещенных слов в комментарии
5. Привести комментарий к подходящему виду: удалить запрещенные html-тэги, удалить лишние пустые строки и пробелы.
6. Записать данные в базу (добавив дату, время и IP проголосовавшего)
7. Пересчитать и записать в базу рейтинг текста

Я специально взял такую форму голосования -- она наиболее популярна и многофункциональна. Ее можно много где использовать в таком же виде или отключив любое из полей ввода.

Что нам потребуется для решения этой задачи.

Прежде всего, потребуется новая таблица в базу данных. Назовем ее tbl_php_voting:


По полям все понятно? Надеюсь, что все.

Если вас смутили типы каких-то полей, обратитесь к оригинальному списку типов полей: http://www.mysql.com/doc/C/o/Column_types.html

Что дальше.

Дальше надо нарисовать форму для сохранения голоса и написать функцию сохранения голоса.

Но это мы сделаем завтра, т.к. обеденный перерыв кончился и надо возвращаться к работе.

До завтра!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin