Голосование на PHP своими руками. Плагин социальных голосований WP Social Votes

Всем привет. В этой статье мы с вами рассмотрим красивый скрипт социального голосования для сайта. Основной плюс этого скрипта в том, что он написан на PHP и подходит для использования на различных .

Не секрет, что в социальных сетях ежедневно пропадают милионы пользователей, и наша с вами задача этих пользователей привлечь к себе на ресурс, причем используя пассивные методы привлечения. Вирусный трафик с социальных сетей, может быть реализован при помощи социального голосования. Каждый раз, когда пользователь голосует за что-то, ссылка на голосование появляется на его странице ВКонтакте, FaceBook или Twitter в зависимости от того, какой вариант голосования он выбрал.

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

Социальное голосование - Voting.

Итак, теперь перейдем непосредственно к скрипту. Для начала скачиваем , архив со скриптом социального голосования из двух вариантов выбора. В архиве имеется папка voting, в которой находятся все основные файлы скрипта:

  • vote_start_data - папка содержит два изображения 11.jpg и 12.jpg и другие файлы. Это изображения с размерами 150х150 px, которые выводятся при голосовании. Здесь, вам нужно заменить только эти два изображения на свои.
  • index - основной файл, выполнения сценариев. Этот файл не трогаем.
  • vote_start.php - скрипт социального голосования. Он хорошо прокомментирован, внесите свои изменения на ваше голосование.
  • vote11.php - файл выполняющий редирект (перенаправление) из социальной сети при выборе первого варианта голосования на необходимую вам страницу, как правило это страница с голосованием, но может быть использована и другая.
  • vote12.php - файл выполняющий редирект (перенаправление) из социальной сети при выборе второго варианта голосования на необходимую вам страницу, как правило это страница с голосованием, но может быть использована и другая.

Теперь давайте перейдем непосредственно к установке скрипта. После внесения всех изменений, закачайте папку voting из архива к себе на сервер в корневую папку сайта.

Теперь, можно приступить к добавлению социального голосования на свой сайт. Делается это очень просто. Для этого вам нужно в том месте страницы, где вы хотите вывести голосование вставить следующий код:

В результате всей работы у вас на сайте появится, вот такое социальное голосование:

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

Скрипт для голосования своими руками на PHP и MySQL с использованием AJAX
(изменения от 03.01.2012)

Часто на различных сайтах мы видим блоки с опросом общественного мнения. Как сделать подобный скрипт, для проведения голосования на своем сайте, да еще и таким образом, чтобы при выборе нужного пункта страница не перегружалась целиком, а изменялся только блок с опросом и сразу показывал результаты. Об этом и пойдет речь в данной статье.

Важно!
Для того, чтобы пример работал корректно, необходимо:
1. Все файлы должны быть записаны в кодировке UTF-8.
2. Скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файл.

Рассмотрим пример.

Пример состоит из 5 различных файлов, рассмотрим каждый из них в отдельности.

Файл dbconnect.php

Служит для соединения с базой данных, для создания необходимой таблицы и для заполнения её примером нашего голосования.

Работа с базами данных описана в статье
« ».

В нашем случае база данных состоит из одной таблицы с тремя полями:
id – идентификатор записи;
title – название записи;
votes – количество голосов, отданных за эту запись.

Первоначально таблица заполняется следующими значениями:

Запись, для которой поле votes имеет значение NULL – считаем названием опроса, которое содержится в поле title.

Файл showcontent.js

Содержит в себе AJAX-функцию showContent() для обновления контента без перезагрузки страницы. Подробное описание работы данной функции приведено в статье «AJAX и JavaScript. Загрузка контента без перезагрузки страницы".

Файл functions.php

Содержит описание двух функций, применяющихся нами в программе.

Function drawForm() // отображение формы для голосования { $r=mysql_query ("SELECT * FROM vote WHERE votes is NULL"); $row=mysql_fetch_array($r); echo "

".$row["title"]."

"; echo ""; $r=mysql_query ("SELECT * FROM vote WHERE votes is not NULL"); while ($row=mysql_fetch_array($r)) echo " {$row["title"]}
"; echo "
"; echo ""; }

Функция drawResults() отображает результаты голосования.

Function drawResults() // отображение результатов { $r=mysql_query ("SELECT * FROM vote WHERE votes is NULL"); $row=mysql_fetch_array($r); echo "

".$row["title"]."

"; $r=mysql_query ("SELECT * FROM vote WHERE votes is not NULL"); while ($row=mysql_fetch_array($r)) echo "{$row["title"]}: {$row["votes"]}
"; }

Данные для построения формы и вывода результатов берутся из базы данных.

Файл index.php

