Консультация № 181933
18.01.2011, 21:08
54.13 руб.
0 4 1
Здравствуйте, уважаемые эксперты! срочно нужна ваша помощь, в решении задачи по php. Необходимо создать систему опроса (голосования) для сайтов.
Система состоит из административной и клиентской части.

- Административная часть.
С ее помощью создаются опросы. При создании нового опроса администратор вводит вопрос и
количество ответов в опросе. На следующей странице сценария уже готовая форма, с количеством текстовых полей равным количеству
ответов. Администратор заполняет эти текстовые поля формулировками ответов. На последней странице формируется текст сценария в
html-формате, который необходимо разместить на странице сайта, где будет проводится опрос (форма
с вопросами и ответами-радиокнопками, кнопкой "Проголосовать",а также со ссылкой на просмотр результатов опроса). Все опросы имеют
свой идентификатор, что позволяет сценариям отличать их друг от друга.

Все опросы сохраняются в БД MySQL. (Структуру БД необходимо разработать самостоятельно)

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

Администратор системы опроса должен иметь возможность видеть все опросы, существующие в БД, иметь возможность просматривать
результаты и удалять ненужные опросы.

Структуру БД, хранящей опросы и результаты ответов, разработать самостоятельно.

- Клиентская часть.
Посетитель сайта (клиент) видя опрос на страничке, выбирает наиболее подходящий для него ответ (радиокнопкой) и нажимает на
кнопку "Проголосовать". Сценарий принимает голос-ответ клиента и отображает общие результаты текущего голосования на другой
странице сайта.

Обсуждение

Неизвестный
18.01.2011, 22:59
общий
Если Вы хотите разработку данного приложения, то ориентировочно разработка займет около 20-25 часов работы программиста. Стоить будет по-разному, но не 54 рубля )

У меня например стоимость выполнения такого задания будет равна примерно $300-350

Если у Вас есть собственная разработка и Вам необходимо помощь в некоторых ньюансах работы, то милости просим, задавайте вопросы. Мы с радостью на них ответим.
Неизвестный
20.01.2011, 19:39
общий
Благодарю за рекомендации, но я считаю что пусть не на выполнение всего проекта, но хотя бы алгоритм, последовательность выпонения задачи, может какие-то рекомендации или какие-либо листинги вы смогли бы мне предоставить! так сказать в помощь, был бы благодарен!!!!
Неизвестный
21.01.2011, 19:40
общий
рябята хотелось чтобы вы что нибудь сказали по моей задачи! у меня завтра экзамен, а у меня ничего еще нет! подмогите чем можете.
Неизвестный
23.01.2011, 19:03
общий
это ответ
Здравствуйте, Каминский Руслан Анатольевич!

Примерный расклад такой: для каждого опроса в БД создается отдельная таблица opros_id (id,variant,votes), где id (можно делать автоинкремент) - идентификатор варианта ответа, variant (тип - текстовое поле нужной длины) - значение варианта для отображения пользователю, votes (тип - число) - количество голосов за данный вариант. Название opros_id состоит из постоянной части "opros_" и переменной части "id", опросы идентифицируются по этой переменной части.
Когда администратор открывает страницу со списком опросов, вытаскиваются названия существующих таблиц в БД (команда show tables), отбираются те, что попадают под "opros_*" и выводятся списком, при этом для каждого опроса формируются еще дополнительные ссылки: на скрипт удаления опроса и на скрипт просмотра результатов опроса. Это два отдельных скрипта, каждому из которых можно в качестве параметра передавать идентификатор опроса (то есть получится что-то типа del.php?id=opros_id).
Скрипт удаления опроса принимает идентификатор опроса в качестве параметра и удаляет этот опрос (команда drop table opros_id), после удаления опроса пользователя лучше вернуть на страницу со списком опросов.
Скрипт просмотра результатов опроса принимает идентификатор опроса в качестве параметра и выполняет запрос к БД (команда select variant, votes from opros_id order by votes desc), затем построчно выводит полученный результат. Можно вывод делать в отдельном окошке (target=_blank).
На странице со списком опросов нужно добавить отдельный раздел для создания нового опроса. Для этого достаточно простой формы (<form></form>) с полем для ввода количества вариантов ответа и кнопкой "создать опрос", которая будет вызывать скрипт new.php и передавать ему необходимое количество вариантов ответа. Скрипт в первую очередь генерирует уникальный id для опроса и создает таблицу для этого опроса (create table opros_id ...). В зависимости от количества необходимых вариантов ответа на странице отображается форма с полями input и идентификаторами с привязкой к данному варианту, то есть <input type=text name="variant1"><input type=text name="variant2"> и т.д., по необходимому количеству полей. Кнопка отправки формы на обработку проверяет наличие элемента с name=variant1 и сохраняет его данные в БД (insert into opros_id (id,variant,votes) values (...)), и так для каждого элемента ввода.
После загрузки данных администратору надо сгенерировать текст в формате html, часть текста будет постоянной (объявление формы (<form action="vote.php" method=post>...</form>), кнопка голосования (submit button), ссылка на страницу с результатами (show.php?id=opros_id)), скрытое поле с идентификатором опроса (<input type=hidden name=opros value="opros_id">),а часть формируется динамически - делается запрос к БД (select variant from opros_id), затем построчно формируются варианты ответа (<input type=radio name=var value="variant">). Этот полученный текст html можно вставить в любую страницу.
Скрипт vote.php обеспечивает голосование. В рамках параметров он принимает идентификатор опроса (через скрытое поле с name=opros) и вариант ответа (через кнопку с name=var). Данные загружаются в БД (update opros_id set votes=votes+1 where variant=...).
Для защиты от накруток можно создать в БД отдельную таблицу для хранения IP адресов sec (IP, opros_id, time). Перед тем, как засчитать голос можно проверить, не голосовали ли с этим адресом (select time from sec where ip="..." and opros_id="..."). Если от полученного времени 5 минут еще не прошли, то голос не засчитывать и выводить предупреждение. Если все чисто - засчитать голос и обновить БД (update sec set time=... where opros_id=... and ip=...). IP адрес пользователя берется из переменных окружения, время для простоты можно считать в unix-time (в секундах).
После засчитанного голоса пользователь перенаправляется на страницу show.php?id=opros_id.
Если будут вопросы - пишите в мини-форуме.

Удачи!
Форма ответа