Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Модуль голосавание сайта


Автор: eldar22 14.5.2009, 22:03
Здравствуйте парни!!!
У меня не вопрос, а мысли вслух  smile 
Хотелось бы поговорить  как  можно организовать такой модуль и на каком языке скорей всего  php smile 
Так вот  допустим будет текстовое поле одно где юзер записавает свой сайт или любой другой адрес url
дальше  идёт запись url в таблицу mysql  потом  появляеться это url  а подним две кнопик "за" и "против"
другие юзеры просто голосуют  и если большинство нажали "за" то переходит все по этому url  вот и всё smile 

Автор: SoWa 14.5.2009, 22:21
MySQL INSERT - добавить вопрос
MySQL SELECT - обработчик голосов
Методом GET кнопочка отсылает на обработчик данные(a=1 or a=0), там они заносятся в БД. Естессно, на главной странице обработчик данных из БД. Ну вот и все, собственно.
Или тебе по пунктам с кодом расписать такую штуку?  smile

Добавлено @ 22:29
Как-то так, сонно и с ошибками
Код

<?php

if (isset($_GET(a)))
{
$a=$_GET['a'];
{mysql_connect}
$result = mysql_query ("INSERT INTO quest (a) VALUES ('$a')");
}
else
{
{mysql_connect}
$result = mysql_query ("SELECT * FROM quest");
$yes=0; $no=0;
do
{
if ($rows['a']=1) {$yes++'} else {$no++;}
}
while ($rows=mysql_fetch_assoc($result));
}
echo "$yes ля ля ля $no";
echo '
Тут форма с двумя кнопочками, передающими методом ГЕТ значение 0 или 1
';
?>

Автор: eldar22 15.5.2009, 19:27
SoWa за активность спасибо  smile 
Ну если капнуть  по глубже то появляются одна не большая проблема smile 
Когда добавляешь адрес url  он должен быть активный то есть на голосование, а именно другие юзеры не могут добавлять  url пока  большинство юзеры  не проголосуют "за" сайт тогда сайт становиться не активным, а значит другие  юзеры могут добавить url
Кажется вырисовается вот такая картина smile 
Создаётся таблица mysql
URL// тут адрес  url любого юзера кто  успеет smile 
a // это на счёт голосование
active // тут активный сайт или нет два значени 1 и 0 smile 

С начало добавляется сайт один раз больше не кто не добавляет сайт
вноситься значение значение в active  = 1  и а=0  ( MySQL INSERT  )

Дальше юзеры как только проголосовали за сайт "за" то в таблицу изменяется  значение active  = 0           ( MySQL UPDATE  )

Ну дальше  опять голосование  smile 
ну вот как сделать чтобы было запрещено добавлять сайт пока в нём стоит значение active  = 1
?




Автор: bazzjr 18.5.2009, 09:30
Если я правильно понял, то вопрос решить можно  так:

Проверяем из базы на значение active, если 1, то то поле input, делаем DISABLED.

Все.

Как только кто либо проголосовал, или проголосовала группа юзеров, то делаем у поля input DISABLED=false.

Автор: eldar22 19.5.2009, 00:06
bazzjr я тут набросал код

Код

<?php


{mysql connect}//эта я знаю

echo '<form name="1" action="" method="post">
    <input name="url" type="text" value="">  <br/>
     <input  type="submit" value="отправить">
</form>';

$url = $_POST['url'];
    
$query = "UPDATE ххх  SET url='$url' WHERE id=1";
$result = mysql_query($query);

if($result) {echo "Даные внесены в базу данных";} else {echo "Ошибка, данные не были внесены в БД";}



?>


А вот как проверить значение active 1 и 0 и сделать поле input   DISABLED?

Автор: bazzjr 19.5.2009, 16:13
Самы простой вариант представляю ниже:


Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body onload="check();">
<?php
{mysql connect}//эта я знаю

$query_active = mysql_query("SELECT FROM * WHERE `url`='".$url."'(или `id`='1')", $connect) or die(mysql_error());
$part = mysql_fetch_array($query_active);
$act_hidden = $part['active']==1 ? 1:0;

if(isset($_POST['url'])){
$url_update = mysql_query("UPDATE ххх SET url='".$_POST['url']."' WHERE id=1", $connect) or die(mysql_error());

if(isset($_POST['golos'])){
$golosa_update = mysql_query("UPDATE ххх SET golos='".$_POST['golos']."' WHERE `url`='".$url."'", $connect) or die(mysql_error());
$vis = 'none'; $vis2 = 'block';
}else{$vis = 'block'; $vis2 = 'none';}
?>
<!-- ФОРМА ПО ДОБАВЛЕНИЮ URL -->
<form name="set_url" action="" method="post">
<input id="act_hidden" type="hidden" value="<? echo $act_hidden;?>">
<input id="url" name="url" type="text" value=""><br/>
<input type="submit" value="Добавить URL">
</form>
<br /><br /><br />
<!-- ниже другая форма, в которой юзеры голосуют и данные голосования записываются в базу, я не знаю по какому критерию идет голосование, и когда оно может считаться законченным -->
<!-- ПРИМЕР ФОРМЫ ГОЛОСОВАНИЯ -->
<div style="display:<? echo $vis;?>">
<form name="golosovanie" action="" method="post">
<input id="gol_hidden" type="hidden" value="<? echo $gol_hidden;?>">
Все дружненько голосуем за <? echo $part['url'];?><br /><br />
<input id="golos" name="golos" type="radio" value="1" checked="checked">Да<br />
<input id="golos" name="golos" type="radio" value="0">Нет<br/>
<input type="submit" value="Голосовать">
</form>
</div>
<div style="display:<? echo $vis2;?>">ВЫ УЖЕ ГОЛОСОВАЛИ.</div>

<script type="text/javascript">
function check(){
if (document.getElementById('act_hidden').value == 1){document.getElementById('url').disabled = true;}else{document.getElementById('url').disabled = false;}
}
</script>
</body>
</html>


Тут я реализовал следующую логику:
ПРЕДВАРИТЕЛЬНО представим, у нас такая ситуация, когда уже адрес внесен в базу и мы приступили к голосованию.
при загрузке страницы мы проверяем функцией check() поле act_hidden, и если оно=1, то дизаблим его.
Далее даем юзеру право проголосовать Один раз, он голосует, мы заносим голос в базу, и выводим ему сообщение благодарности.

Примерно так.
Неопнятно по какому критерию будет осуществлятся голосование, и когда начинается и заканчивается.

Автор: eldar22 19.5.2009, 21:19
Предполагается так, голосование начинается и заканчивается  ровно через 30 минут
следующий голосование начинается тогда когда юзер добавит сайт, если ни один юзер не добавил сайт то голосование не начинается 
И вот ваш код который вы привили чё то он у меня не работает вернее ошибку не выдаёт а просто чисты лист показывает
Также у меня таблица mysql ххх в ней значение 
id
url 
а // я так понимаю мне надо изменить на golos
active

И вот эта переменная меня смутила $connect ? 
не могу её найти
А вот критерии голосование вроде бы всё просто 
критерий голосование "за" и "против" , а именно  сколько проголосовало "за", а сколько "против"



Автор: bazzjr 20.5.2009, 07:32
eldar22 Конечно не будет работать этот скрипт у тебя.

Это всего лишь некий пример на реализацию кода и реализацию логики.

Попытаюсь накидать тебе скрипт, по твоему описанию...

Автор: bazzjr 20.5.2009, 09:48
Накатал скрипт, который полностью отвечает потребностям. Писал на работе в промежутки перерывов, поэтому все коряво, но работает. )))

