所以我刚刚编辑了我发布的代码,以便更好地阅读...
第一个代码块是我的Counter Code,用于成功的submition按钮上的命中。但由于某种原因,即使这是一个成功的下属,$ Total的价值也不会增加1。
<?php
$f = fopen('count.txt', 'r+'); // use 'r+' instead
$total = fgets ($f);
flock($f, LOCK_EX); // avoid race conditions with concurrent requests
$total = (int) fread($f, max(1, filesize('count.txt'))); // arg can't be 0
/*if someone has clicked submit*/
if (isset($_POST['submit'])) {
rewind($f); // move pointer to start of file so we overwrite instead of append
fwrite($f, ++$total);
}
fclose($f);
?>
这是我用来提交表单的submition按钮。
<input type="reset" value="Formular löschen" style="width:49%" />
<input type="submit" name="submit" value="Formular absenden" style="width:49%" />
我试图将这个男女同校用于我的俱乐部,以便当人们提交表格时,他们会将这个号码作为参考号码发送给他们的电子邮件。
我真的希望在没有数据库的情况下有一种方法可以做到这一点。
标记
如果你想知道我的意思是什么问题,here是一个代码被错误的页面。
答案 0 :(得分:1)
这是因为您在将$total
写入文件之前从未设置过$total
。
您需要通过从文件中读取其值来设置$total = fgets ($f)
,如下所示:
fopen
函数调用后POST
。
但是,如果没有独占文件锁定,您可能会遇到并发问题,因此可能会丢失一些提交数量。
答案 1 :(得分:1)
首先,在操作文件时,您可能会发现一些有用的提示:
我认为你错过了<form>
标签,所以我不得不发明自己的标签。
使用此代码作为指南来制作您自己的代码:
<form method="post" action="test.php">
<input type="submit" name="submit" value="Submit" />
</form>
<?php
// Thread-safe <-- Use me
function incrementFile ($file){
$f = fopen($file, "r+") or die("Unable to open file!");
// We get the exclusive lock
if (flock($f, LOCK_EX)) {
$counter = (int) fgets ($f); // Gets the value of the counter
rewind($f); // Moves pointer to the beginning
fwrite($f, ++$counter); // Increments the variable and overwrites it
fclose($f); // Closes the file
flock($fp, LOCK_UN); // Unlocks the file for other uses
}
}
// NO Thread-safe
function incrementFileSimplified ($file){
$counter=file_get_contents('count.txt');
$counter++;
file_put_contents('count.txt', $counter);
}
// Catches the submit
if (isset($_POST['submit'])) {
incrementFile("count.txt");
}
?>
希望这对你有所帮助! :)