При загрузке этой страницы мы сперва проверяем, было ли уже произведено голосование. Проверку осуществляем через переменную cookie, поскольку это является наиболее простым случаем. Если голосование произведено не было, то мы выводим в контейнер contentBody форму для голосования. Если же пользователь уже голосовал - выводим результаты поиска.

Файл vote.php

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

// установка cookie для избежания повторного голосования с одного браузера. setcookie ("codething_vote","1"); // добавление выбранного варианта $select = $_REQUEST["select"]; mysql_query ("UPDATE vote SET votes = votes + 1 WHERE id = "$select""); // отображение результатов drawResults();

Поскольку, выполнение этого файла вызывается через AJAX функцию showContent(), то перезагрузки всей страницы не происходит и результаты выполнения файла помещаются в контейнер contentBody.

AJAX и легко интегрируется на html страницы. Голосование и вывод показателей в скрипте происходит без перезагрузки страницы, и для каждого IP адреса голосовать можно только 1 раз в сутки.

Я вам привожу в пример три варианта скрипта , из которых вы сами выберите, какой установить к себе на сайт.

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

Третий вариант самый упрощённый вариант, и здесь отсутствуют кнопки "за " и "против ", здесь нет вывода общего числа голосовавших, здесь есть одна кнопка, которая фиксирует, что пользователю понравилось и суммарное число выводится на дисплей формы. И кстати, эта форма имеет соответственно самый маленький размер, что так же является её достоинством.

Код для *.html


Для того, чтобы формы голосования на всех ваших страницах работали от одного скрипта, нужно на каждой странице в коде (выше) сделать одно изменение.
А именно здесь: id="vt_article1" изменяете только вторую часть после vt_ . Придумывать можно абсолютно любые имена, только латиницей разумеется, и так для каждой страницы - своё имя. Всё, изменений больше делать никаких не нужно, кроме того, что если изменить оформление в стилевом файле, и заменить в скрипте латиницу на русские слова.

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

1. Скрипт голосования на сайте удобно разместить в отдельном файле, например, votes.php. Наш скрипт должен создавать таблицу базы данных о голосах за каждый конкретный товар, таблица создаётся автоматически при первом голосовании за данный товар. Ведь не заставлять же администраторов сайта-каталога создавать таблицу вручную при внесении в каталог каждого нового товара! Таблица содержит поля, ответственные за идентификационный номер голоса, идентификационный номер товара, собственно переменной, обозначающей, что голос подан (можно придать ей значение "1", строки с этими полями затем подсчитываются при формировании рейтинга), IP пользователя (но можно и без него), ник пользователя и категорию товара.

Код PHP/MySQL

mysql_query ("CREATE TABLE IF NOT EXISTS votes_$cid (

vid int(10) NOT NULL auto_increment,

id int(10) NOT NULL,

pluss int(10) NOT NULL,

ip_addr char(50) NOT NULL,

nick varchar(255) NOT NULL,

dat_lim date NOT NULL,

cid int(10) NOT NULL,

PRIMARY KEY(vid)

) ENGINE=MyISAM DEFAULT CHARSET=utf8") Or die (mysql_error ());

Показанная в коде выше конструкция автоматического создания таблицы является предметом вопроса в .

Пусть на сайте голосовать имеют возможность лишь зарегистрированные пользователи, можно установить ограничение голосования по дате, установить суточный лимит голосования за тот или иной товар (это всё на случаи, если есть подозрения в "накрутке голосов"), а также открывать голосование лишь спустя некоторое время после появления товара в каталоге, а также устанавливать дату окончания голосования, если этого требует конкретная бизнес-логика.

