Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Как недопустить запуск пхп скрипта дважды? (https://forum.antichat.xyz/showthread.php?t=35323)

DesignerMix 12.03.2007 13:03

Как неопустить запуск пхп скрипта дважды?
 
Мне просто позарез необходим кусочек кода недопускающий запуск одного и итогоже скрипта (в моём случае опроса) на одном и томже компьютере дважды, или пусть запускается, но юзеру вместо вопросов выведется строчка "Хрен тебе".

Ps:Просто у меня есть такая проблема: юзверь не должен одновременно быть на одном и том-же сайте, просто там стоит опрос и опрашиваемый как правило узнаёт правильный ответ на вопрос просто открыв тотже сайт и тыкнув на ответ находит правильный вариант, а затем закрывает второе окно и вставляет в первое верный ответ.

blaga 12.03.2007 13:11

кукисы и запоминание ip. И вообще что эта тема делает в этом разделе? Перенес в PHP.

DesignerMix 12.03.2007 13:24

А можно поконкретнее. Мнебы кусочек кода по сравнению куков, ip, сессии и выводе определённой странички...

blaga 12.03.2007 13:27

а почему бы тебе самому этим незаняться? Есть отличный сайт по теме. http://php.su русский. Там все хорошо описано. Здесь помогают решать проблемы а не решают их за тебя.

r0 12.03.2007 15:00

Код:

<?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"; 
?>


blaga 12.03.2007 15:14

Код выше это работа c ip. Всмысле это голосование которое разворотишь и получиться код для работы с ip адресом как в твоем случае.

DesignerMix 12.03.2007 21:01

И за сайт и за код спасибо, многое почерпнул!


Время: 04:12