Таблица БД:

Код

Table structure for xxx
-- ----------------------------
CREATE TABLE `xxx` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(40) NOT NULL,
  `golos` int(11) NOT NULL,
  `active` smallint(1) NOT NULL,
  `time_in` datetime NOT NULL,
  `time_end` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=cp1251;



Код

# СОЕДИНЯЕМСЯ С БАЗОЙ
    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "table";
    $connect = mysql_connect($dbhost,$dbuser,$dbpass);if(!$connect) {echo "<b>Ошибка соединения с базой".mysql_errno().":</b>".mysql_error();exit;}
    mysql_select_db($dbname,$connect);

if(isset($_POST['url'])){
    if(!isset($_SESSION['url'])){
    $time_in = date('Y-m-d H:i:s');
    $time_end = date('Y-m-d H:i:s',time()+1800);
    $url_insert = mysql_query("INSERT INTO `xxx` VALUES('','".$_POST['url']."', '0', '1', '".$time_in."', '$time_end') ", $connect) or die(mysql_error());
    $act_hidden = 1;
        session_register('url');
        $_SESSION['url'] == 1;
    }else{$act_hidden = 1;}        
    }
# ПРОВЕРЯЕМ НА ACTIVE (АКТИВНОЕ ГОЛОСОВАНИЕ)
$query_active = mysql_query("SELECT * FROM `xxx` WHERE `active`='1' LIMIT 1", $connect) or die(mysql_error());
$part = mysql_fetch_array($query_active);
if($part['active'] == 1){ # ЕСЛИ ГОЛОСОВАНИЕ НАЧАЛОСЬ
    $act_hidden = 1; $vis_url = 'none';
    $time = strtotime(date('Y-m-d H:i:s'));
    $time_end = strtotime($part['time_end']);
    $time_show = $time_end - $time;
    $ts .= "Осталась ".date('i',$time_show)." мин. до окончания голосования.";
    if(!isset($_SESSION['golos'])){
        $vis = 'block'; $vis2 = 'none';
        if(isset($_POST['golos'])){ # ПРОВЕРЯЕМ НА ГОЛОС
        $vis = 'none'; $vis2 = 'block';
        session_register('golos');
        $_SESSION['golos'] == 1;
        $golosa_update = mysql_query("UPDATE `xxx` SET `golos`=golos+1 WHERE `active`='1' LIMIT 1 ", $connect) or die(mysql_error());
        }
    }else{$vis = 'none'; $vis2 = 'block';}
    if($time > $time_end){ # ПРОВЕРЯЕМ ВРЕМЯ ГОЛОСОВАНИЯ И ЕСЛИ ВРЕМЯ ВЫШЛО
        $act_hidden = 0;
        $vis = 'none'; $vis2 = 'none'; $vis3 = 'block'; $ts = ""; $vis_url = 'block';
        session_unregister('url');
        session_unregister('golos');
            $active_reset = mysql_query("UPDATE `xxx` SET `active`='0' WHERE `active`='1' LIMIT 1 ", $connect) or die(mysql_error());
        }else{$vis3 = 'none';} # ЕСЛИ ВРЕМЯ ДЛЯ ГОЛОСОВАНИЯ ЕЩЕ ЕСТЬ
}else{ # ЕСЛИ АКТИВНОГО ГОЛОСОВАНИЯ НЕ НАЙДЕНО
    $vis = 'none'; $vis2 = 'none'; $vis3 = 'block'; $ts = ""; $vis_url = 'block';
    session_unregister('url');
    session_unregister('golos');
} 
?>
<div align="center"><? echo $ts;?></div>
<!-- ФОРМА ДЛЯ ДОБАВЛЕНИЯ URL -->
<div style="display:<? echo $vis_url;?>">
<form name="set_url" action="golosovanie.php" method="post">
<input id="act_hidden" type="hidden" value="<? echo $act_hidden;?>">
<input id="url" name="url" type="text" value=""><br/>
<input type="submit" value="Добавить URL">
</form>
</div>
<br /><br />

