2016-02-17 21 views
-1

所以我剛剛編輯了我發佈的代碼,使其更好讀...
這第一塊代碼是我的計數器代碼用於點擊一個成功的子彈按鈕。但由於某種原因,即使這是一個成功的子彈,$ Total的價值也不會增加1。計數器存儲在.txt文件中不增加

<?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); 
?> 

這裏是我用來提交表單的子按鈕。

<input type="reset" value="Formular löschen" style="width:49%" /> 
<input type="submit" name="submit" value="Formular absenden" style="width:49%" /> 

我試着這樣,當人們提交表單他們得到的REFFERENCE號碼在發送的電子郵件也發送給他們數使用該男女同校爲我的俱樂部。

我真的希望沒有數據庫的情況下有這樣做的方法。

馬克

如果你要明白我的意思是什麼問題,here是impelemented代碼的頁面。

+0

網站即時工作的時刻是http://www.acherner-bogenclub.de/contakt1.php如果你想看看我的意思 – Mark

+0

請儘量減少代碼量或使它更具可讀性 – Asur

+0

@asur我該怎麼做,因爲我在這裏新呢?我認爲顯示所有的PHP腳本是重要的... – Mark

回答

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

希望這可以幫助你! :)

+0

謝謝你,現在它已經算了很多子彈的數量,但是im堅持讓它進入從表單設置的電子郵件。 – Mark

+0

歡迎,電子郵件是一個不同的問題,第一次嘗試做你的自我,如果努力嘗試之後,你就不能讓它發佈新問題的工作,如果答案澄清你的問題只是打勾,使人們可以找到它,解決了類似的情況:) – Asur

+0

好感謝@asur – Mark

1

發生這種情況是因爲在將其寫入文件之前,您從未設置過$total。 你需要設置$total通過從文件中讀取它的值,如下所示: $total = fgets ($f)fopen之後的函數調用。

但是,如果沒有獨佔文件鎖定,您可能會遇到併發問題,因此您可能會丟失一些提交計數。

相關問題