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

Здравствуйте все!

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

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

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

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

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

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

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

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

vote.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());
}
}
}

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

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

3

Решение

Выполните этот вид запроса, чтобы определить, будет ли комбинация 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);
2

Другие решения

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

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

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

1

По вопросам рекламы [email protected]