首页 > 解决方案 > 如何在 php 表单重定向后增加一个数字?

问题描述

我正在为网站构建一个简单的计数显示,我需要它仅在表单成功提交后才增加。该表单是一个简单的 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 函数中进行重定向以转到表单邮件程序脚本,但由于在重定向发生时没有表单信息而导致无法正常工作的明显原因。

提前致谢!

标签: javascriptphphtml

解决方案


有两种方法:

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,则将其忽略或将页数保存到文件中可能会更容易。


推荐阅读