Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему скрипт Голосование вместо ip сохраняет пустое поле?
 
 автор: Арк   (22.09.2009 в 15:15)   письмо автору
5.2 Кб
 
 

Почему скрипт Голосование вместо ip сохраняет пустое поле?
$forward = getenv(HTTP_X_FORWARDED_FOR);
$ip = urldecode(getenv(HTTP_CLIENTIP));
if (($forward != NULL)&&($forward != $REMOTE_ADDR)) $ip = $ip."/".$forward;

  Ответить  
 
 автор: cheops   (22.09.2009 в 15:20)   письмо автору
 
   для: Арк   (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;
?>

  Ответить  
 
 автор: Арк   (22.09.2009 в 15:21)   письмо автору
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";
?>

  Ответить  
 
 автор: ~AquaZ~   (24.09.2009 в 07:16)   письмо автору
 
   для: Арк   (22.09.2009 в 15:21)
 

Покажи структуру таблицы

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования