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

Я работаю над очень простым сайтом, который позволит людям голосовать один раз в сутки за элемент (игру) за IP-адрес. Голоса хранятся в таблице с именами голосов, с колонками, содержащими ИД, ИД игры, проголосователем и IP-адресом.

Пользователи идут на страницу голосования для этой игры через … vote.php? Id = # (где # – gid). Вот упрощенная версия моего текущего vote.php, которая не работает:

<?php $gid = $_GET["id"]; $ip = $_SERVER['REMOTE_ADDR']; require_once ('config.php'); $q = "SELECT * FROM votes WHERE (gid=$gid)"; $r = @mysqli_query($dbc, $q); if ($r) { while ($row = mysqli_fetch_array($r)) { if ($row['ip'] != $ip) { // If no IP exists, go ahead and vote. $q2 = "INSERT INTO votes (gid, votedate, ip) VALUES ('$gid', NOW(), '$ip' )"; $r2 = @mysqli_query($dbc, $q2); if ($r2) { echo 'Thank you for voting'; } else { echo 'There was a problem with your vote' } } elseif ($ip == $row['ip']) { // If IP address exists, check date of last time they voted for this game // Define the two dates $votedate = $row['votedate']; $now = date("Ymd H:i:s"); // Calculate hours between the dates $diff = round((strtotime($now) - strtotime($votedate)) / (60 * 60)); // Create variable for when user can return. $return = '24' - $diff; if ($diff > '24') { // Allow to vote once every 24 hours $q3 = "INSERT INTO votes (gid, votedate, ip) VALUES ('$gid', NOW(), '$ip' )"; $r3 = @mysqli_query($dbc, $q3); // Display outcome of insert query: if ($r3) { echo 'Thank you for voting, please come back in 24 hours to vote again!'; } else { echo 'There was a problem with your vote:' . mysqli_error($dbc) . ' in reference to query ' . $q3; } } else { echo 'Sorry, you\'ve already voted in past 24 hours, please come back again in ' . $return . ' hours.'; } } } // End of while $r loop } else { echo 'Sorry, your query did not work.'; } // End of overall if $r ran mysqli_close($dbc); exit(); ?> 

Моя цель – работать таким образом:

Возьмите gid из URL и найдите все голоса, связанные с этим gid. Если пользователь никогда не голосовал за этот gid раньше, то разрешите добавить новое голосование. Если пользователь проголосовал за эту контрольную дату предыдущего голосования (-ов). Если последний голос старше 24 часов, разрешите другое голосование за этот голос. Если последний голос был в течение 24 часов, отрицайте новое голосование за эту игру.

Любовь, чтобы услышать ваши мысли об этом …


Я посмотрел на другие системы голосования, но мне не удалось адаптировать системы jQuery, AJAX и т. Д. К тому, что я хотел, поэтому я решил, что действительно базовая система PHP лучше всего подходит для моего ограниченного понимания. Я также хочу, чтобы иметь возможность перечислять только голоса, которые были сделаны за последние 30 дней, а другие проекты баз данных плагинов голосования не позволяют этого. Тем не менее, я был бы счастлив, если бы у кого-то была более благоприятная альтернатива – как я знаю, это неудобно.

Ура!

Будьте осторожны, для математических операций с использованием одного и того же типа:

Попробуйте с floatval ()

 $diff = floatval(round((strtotime($now) - strtotime($votedate)) / (60 * 60))); $return = 24.0 - $diff; if ($diff > 24.0) { /* Your code */ }