<!-- ФОРМА ДЛЯ ГОЛОСОВАНИЯ -->
<div style="display:<? echo $vis;?>">
<form name="golosovanie" action="golosovanie.php" method="post">
Все дружненько голосуем за <? echo $part['url'];?><br /><br />
<input id="golos" name="golos" type="radio" value="1" checked="checked">Да<br />
<input id="golos" name="golos" type="radio" value="0">Нет<br/>
<input type="submit" value="Голосовать">
</form>
</div>
<div style="display:<? echo $vis2;?>">СПАСИБО ЗА ГОЛОС!</div>
<div style="display:<? echo $vis3;?>">ВВЕДИТЕ ПОЖАЛУЙСТА URL</div>

<script type="text/javascript">
check();
function check(){
if (document.getElementById('act_hidden').value == 1){document.getElementById('url').disabled = true;}else{document.getElementById('url').disabled = false;}
}
</script>





Что он делает:

1 . проверяет в базе на активное голосование, если находит, то форму для ввода адреса (URL) скрывает, если не находит то показывает поле ввода.
2. если юзер ввел адрес URL, то ему предоставляется проголосовать за него, голосовать может только один раз. После чего он может только наблюдать или ждать окончания.
3. Скрипт выводит время до конца голосования.

Скрипт полностью рабочий, проверял у себя на сервере.