2. В нашем скрипте должна происходить проверка, отправлены ли данные из формы, то есть, нажал ли посетитель каталога кнопку "голосовать" (за это отвечает переменная $_POST["sended"] со значением "yes"). Далее - проверка, является ли проголосовавший зарегистрированным пользователем ($rights>0). Если есть необходимость завершить голосование за тот или иной товар к определённой дате - проверка, не завершено ли голосование ($end_dat

Код PHP

if ($_POST["sended"]=="yes")

if ($rights>0)

if ($row01==0)

$dat=date ("Y-m-d H:i:s");

if ($end_dat

elseif ($dat

3. Если в соответствии с датой голосовать можно, выполняется блок голосования. Однако в его начале происходит проверка, не исчерпан ли суточный лимит голосования за данный товар, а также проверка на случай, если голосование ещё не открыто. Если всё в порядке и голосовать можно, данные заносятся в базу, в ту её таблицу, которая содержит данные о голосовании за данный товар (таблица votes_$cid). Далее путём нового запроса к этой же таблице подсчитывается число голосов (строк) за товар с данным id. Затем в таблицу с данными обо всех товарах (goods) соответственно id товара записывается обновлённое число строк, каждая из которых означает один голос за данный товар.

Код PHP

if ($end_dat

elseif ($dat

if ($row11

if ($v_cl==1)

elseif ($v_cl==0)

4. А ниже показано, что предусматривает программа в случае отрицательных ответов на обозначенные выше вопросы.

Код PHP

else

else

else

else

echo "It`snt OK";

5. И, наконец полный код блока, реализующего голосование. Нужно только перед показанным кодом сделать проверку (if (isset ...)), существуют ли значения переменных, переданных из формы для голосования в наш скрипт. А в самом верху разместить запрос к базе на создание новой таблицы (самый первый фрагмент кода)

Код PHP

$result01=mysql_query ("SELECT * FROM votes_$cid WHERE nick="$nick" AND id="$id"") or die (mysql_error ());

$row01 = mysql_num_rows ($result01);

$resultT=mysql_query ("select voting_closed,end_ FROM categories WHERE cid="$cid"") or die (mysql_error ());

$myrowT=mysql_fetch_array ($resultT);

$end_dat = $myrowT;

$v_cl = $myrowT;

$dat_new=date ("Y-m-d");

$resultL1=mysql_query ("select * FROM votes_$cid WHERE dat_lim="$dat_new" AND id="$id"") or die (mysql_error ());

$row11 = mysql_num_rows ($resultL1);

if ($_POST["sended"]=="yes")

if ($rights>0)

if ($row01==0)

$dat=date ("Y-m-d H:i:s");

if ($end_dat

elseif ($dat

if ($row11

if ($v_cl==1)

elseif ($v_cl==0)

$result1=mysql_query ("INSERT INTO votes_$cid

(id,ip_addr,nick,pluss,dat_lim,cid)

VALUES ("$id","$ip_addr","$nick","$pluss","$dat_new","$cid")");

$result2=mysql_query ("SELECT * FROM votes_$cid WHERE id="$id"") or die (mysql_error ());

$row2=mysql_num_rows ($result2);

$result3=mysql_query ("UPDATE goods SET votes="$row2" WHERE id="$id"");

else

else

else

else

echo "It`snt OK";

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

Один из самых частых вопросов начинающих веб-программистов является вопрос «А как сделать онлайн голосование?». Очень просто! И даже если сейчас Вам так не кажется, уверяю Вас, стоит лишь вдумчиво прочитать данную статью, и Вы забудете про вопросы о голосования раз и навсегда.

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

Для начала давайте определимся, что нам нужно для создания голосования.

Итак, первое что понадобиться — форма для отображения пунктов голосования и передачи результатов на сервер соответствующему скрипту для сохранения. Сразу выделяются два новых объекта — скрипт для приема, обработки и сохранения результатов и место для хранения этих самых результатов голосования.

Местом для хранения данных спокойно может быть обычный файл. Чего-то не хватает? Ах, да! Нам же нужно еще отображать результаты голосования. Эту функцию можно спокойно исполнить в нашем едином скрипте.

Ну что же, приступим. Начнем, конечно же, с формы для отображения пунктов голосования и передачи данных на сервер. В нем нет ничего сложного:

Как Вам мой сайт?
Супер!
Хорошо
Нормально
Слабо
Лажа!

Как Вы видите, обычная форма, которая передает данные методом POST скрипту golos.php, имеется 5 вариантов ответа, кнопка Голосовать — для голосования и Результаты — просмотр результатов голосования без участия в самом голосовании.

Что дальше? Скрипт? Нет, в начале нужно определиться как мы будим хранить данные. Первое что приходит в голову — в каждой строчке по значению. Довольно удобно — все сразу можно считать в массив. Однако, не стоит забывать что при этом первая строка примет индекс 0 — тут начинающие программисты часто путаются. Я советую не использовать первую строку для хранения результатов голосования, а написать там какой-нибудь комментарий, например, что это файл для хранения результатов такого-то голосования.

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

Ну что же. Вот и все! Вы уже побежали ставить себе на сайт голосование? А зря! Ведь данный код лишь демонстрация алгоритма, слабого алгоритма, я уже молчу про возможности самого кода. Он даже не сможет обеспечить надежной работы — при большом количестве обращений файл голосований будет периодически обнуляться. Или, например, у нас нет абсолютно никакой защиты от многократных голосований — один человек может голосовать столько раз, сколько ему захочется.

Я уже молчу про недоработанный алгоритм скрипта — посмотрите в первой части мы очень неплохо используем цикл, который не зависит от количества пунктов голосования, а вот при выводе результатов — мы жестко привязаны к этому числу. А вывод результатов? Куда это годиться…

В общем, продолжать перечислять недостатки скрипта можно долго.

Хорошо Плохо