PHP, чтобы голосовать не более одного раза, как мне кодировать это в моем коде? - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть следующий php-код, который выбирает все выборы, которые в настоящее время записаны в моей базе данных mysql:

    <?php 

$result = mysql_query("SELECT * FROM elections WHERE status = 'in_progress'")

or die(mysql_error());

if (mysql_num_rows($result) == 0) {

    echo '<h5>This Election Does Not Exist Anymore</h5><hr> ';
    } else {

while($info = mysql_fetch_array($result))
{
        echo "<tr>";
        echo "<td>" . $info['name_of_election']. "</td>";
        echo "<br/><br/><td>" . $info['date']. ' '. $info['month']. ' ' . $info['year']. "</td>";
        echo "<br/><br/><td>" . '<a href="vote.php?election=' . $info['election_id'] . '">Vote Now</a>' . "</td>";
        echo '<hr>';
}
    }
  ?>

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

мои таблицы базы данных выглядят так:

выборы: выборы_идентификации, имя_файла, дата, партия1, партия2, партия3, статус.

public: имя, фамилия, адрес, почтовый индекс, ni, ref, active.

голосов: голос_идента, выбор_идента, партия, партия

пользователи входят в систему со своими номерами ni и ref, которые являются уникальными. У меня есть сеанс, который регистрирует количество пользователей. отданные голоса попадают в таблицу голосов.

Надеюсь, этот пост намного понятнее моего другого поста.

Заранее спасибо за любую помощь.

1 Ответ

3 голосов
/ 29 февраля 2012

Есть 3 способа сделать это, которые быстро приходят на ум со своими предостережениями.

  • Аккаунты пользователей.Разрешить пользователям создавать учетные записи и требовать, чтобы они вошли в систему для голосования.Затем вы можете создать таблицу, которая отслеживает, проголосовали ли пользователи.Таким образом, вы можете обеспечить, чтобы одна учетная запись пользователя голосовала только один раз.

  • сеансов и файлов cookie.Установите cookie-файл каждый раз, когда пользователь голосует и читает этот cookie-файл, чтобы узнать, проголосовал ли пользователь, и решить, хотите ли вы показать ссылку или нет.Имейте в виду, что пользователи могут удалять файлы cookie и тем самым иметь возможность голосовать снова.

  • регистрировать голоса от ips.Рассматривайте каждый ip как одного пользователя и, таким образом, отслеживайте его в базах данных.Если ip уже проголосовал, скрыть ссылку.Имейте в виду, что пользователи могут голосовать с нескольких компьютеров, и только один пользователь с данного ip может голосовать.Таким образом, дом, компания или школа могут иметь возможность голосовать только несколько раз в зависимости от количества созданных ими ips.


Как вы понимаете, у вас есть учетные записи пользователей?выполните запрос, подобный , проверьте имена функций и обязательно экранируйте

SELECT COUNT(*) as voted
FROM votes 
JOIN elections USING (election_id)
JOIN public using (ni)
WHERE election_id = mysql_escape( $electionId ), 
AND public.ni = mysql_escape( $userId );

Затем, используя результат, выполните:

//User has voted
if ( $result > 0 ){
}
//Else they havn't
else{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...