Надеюсь разберешься как он робит...  smile 

Автор: eldar22 20.5.2009, 12:26
bazzjr Спасибо за помощь работает smile 

Автор: eldar22 20.5.2009, 22:37
 smile 

Автор: eldar22 31.5.2009, 23:38
bazzjr
А как сделать подсчёт голос?
то есть сколько "за", а сколько "против" и если "за" больше
то выполняется вот это
Код

 header('Location: http://'.urlencode($part['url']));  

Автор: bazzjr 1.6.2009, 17:21
Цитата(eldar22 @ 31.5.2009,  23:38)
bazzjr
А как сделать подсчёт голос?
то есть сколько "за", а сколько "против" и если "за" больше
то выполняется вот это
Код

 header('Location: http://'.urlencode($part['url']));  

Добавляем в базу поле `golos_no` int(11) NOT NULL, и собсна подправляем код:

Код

session_start();
# СОЕДИНЯЕМСЯ С БАЗОЙ

   $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "table";
    $connect = mysql_connect($dbhost,$dbuser,$dbpass);if(!$connect) {echo "<b>Ошибка соединения с базой".mysql_errno().":</b>".mysql_error();exit;}
    mysql_select_db($dbname,$connect);

if(isset($_POST['url'])){
    if(!isset($_SESSION['url'])){
    $time_in = date('Y-m-d H:i:s');
    $time_end = date('Y-m-d H:i:s',time()+1800);
    $url_insert = mysql_query("INSERT INTO `xxx` VALUES('','".$_POST['url']."', '0', '0', '1', '".$time_in."', '$time_end') ", $connect) or die(mysql_error());
    $act_hidden = 1;
        $_SESSION['url'] == 1;
    }else{$act_hidden = 1;}        
    }
if(isset($_POST['podshet'])){ # НАЧИНАЕМ ПОДСЧЕТ ГОЛОСОВ
    $query_podshet = mysql_query("SELECT * FROM `xxx` WHERE `active`='1' LIMIT 1", $connect) or die(mysql_error());
    $part_poshet = mysql_fetch_array($query_podshet);
    $vis_result_podshet = "Результаты голосования:<br />проголосовало за ссылку ".$part['url']."<br />ЗА-".$part_poshet['golos']."&nbsp;&nbsp; ПРОТИВ-".$part_poshet['golos_no']." ";
        if($part_poshet['golos'] > $part_poshet['golos_no']){ $vis_goto_link = "<br /><input type=\"button\" value=\"перейти на ссылку\" onclick=\"javascript:location.href='http://".urlencode($part['url'])."'\"/>";
        } else {$vis_goto_link = "";}
    }
    
