Система ежедневного голосования с IP

Всем привет!

Я знаю, что использование IP-адресов - не лучший вариант для системы голосования, но в моем случае это нормально!

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

Что у меня есть: администратор может задать вопрос для опроса. Пользователи могут ответить на вопрос, используя свой IP-адрес один раз. (вы можете проголосовать только один раз за каждый IP-адрес)

База данных: Параметры таблицы: идентификатор и имя Это таблица, в которой хранятся ответы на опрос. Таблица избирателей: id, option_id, ip, today и number Это таблица, содержащая IP-адрес избирателя, ответ, за который он хочет проголосовать, дату, когда он проголосовал (еще не работает), и число, которое используется для получения общей суммы. голосов.

У меня есть 3 файла php: muziek.php, insertM.php и vote.php

muziek.php показывает вопрос и ответ опроса.

insertM.php позволяет пользователям вставлять ответ на опрос.

Vote.php осуществляет голосование по опросу. Люди могут использовать свой IP-адрес только один раз, теперь я хочу сделать так, чтобы люди могли использовать свой IP-адрес ежедневно.

голосование.php:

private function _alreadyVote($ip,$today)
        {
            $sql = "SELECT * FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(today) = CURDATE()";
            $result = $this->_query($sql);
            return sizeof($result)>0;
        }

        //public functions
        public function vote($optionId)
        {           
            $ip  = $_SERVER['REMOTE_ADDR'];
            $today = date('Y-m-d');

                if(!$this->_alreadyVote($ip,$today)){

                $sql ='INSERT INTO '.$this->_voterTable.' (id,option_id,ip,today) '.' VALUES(NULL,"'.mysql_real_escape_string($optionId).'","'.mysql_real_escape_string($ip).'","'.mysql_real_escape_string($today).'")';
mysqli_query($conn, $sql);

                $result = mysql_query($sql,$this->_con);
                if(!$result){
                    die('unable to insert'. mysql_error());
                }
            }        
        }

Мне нужно отслеживать день и проверять, совпадает ли текущая дата с датой в базе данных голосующего пользователя. Если это не то же самое, пользователь сможет проголосовать снова, и будет установлена ​​новая дата.

Спасибо за прочтение! Пожалуйста, спросите меня, хотите ли вы, чтобы я разместил еще код.


person ShadowMan    schedule 20.01.2015    source источник
comment
Я думаю, что это отпугнет людей, потому что они должны подтвердить логин, а я хочу, чтобы это было быстро и легко.   -  person ShadowMan    schedule 20.01.2015
comment
Что именно еще не работает @WardP? Кредиты за написание вопроса с этими деталями в наши дни кажется немного трудным для большинства людей.   -  person Kevin Voorn    schedule 20.01.2015
comment
Я хочу сделать так, чтобы люди могли голосовать каждый день, теперь они могут голосовать только один раз со своим IP-адресом.   -  person ShadowMan    schedule 20.01.2015
comment
m/d/Y - это, безусловно, наименее стандартный формат, который доставит вам проблемы, если вы работаете с DATE столбцом MySQL. Вы должны использовать Y-m-d.   -  person sjagr    schedule 20.01.2015
comment
Хорошо, я изменю это спасибо!   -  person ShadowMan    schedule 20.01.2015
comment
Библиотека mysql устарела, используйте mysqli или PDO.   -  person    schedule 20.01.2015


Ответы (2)


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

$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";

Если это возвращает строки (или количество строк), то в праве голоса «люди» следует отказать. Если это не так, возможно голосование. После голосования обновите latestVoteDate строки с IP-адресом ($ip) до CURDATE().

$conn = mysqli_connect("localhost","my_user","my_password","my_db");
$query = mysqli_query( $conn,  $sql );
$data = mysqli_fetch_assoc( $query );

if($data['rowCount'] > 0)
{
   die("You are not allowed to vote");
}
else
{ 
   // Show the voting page or partial
}

Затем, когда действие голосования действительно произошло, обновите строку, содержащую правильный IP-адрес, до текущей даты:

$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);
person Allmighty    schedule 20.01.2015
comment
Спасибо за ответы! Не могли бы вы подробнее рассказать о ставке, как я могу реализовать это в моем коде? - person ShadowMan; 20.01.2015

$ today выглядит пустым в области _alreadyVote ($ ip).

Я бы посоветовал вызвать функцию с двумя параметрами.

_alreadyVote ($ ip, $ сегодня)

person David Öhlund    schedule 20.01.2015