【问题标题】:PHP click counterPHP点击计数器
【发布时间】:2014-10-30 09:34:12
【问题描述】:

我有一个 .php 脚本,它计算按钮的点击次数并将它们放入一个 .txt 文件中,在这里一切正常,但我现在只对一次计数有效。如果,假设我制作了两个按钮,那么这两个按钮将显示相同的点击次数。

我需要脚本分别为每个按钮工作...

PHP:

if( isset($_POST['clicks']) ) { 
    incrementClickCount();
}

function getClickCount()
{
    return (int)file_get_contents("clickit.txt");
}

function incrementClickCount()
{
    $count = getClickCount() + 1;
    file_put_contents("clickit.txt", $count);
}

HTML:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="submit" value="click me!" name="clicks">
</form>
<div>Click Count: <?php echo getClickCount(); ?></div>

【问题讨论】:

  • 不把点击次数写到文件里,就不能只用一个全局变量吗?
  • 全局变量不起作用,因为它只存在于同一个请求中,所以多个请求不会更新数字。

标签: php button counter


【解决方案1】:

我认为你应该尝试不同的方法。首先,在文件中保存点击比在数据库中慢,所以你应该使用数据库而不是文件。

然后,您可以创建一个表,其中包含button_id 字段和对应的click_number 字段。因此,如果单击带有id="1" 的按钮,您会增加该按钮的click_number 值。

【讨论】:

  • 确实,使用数据库比使用 txt 文件更好。提问者应该考虑使用数据库。
  • 好吧,我想我别无选择,只能将数据库用于我的功能,我想将点击计数器存储在根 .txt 文件中,因为在不久的将来我需要创建一个将这些点击放入图表的离线应用。
  • 好吧,如果你真的想改进你的脚本,你必须计算 JS 中的 clics,然后存储它们。使用 PHP 是荒谬的,我认为这是某种课堂练习。
  • @eagle1 好吧,这是一种练习,因为我是 php 新手,我可以在 JS 中执行此操作,因为我与前端开发人员一起使用,然后存储它,但我想创建使用 php 的整个函数来掌握它并了解差异。这只是我的学习方式。感谢您的贡献。
【解决方案2】:

你可以给第二个按钮取另一个名字,并将数据保存在另一个文件中?

另一种可能性是将所有按钮信息保存在同一个文件中,例如使用explodeimplode

[编辑:示例]

if( isset($_POST['clicks'])&& isset($_POST['buttonnumber'])) 
{
    incrementClickCount($_POST['buttonnumber']);
}

function getClickCount($num=0)
{
    $clickinfo = explode(":",file_get_contents("clickit.txt"));
    return (int)$clickinfo[$num];
}

function incrementClickCount($num=0)
{
    $clickinfo = explode(":",file_get_contents("clickit.txt"));
    $clickinfo[$num]++;
    file_put_contents("clickit.txt", implode(":",$clickinfo));
}

【讨论】:

  • 由于我将涉及两个以上的按钮(估计为 52 个)并且将数据保存在根 .txt 文件中的速度较慢,因此我不认为给按钮取另一个名称并将其保存在另一个文件将是最好的解决方案。 52 个按钮 = 52 个 .txt 文件 => 服务器背后的痛点。老实说,我无法完全想象使用 implode/explode 是如何工作的。
  • 查看我的更新以获取 implode/explode 的示例。这里点击数据存储到文本文件中,用“:”分隔
  • 测试时,请记住首先通过将文件内容设置为“0:0:0:0”将计数器设置为零(任意数量的计数器)
  • 好吧,我按照上面提到的做了,但由于某种原因,计数器无法启动。而且我确实将文件的内容放在了 0:0 位置(目前只测试了两个)。
  • 请记住,索引从 0 开始,并且我更改了帖子变量(点击次数和按钮编号),因此您必须确保调用函数 incrementClickCount。在这里,它使用 incrementClickCount(1); !
【解决方案3】:

如果两个按钮调用相同的函数:

function incrementClickCount()
{
    $count = getClickCount() + 1;
    file_put_contents("clickit.txt", $count);
}

那么你当然只会得到一个计数器。

您可以将按钮制作成另一个调用另一个函数的表单,或者执行以下操作:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="submit" value="click me!" name="clicks">
    <input type="submit" value="click me!" name="clicks2">
</form>
<div>Click Count: <?php echo getClickCount(); ?></div>

if( isset($_POST['clicks']) ) { 
    incrementClickCount("button1");
}
if( isset($_POST['clicks2']))
{
    incrementClickCount("button2");
}

function incrementClickCount($button)
{
if($button == "button1")
{
    $count = getClickCount() + 1;
    file_put_contents("clickit.txt", $count);
}
elseif($button = "button2")
{
 // other counter
}

}

【讨论】:

    【解决方案4】:

    你必须使用会话。如果尚未初始化,则首先设置会话变量初始值 1。初始化后,从第 2 次点击开始,每次点击都会计数 +1,因为它会满足 else 语句

    <?php
    session_start();
    ?>
    <html>
        <head></head>
        <body>
            <form method="post" action="submit.php">
                <input type="submit" name="count" value="Start counting" />
            </form>
            <?php
            if(isset($_POST['count'])){
                if(!($_SESSION['count'])){
                    $_SESSION['count'] = 1;
                }else{
                    $count = $_SESSION['count'] + 1;
                    $_SESSION['count'] = $count;
                }
            }
            echo $_SESSION['count'];
            ?>
        </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2018-12-30
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多