提问人:Cyril Alekseyev 提问时间:10/2/2018 最后编辑:Cyril Alekseyev 更新时间:10/2/2018 访问量:189
(PHP、AJAX)简单的计数器。想通了问题,没有解决方案
(PHP, AJAX) Simple counter. Figured the problem, no solution
问:
很抱歉不得不问。 简而言之,我正在制作一个简单的图像板,每个图像都有一个“喜欢”按钮。点击次数(点赞数)以以下格式存储在“counter.txt”文件中:
click-001||15
click-002||7
click-003||10
单击按钮可通过 AJAX 启动一个小的 php 代码。计数器 .php:
<?php
$file = 'counter.txt'; // path to text file that stores counts
$fh = fopen($file, 'r+');
$id = $_REQUEST['id']; // posted from page
$lines = '';
while(!feof($fh)){
$line = explode('||', fgets($fh));
$item = trim($line[0]);
$num = trim($line[1]);
if(!empty($item)){
if($item == $id){
$num++; // increment count by 1
echo $num;
}
$lines .= "$item||$num\r\n";
}
}
file_put_contents($file, $lines);
fclose($fh);
?>
因此,当我运行网站并测试单击我的按钮时,我收到以下消息:
注意:未定义的偏移量:1 在 C:\wamp64\www\wogue\counter.php 在线 18
我认为脚本“counter.php”在“counter.txt”中的新字符串上创建了一个空格,因此它无法“分解”,从而形成[1]索引。我认为的方式是将 .txt 文件中的最后一行空行后退并保存。它没有错误地运行,直到我点击了几次按钮,然后出现了同样的错误。
索引中的代码段如下所示:
<?php
$clickcount = explode("\n", file_get_contents('counter.txt'));
foreach($clickcount as $line){
$tmp = explode('||', $line);
$count[trim($tmp[0])] = trim($tmp[1]);
}
?>
有什么想法吗?..
答:
0赞
u_mulder
10/2/2018
#1
修剪,如果它不是空的 - 做你需要的:$line
$line = trim(fgets($fh));
if ($line) {
$line = explode('||', $line);
$item = trim($line[0]);
$num = trim($line[1]);
if(!empty($item)){
if($item == $id){
$num++; // increment count by 1
echo $num;
}
$lines .= "$item||$num\r\n";
}
}
或者以这种方式检查:empty
$line = explode('||', fgets($fh));
if(!empty(line[0]) && !empty($line[1])){
if(line[0] == $id){
$line[1]++; // increment count by 1
echo $line[1];
}
$lines .= "{$line[0]}||{$line[1]}\r\n";
}
}
评论
0赞
Cyril Alekseyev
10/2/2018
谢谢。/解决。
0赞
Diogo Sgrillo
10/2/2018
#2
您正在使用行分隔符进行写入,并读取仅针对 的同一文件。你应该保持一致。\r\n
counter.php
\n
只需删除就足以避免您看到的额外“空间”。\n
<?php
$file = 'counter.txt'; // path to text file that stores counts
$fh = fopen($file, 'r+');
$id = $_REQUEST['id']; // posted from page
$lines = '';
while(!feof($fh)){
$line = explode('||', fgets($fh));
$item = trim($line[0]);
$num = trim($line[1]);
if(!empty($item)){
if($item == $id){
$num++; // increment count by 1
echo $num;
}
$lines .= "$item||$num\n"; //removing the \r here
}
}
file_put_contents($file, $lines);
fclose($fh);
?>
评论
$clickcount = explode("\n", file_get_contents('counter.txt'));
$clickcount = file('counter.txt');
solved