Здравствуйте все!
Я знаю, что использование 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());
}
}
}
Мне нужно отследить день и проверить, совпадает ли текущая дата с датой в базе данных голосующего пользователя. Если это не то же самое, пользователь должен иметь возможность проголосовать снова, и будет установлена новая дата.
Спасибо за прочтение!
Пожалуйста, спросите меня, хотите ли вы, чтобы я опубликовал больше кода.
Выполните этот вид запроса, чтобы определить, будет ли комбинация 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);
$ today выглядит пустым в области _alreadyVote ($ ip).
Я бы предложил вызвать функцию с двумя параметрами.
_alreadyVote ($ ip, $ сегодня)