# ПРОВЕРЯЕМ НА ACTIVE (АКТИВНОЕ ГОЛОСОВАНИЕ)
$query_active = mysql_query("SELECT * FROM `xxx` WHERE `active`='1' LIMIT 1", $connect) or die(mysql_error());
$part = mysql_fetch_array($query_active);
if($part['active'] == 1){ # ЕСЛИ ГОЛОСОВАНИЕ НАЧАЛОСЬ
    $act_hidden = 1; $vis_url = 'none'; $vis_podshet = 'block';
    $time_show = strtotime($part['time_end']) - time();
    $ts .= "Осталась ".date('i',$time_show)." мин. до окончания голосования.";
    if(!isset($_SESSION['golos'])){
        $vis = 'block'; $vis2 = 'none';
        if(isset($_POST['golos'])){ # ПРОВЕРЯЕМ НА ГОЛОС
        $vis = 'none'; $vis2 = 'block';
        $_SESSION['golos'] == 1;
        $golosa_update = mysql_query("UPDATE `xxx` SET `golos`=golos+1 WHERE `active`='1' LIMIT 1 ", $connect) or die(mysql_error());
        }
    }else{$vis = 'none'; $vis2 = 'block';}
    if($time > $time_end){ # ПРОВЕРЯЕМ ВРЕМЯ ГОЛОСОВАНИЯ И ЕСЛИ ВРЕМЯ ВЫШЛО
        $act_hidden = 0;
        $vis = 'none'; $vis2 = 'none'; $vis3 = 'block'; $ts = ""; $vis_url = 'block'; $vis_podshet = 'none';
        session_unregister('url');
        session_unregister('golos');
            $active_reset = mysql_query("UPDATE `xxx` SET `active`='0' WHERE `active`='1' LIMIT 1 ", $connect) or die(mysql_error());
        }else{$vis3 = 'none';} # ЕСЛИ ВРЕМЯ ДЛЯ ГОЛОСОВАНИЯ ЕЩЕ ЕСТЬ
}else{ # ЕСЛИ АКТИВНОГО ГОЛОСОВАНИЯ НЕ НАЙДЕНО
    $vis = 'none'; $vis2 = 'none'; $vis3 = 'block'; $ts = ""; $vis_url = 'block'; $vis_podshet = 'none';
    session_unregister('url');
    session_unregister('golos');
} 
?>
<div align="center"><? echo $ts;?></div>
<!-- ФОРМА ДЛЯ ДОБАВЛЕНИЯ URL -->
<div style="display:<? echo $vis_url;?>">
<form name="set_url" action="xxx.php" method="post">
<input id="act_hidden" type="hidden" value="<? echo $act_hidden;?>">
<input id="url" name="url" type="text" value=""><br/>
<input type="submit" value="Добавить URL">
</form>
</div>
<br /><br />

<!-- ФОРМА ДЛЯ ГОЛОСОВАНИЯ -->
<div style="display:<? echo $vis;?>">
<form name="golosovanie" action="xxx.php" method="post">
Все дружненько голосуем за <? echo $part['url'];?><br /><br />
<input id="golos" name="golos" type="radio" value="1" checked="checked">Да<br />
<input id="golos" name="golos" type="radio" value="0">Нет<br/>
<input type="submit" value="Голосовать">
</form>
</div>
<div style="display:<? echo $vis_podshet;?>">
<form name="podshet" action="xxx.php" method="post">
<input name="podshet" id="podshet" type="hidden" value="1">
<input type="submit" value="Подсчет голосов">
</form>
</div>

<div style="display:<? echo $vis2;?>">СПАСИБО ЗА ГОЛОС!</div>
<div style="display:<? echo $vis3;?>">ВВЕДИТЕ ПОЖАЛУЙСТА URL</div>
<? 
echo $vis_result_podshet;
echo $vis_goto_link;
?>
<script type="text/javascript">
check();
function check(){
if (document.getElementById('act_hidden').value == 1){document.getElementById('url').disabled = true;}else{document.getElementById('url').disabled = false;}
}
</script>

Автор: eldar22 2.6.2009, 23:25
Модераторы поставьте пожалуйста bazzjr репутацию он мне помог! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)