|
 5.2 Кб |
|
| Почему скрипт Голосование вместо ip сохраняет пустое поле?
$forward = getenv(HTTP_X_FORWARDED_FOR);
$ip = urldecode(getenv(HTTP_CLIENTIP));
if (($forward != NULL)&&($forward != $REMOTE_ADDR)) $ip = $ip."/".$forward; | |
|
|
|
|
|
|
|
для: Арк
(22.09.2009 в 15:15)
| | HTTP_CLIENTIP может быть не заполненным, а $REMOTE_ADDR следует заменить на $_SERVER['REMOTE_ADDR']. Замените эти строчки на
<?php
$forward = getenv('HTTP_X_FORWARDED_FOR');
$ip = $_SERVER['REMOTE_ADDR'];
if (($forward != NULL)&&($forward != $_SERVER['REMOTE_ADDR'])) $ip = $ip."/".$forward;
?>
|
| |
|
|
|
|
 5.2 Кб |
|
|
для: cheops
(22.09.2009 в 15:20)
| | Спасибо!
Все равно вылетает сообщение "Вы уже проголосовали. Ваше голосование не будет засчитано!", даже после очистки таблицы с ip адресами!
В чем может быть проблема?
<?
// Учитываем голос
if(!empty($_POST['id_answer']))
{
$id_answer = $_POST['id_answer'];
// Получаем ip-адрес посетителя
// Это необходимо для реализации защиты от накруток
$forward = getenv('HTTP_X_FORWARDED_FOR');
$ip = $_SERVER['REMOTE_ADDR'];
if (($forward != NULL)&&($forward != $_SERVER['REMOTE_ADDR'])) $ip = $ip."/".$forward;
// Проверяем наличие IP-адреса посетителя в таблице poll_ip
// В ней содержатся IP-адреса последних проголосовавших посетителей
$isip = "SELECT * FROM poll_ip
WHERE ip = '$ip'
AND puttime > now() - interval '1440' minute";
$ipresult = mysql_query($isip);
// Удаляем устаревшие записи в таблице poll_ip
// (IP-адреса посетителей голосовавших более 2 минут назад)
$delip = "DELETE FROM poll_ip
WHERE puttime < now() - interval '1440' minute";
mysql_query($delip);
// Проверка на ошибки при выполнении запроса
if($ipresult)
{
// Если результат запроса не содержит записей,
// то посетитель с данных ip-адресом не учавствовал в голосовании
// за последние 2 минуты и его голос должен быть засчитан
if(mysql_num_rows($ipresult)<1)
{
// Заносим ip-адрес посетителя в таблицу poll_ip
mysql_query("INSERT INTO poll_ip VALUES(0, '$ip', now())");
// Заносим результат голосования посетителя в таблицу answer
$query = "SELECT hit FROM answer
WHERE id_answer = $id_answer";
$num = mysql_query($query);
if($num)
{
$number = mysql_fetch_array($num);
$query = "UPDATE answer SET hit = ".($number['hit']+1)."
WHERE id_answer = $id_answer";
mysql_query($query);
} else puterror("Ошибка при обращении к блоку голосования");
}
else
{
echo "<h2 class=\"warning\">Вы уже проголосовали. Ваше голосование не будет засчитано!</h2>";
}
}
}
else
{
echo "<h2 class=\"warning\">Вы не выбрали вариант ответа!</h2>";
}
// Отображаем результаты голосования
$query = "SELECT * FROM poll
WHERE archive = 'active' AND hide = 'show'";
$pol = mysql_query($query);
if ($pol)
{
$poll = mysql_fetch_array($pol);
// Отображаем вопрос голосования
echo "<h2>".$poll['name']."</h2>";
echo "<table width=\"100%\" cellspacing=\"24\">
<tr>
<td>";
// Просматриваем ответы на вопрос голосования
// и статистику голосования по ним
$query = "SELECT * FROM answer
WHERE id_poll = ".$poll['id_poll']."
ORDER BY pos";
// Подсчитываем сумму всех проголосовавших в текущем голосовании
$total = "SELECT SUM(hit) FROM answer
WHERE id_poll = ".$poll['id_poll'];
$ans = mysql_query($query);
$tot = mysql_query($total);
if($ans && $tot)
{
$totl = mysql_fetch_array($tot);
$totalhits = $totl['SUM(hit)'];
if($totalhits == 0) $totalhits = 1;
while($answer = mysql_fetch_array($ans))
{
// Выводим результаты голосования
echo "<table width=\"100%\" cellspacing=\"10\" class=\"ttd\">
<tr>
<td class=\"poll\">".$answer['name']."</td>
<td align=\"right\" class=\"poll\">Число<br>голосований</td>
<td width=\"125\" align=\"right\" class=\"poll\">%<br>
голосований</td>
</tr>
<tr>
<td>
<a id=\"thumb\" href=\"images/photos/contests/".$answer['big']."\" onClick=\"return hs.expand(this)\"><img src=\"images/photos/contests/".$answer['small']."\"></a></td>
<td align=\"right\" class=\"poll\">".$answer['hit']."</td>
<td>
<table width=\"100%\" height=\"250\" cellspacing=\"0\">
<tr>
<td height=\"115\" align=\"right\" class=\"poll\">".sprintf("%01.1f%s", $answer['hit']/$totalhits*100,'%')."</td>
</tr>
<tr>
<td align=\"right\"><img src=\"images/logo_poll.gif\" width=\"254\" height=\"141\"></td>
</tr>
</table> </td>
</tr>
</table><p></p>";
}
echo "</td>
</tr>
</table>";
echo "<h2>Общее число проголосовавших составляет: ".$totl['SUM(hit)']."</h2>";
// Ссылка на просмотр архива
echo "<h2><a href=contests.php>Вернуться на страницу голосования</a></h2>";
} else puterror("Ошибка при обращении к блоку голосования");
} else puterror("Ошибка при обращении к блоку голосования");
include "bottom.php";
?> | |
|
|
|
|
|
|
|
для: Арк
(22.09.2009 в 15:21)
| | Покажи структуру таблицы | |
|
|
|