存储在.txt文件中的计数器不递增

时间:2016-02-17 09:24:51

标签: php html counter file-access

所以我刚刚编辑了我发布的代码,以便更好地阅读...
第一个代码块是我的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是一个代码被错误的页面。

2 个答案:

答案 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");
  }
?>  

希望这对你有所帮助! :)