Небольшая помощь при сохранении в текстовый файл - PullRequest
1 голос
/ 13 октября 2010

Здравствуйте, я просто настроил этот базовый опрос, я вдохновился тем, что обнаружил там, и это просто базовый опрос ajax, который отображает результаты в текстовом файле.

Хотя мне было интересно, так как я не хочу, чтобы пользователь просто щелкал мышью, чтобы получить преимущество / ущерб в результатах, я подумал о добавлении нового текстового файла, который мог бы просто сохранить IP, по одному в каждой строке, а затем проверять если он уже зарегистрирован, если да, отобразить результаты, если нет, показать опрос.

Мои строки кода для сохранения результата:

   <?php
$vote = $_REQUEST['vote'];

$filename = "votes.txt";
$content = file($filename);

$array = explode("-", $content[0]);
$yes = $array[0];
$no = $array[1];

if ($vote == 0)
  {
  $yes = $yes + 1;
  }
if ($vote == 1)
  {
  $no = $no + 1;
  }

$insert = $yes."-".$no;
$fp = fopen($filename,"w");
fputs($fp,$insert);
fclose($fp);
?>

Итак, я хотел бы знать, как я могу проверить IP-адреса, точно так же, как это происходит в принципе.

И мне не интересна база данных, даже из-за мер безопасности, я в порядке с тем, что у меня есть.

Спасибо за любую помощь!

Ответы [ 4 ]

2 голосов
/ 13 октября 2010

Чтобы остановить несколько голосов, я бы установил cookie, как только пользователь проголосовал. Если пользователь перезагружает страницу с формой голосования и имеет cookie, вы можете показать только результаты или «Вы уже проголосовали». сообщение. Обратите внимание, что это не помешает хитрым людям дважды голосовать - все, что им нужно будет сделать, это удалить сохраненный файл cookie, и они смогут повторно проголосовать.

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

2 голосов
/ 13 октября 2010

Самый простой способ - записать данные в файл

file_put_contents($filename, $data)

и прочитать данные из файла

file_get_contents($filename);

Получить IP-адрес пользователя $ _SERVER ['REMOTE_ADDR']

См. руководство по php для file_put_contents для получения дополнительной информации и file_get_contents

Вот пример кода

<?php

//  File path
$file = 'votedips.txt';

//  Get User's IP Address
$ip = $_SERVER['REMOTE_ADDR'];

//  Get data from file (if it exists) or initialize to empty string
$votedIps = file_exists($file) ? file_get_contents($file) : '';

//
$ips = explode("\n", $votedIps);
if (array_search($ip, $ips)) {
    //  USER VOTED
} else {
    $ips[] = $ip;
}

//  Write data to file
$data = implode("\n", $ips);
file_put_contents($file, $data);

?>
0 голосов
/ 13 октября 2010

Будьте осторожны с хранением IP-адресов в текстовом файле, а затем используйте file_get_contents() и аналогичные функции для загрузки данных / анализа. В худшем случае, если предположить, что каждый возможный IP-адрес использует вашу систему для голосования, вы получите текстовый файл размером во многие гигабайты и очень быстро превысите PHP memory_limit.

0 голосов
/ 13 октября 2010

Вы можете использовать file_get_contents, чтобы сохранить содержимое файла в переменную, а затем использовать функцию strpos, чтобы проверить, существует ли IP в этой переменной.
Например:

$ipfile=file_get_contents('ip.txt');
if (strpos($ipfile, $_SERVER['REMOTE_ADDR'])!==FALSE) // show the results
else // show the poll
...