【发布时间】:2018-10-05 13:13:16
【问题描述】:
经过将近 3 天的故障排除后,我需要寻求建议。
A 有一个带有 4 个图像和 4 个“喜欢”按钮的小图像板。早些时候,我这样做是为了将每个按钮的点击次数存储在一个 .txt 文件中。现在我基本上需要做到这一点,这样一个人就可以只按一次某个按钮。
这是ip.txt。左边的数字是按钮 ID,右边是点击该按钮的人的 IP。
click-001||127.0.0.1
click-002||
这很简单。我需要确保它在我点击我的 PC 时存储 ip,然后在我点击我的平板电脑时存储另一个 IP - 并停止无论我接下来做什么。现在在过去的几天里,它一直在做除此之外的任何事情!
我当前的代码是isset。这会看到第一个 IP 但不添加第二个:
$file2 = 'ip.txt'; // path to text file that stores counts
$fh2 = fopen($file2, 'r+');
$ip_addr = $_SERVER['REMOTE_ADDR'];
$lines2 = '';
while(!feof($fh2)) {
$line2 = trim(fgets($fh2));
if ($line2) {
$line2 = explode('||', $line2);
if(isset($line2[0], $line2[1])) {
$item2 = trim($line2[0]);
if(!empty($item2)) {
if($item2 == $id) {
if(empty($line2[1])) {
$lines2 .= "$item2||$ip_addr\r\n";
file_put_contents($file2, $lines2);
} else {
// this is where it always fails
if (!isset($ip_addr)) { $ip_all = $line2[1] . " " . $ip_addr;
$lines2 .= "$item2||$ip_all\r\n";
file_put_contents($file2, $lines2);
} else {
echo "lul";
}
}
}
}
}
}
}
fclose($fh2);
我也用in_array函数试过这个:
$ip_all = array($line2[1]);
if (!in_array($ip_addr, $ip_all)) {
array_push($ip_all, ',' , $ip_addr);
$ip_fin = implode($ip_all);
$lines2 .= "$item2||$ip_fin\r\n";
file_put_contents($file2, $lines2);
^这个也看到了第一个IP并添加了第二个,但随后无法找到IP是否已经存在并且当我点击时只是继续添加副本。
这是残酷的。我做错了什么,有没有更简单的方法?
【问题讨论】:
-
好吧,首先,我建议使用数据库而不是文本文件。
-
数据库更好,您可以在喜欢之前要求用户登录,以更好地确保这不是重复的。
标签: php click ip counter isset