我正在为网站构建一个简单的计数显示,仅在表单成功提交后才需要递增计数。表单是一种简单的HTML表单,它使用PHP mail()函数发送信息并重定向回页面。
let clicks = Number(document.getElementById("clicks").innerHTML);
function stateInc() {
clicks += 1;
document.getElementById("clicks").innerHTML = clicks;
}
我想也许我会使用按钮内的onClick =“ function()”标签来调用一个函数,以增加存储在带有适当ID参考的标签中的页面上的数字。
<p class="for-text">State Hats Ordered: <a id="clicks">0</a></p>
<p><button class="for-text" id="clicker" formaction="mailform.php" onclick="stateInc()" style="color: darkred; padding: 8px 8px; margin: 4px;">Submit Order</button></p>
我希望在离开页面之前甚至以php形式进行增量操作,但是我不确定该怎么做,到目前为止,我一直没有尝试过。
我还认为我会尝试在上面的javascript函数中进行重定向以转到表单邮件脚本,但由于显而易见的原因,由于在重定向发生时尚不具备表单信息,因此显然不起作用。
谢谢!
答案 0 :(得分:1)
有两种方法:
1。在客户端存储
优点:便宜又容易
缺点:计数是特定于用户的,而不是全局/总计。因此,没有人能说出提交页面的频率。
let clicks = localStorage.getItem("clicks") || 0; // get value
clicks++;
document.querySelector("#clicks").innerText = "You've visited this page " + clicks + " time(s)"; // display on webpage
localStorage.setItem("clicks", clicks); // save value to client
2。在服务器端存储(强烈建议)
优势:总人数
缺点:需要一点点努力
由于您使用的是php,所以我假设您宁愿使用mysql。
您必须在其中创建一个数据库和一个新表。
从这一点上,您可以跟踪访问,也可以仅跟踪柜台。例如,您可以创建下表:
visits(id, ip, time, url)
然后,您建立一个mysql连接并运行此sql命令INSERT INTO visits (ip, time, url) VALUES(?,?,?)
。请记住,您不需要任何安全问题,尤其是在涉及sql注入时。如果您从未听说过它,那么您绝对应该阅读它。
要显示访问量,请在上一个命令后之后运行此sql命令:
SELECT COUNT(id) FROM visits
要存储访问记录:
$db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$query = $db->prepare("INSERT INTO visits (ip, time, url) VALUES(?,?,?)");
$query->bind_param("sss", $_SERVER["REMOTE_HOST"], date("Y-m-d H:i:s"), $_SERVER["REQUEST_URI"]);
$query->execute();
$query->close();
$db->close();
要显示访问计数器:
$db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$query = $db->prepare("SELECT COUNT(id) FROM visits WHERE url = ?");
$query->bind_param("s", $_SERVER["REQUEST_URI"]);
$query->bind_result($clicks);
$query->execute();
$query->fetch();
echo "This page was" . $clicks . " time(s) visited";
$query->close();
$db->close();
通知:请确保在生产环境中运行此程序之前先进行错误检查
最后,如果不确定如何使用mysql,则将其忽略或将页数保存到文件中可能会更容易。
答案 1 :(得分:1)
尝试使用PHP会话。
使用session_start()函数启动会话。
使用PHP全局变量$ _SESSION设置会话变量。
答案 2 :(得分:0)
如果您只需要在没有其他任何增加的情况下增加计数器,则可以将当前计数器的值存储在服务器上的.txt文件中,并每次使用它来检查当前值,然后在之后增加1您的表格已发送。
但是,正如Kevin所说,最好的方法是用php将其存储在一个小型数据库中。
答案 3 :(得分:0)
如果您不想使用数据库,那么在文件中执行此操作的最佳方法是简单地添加新行。
当尝试更新文件中存储的值时,您必须读取该值,在PHP中进行更改,然后保存。如果不对文件进行排他锁,则可能会出现并发和竞速问题。基本上有2个进程可以读取它,一个进程将其递增,然后另一个进程将旧值递增,因此您错过了递增或更差的值。
因此,您可以仅添加一个新行,然后更新计数就不会涉及任何读取。
file_put_contents($filename, "1\n", FILE_APPEND);
那么我们如何计算文件中的行数,即行数等于增量数。
$Obj = new SplFileObject($filename, 'r');
$Obj->seek(PHP_INT_MAX); //seek to the max PHP int, or the end of the file
$line = $Obj->key();
答案 4 :(得分:-1)
您应该在PHP中管理计数器,并在表单页面中显示更新的值。您可以将值存储在数据库中。