开发者

Small help saving to txt file

Hello there so I just setup this basic poll, I inspired myself from something I found out there, and it's just a basic ajax poll that waves the results in a text file.

Although I was wondering, since I do not want the user to simply mass-click to advantage / disadvantage the results, i thought about adding a new text file that could simply save the IP, one on each line, and then checks if it's already logged, if yes, display the results, if not, show the poll.

My lines of code to save the result are:

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

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

$array = explode("-", $content[0]);
$yes = $array[0];
$n开发者_如何学运维o = $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);
?>

So I'd like to know how I could check out the IPs, in the same way it does basically.

And I'm not interested in database, even for security measures, I'm alright with what Ive got.

Thanks to any help!


To stop multiple votes, I'd set a cookie once a user has voted. If the user reloads the page with the voting form on it and has a cookie, you could show just the results, or a "You have already voted." message. Note that this will not stop craftier people from double-voting - all they would have to do is remove the saved cookie, and they could re-vote.

Keep in mind though that IPs can be shared so your idea of storing IPs might backfire - people on a shared external-facing IP won't be able to vote, as your system will have registered a previous vote from someone at the same IP address.


easiest way is to write data to file is

file_put_contents($filename, $data)

and to read data from file

file_get_contents($filename);

To get IP Address of the user $_SERVER['REMOTE_ADDR']

See php manual for file_put_contents for more information and file_get_contents

Here is sample code

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

?>


You can use file_get_contents to save the file's content into a variable and then use the strpos function to check if the IP exists in that variable.
For example:

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


Be careful with storing IPs in a text file, and then using file_get_contents() and similar functions for loading the data/parseing. As an absolute worst case, assuming that every possible IP address used your system to vote, you'd end up with a text file in the many many gigabytes in size, and you'd exceed PHP's memory_limit very quickly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