Просмотр полной версии : Как недопустить запуск пхп скрипта дважды?
DesignerMix
12.03.2007, 13:03
Мне просто позарез необходим кусочек кода недопускающий запуск одного и итогоже скрипта (в моём случае опроса) на одном и томже компьютере дважды, или пусть запускается, но юзеру вместо вопросов выведется строчка "Хрен тебе".
Ps:Просто у меня есть такая проблема: юзверь не должен одновременно быть на одном и том-же сайте, просто там стоит опрос и опрашиваемый как правило узнаёт правильный ответ на вопрос просто открыв тотже сайт и тыкнув на ответ находит правильный вариант, а затем закрывает второе окно и вставляет в первое верный ответ.
кукисы и запоминание ip. И вообще что эта тема делает в этом разделе? Перенес в PHP.
DesignerMix
12.03.2007, 13:24
А можно поконкретнее. Мнебы кусочек кода по сравнению куков, ip, сессии и выводе определённой странички...
а почему бы тебе самому этим незаняться? Есть отличный сайт по теме. http://php.su русский. Там все хорошо описано. Здесь помогают решать проблемы а не решают их за тебя.
<?php
///////////////////////////////////////////////////
// Web-приложения для книги "Профессиональный сайт на PHP 5"
// 2004 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Голышев С.В. (glsv@softtime.ru)
// Кузнецов М.В. (kuznetsov@softtime.ru)
///////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
include "../admin/config.php";
$title="Голосование";
include "../util/top.php";
?>
<h1 class=artnamepage>Голосование</h1>
<?
// Учитываем голос
if(!empty($_POST['id_answer']))
{
$id_answer = $_POST['id_answer'];
// Получаем ip-адрес посетителя
// Это необходимо для реализации защиты от накруток
$forward = getenv(HTTP_X_FORWARDED_FOR);
$ip = urldecode(getenv(HTTP_CLIENTIP));
if (($forward != NULL)&&($forward != $REMOTE_ADDR)) $ip = $ip."/".$forward;
// Проверяем наличие IP-адреса посетителя в таблице poll_ip
// В ней содержатся IP-адреса последних проголосовавших посетителей
$isip = "SELECT * FROM poll_ip
WHERE ip = '$ip'
AND puttime > now() - interval '2' minute";
$ipresult = mysql_query($isip);
// Удаляем устаревшие записи в таблице poll_ip
// (IP-адреса посетителей голосовавших более 2 минут назад)
$delip = "DELETE FROM poll_ip
WHERE puttime < now() - interval '2' 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 "<p class=msg><b>Вы уже голосовали за последние 2 минуты. Ваше голосование не будет засчитано.</b></p>";
}
}
}
else
{
echo "<p class=msg><b>Вы не выбрали вариант ответа</b></p>";
}
// Отображаем результаты голосования
$query = "SELECT * FROM poll
WHERE archive = 'active' AND hide = 'show'";
$pol = mysql_query($query);
if ($pol)
{
$poll = mysql_fetch_array($pol);
// Отображаем вопрос голосования
echo "<h3 class=artzag>".$poll['name']."</h3>";
// Просматриваем ответы на вопрос голосования
// и статистику голосования по ним
$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;
// Выводим заголовок таблицы с результатами голосования
echo "<table border=1>
<tr><td>Ответ</td><td>Проголосовало</td><td>%</td></tr>";
while($answer = mysql_fetch_array($ans))
{
// Выводим результаты голосования
echo "<tr>
<td>".$answer['name']."</td>
<td>".$answer['hit']."</td>
<td>".sprintf("%01.1f%s", $answer['hit']/$totalhits*100,'%')."</td>
</tr>";
}
echo "</table>";
echo "Общее число проголосовавших составляет: ".$totl['SUM(hit)']."<br><br>";
// Ссылка на просмотр архива
echo "<a href=archive.php>Посмотреть архив голосований</a><br>";
} else puterror("Ошибка при обращении к блоку голосования");
} else puterror("Ошибка при обращении к блоку голосования");
include "../util/bottom.php";
?>
Код выше это работа c ip. Всмысле это голосование которое разворотишь и получиться код для работы с ip адресом как в твоем случае.
DesignerMix
12.03.2007, 21:01
И за сайт и за код спасибо, многое почерпнул!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot