2014-10-30 175 views
2

我有一個.php腳本來計算一個按鈕的點擊並將它們放到一個.txt文件中,這裏一切都很好,但我現在只有一個計數。如果我們說,我做了兩個按鈕,它們將顯示相同的點擊次數。PHP點擊計數器

我需要的腳本工作分開的foreach按鈕...

PHP:

if(isset($_POST['clicks'])) { 
    incrementClickCount(); 
} 

function getClickCount() 
{ 
    return (int)file_get_contents("clickit.txt"); 
} 

function incrementClickCount() 
{ 
    $count = getClickCount() + 1; 
    file_put_contents("clickit.txt", $count); 
} 

HTML:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="submit" value="click me!" name="clicks"> 
</form> 
<div>Click Count: <?php echo getClickCount(); ?></div> 
+0

而是在文件中寫入的點擊次數的,我們不能只用一個全局變量? – prava 2014-10-30 09:39:29

+2

全局變量不起作用,因爲它只存在於相同的請求中,所以多個請求不會更新該數字。 – DaveG 2014-10-30 09:40:41

回答

3

你應該嘗試不同的方法,我想。首先,在文件中保存點擊比在數據庫中緩慢,所以你應該使用數據庫而不是文件。

然後,您可以創建一個表,其中button_id字段和相應的click_number字段。因此,如果單擊了id="1"的按鈕,則會爲該按鈕增加click_number值。

+2

確實,使用數據庫比使用txt文件更好。提問者應該考慮使用數據庫。 – DaveG 2014-10-30 09:50:50

+0

嗯,我想我沒有別的選擇,只能爲我的功能使用數據庫,我想將點擊計數器存儲在根.txt文件中。在不久的將來,我需要創建一個離線應用程序,將這些點擊放入圖表中。 – Alin 2014-10-30 09:57:53

+0

如果你真的想改善你的腳本,你必須計算JS中的clics然後存儲它們。 使用PHP這很荒謬,我認爲這是某種類的練習。 – Eagle1 2014-10-30 10:13:13

1

你可以給第二個按鈕的另一個名字,並保存數據在另一個文件?

另一種可能性是將所有按鈕信息保存在同一文件中,通過使用例如「 explodeimplode

[編輯:示例]

if(isset($_POST['clicks'])&& isset($_POST['buttonnumber'])) 
{ 
    incrementClickCount($_POST['buttonnumber']); 
} 

function getClickCount($num=0) 
{ 
    $clickinfo = explode(":",file_get_contents("clickit.txt")); 
    return (int)$clickinfo[$num]; 
} 

function incrementClickCount($num=0) 
{ 
    $clickinfo = explode(":",file_get_contents("clickit.txt")); 
    $clickinfo[$num]++; 
    file_put_contents("clickit.txt", implode(":",$clickinfo)); 
} 
+0

由於我將有兩個以上的按鈕,將涉及(估計52)和保存在根.txt文件中的數據較慢,我不認爲給這個按鈕另一個名稱,並將其保存在另一個文件將是最好的解決方案。 52按鈕= 52 .txt文件=>痛苦在服務器的後面。說實話,我不太清楚如何使用內爆/爆炸會起作用。 – Alin 2014-10-30 09:52:31

+0

請參閱我的更新瞭解有關implode/explode的示例。點擊數據存儲在文本文件中,以「:」 – DaveG 2014-10-30 10:00:14

+0

+1爲例進行分隔,謝謝! :)也會測試這個。 – Alin 2014-10-30 10:01:04

0

如果兩個按鈕調用相同的功能:

function incrementClickCount() 
{ 
    $count = getClickCount() + 1; 
    file_put_contents("clickit.txt", $count); 
} 

那麼你當然會得到只有一個櫃檯。

您可以讓一個按鈕變成另一種形式的調用另一個函數或做類似:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="submit" value="click me!" name="clicks"> 
    <input type="submit" value="click me!" name="clicks2"> 
</form> 
<div>Click Count: <?php echo getClickCount(); ?></div> 

if(isset($_POST['clicks'])) { 
    incrementClickCount("button1"); 
} 
if(isset($_POST['clicks2'])) 
{ 
    incrementClickCount("button2"); 
} 

function incrementClickCount($button) 
{ 
if($button == "button1") 
{ 
    $count = getClickCount() + 1; 
    file_put_contents("clickit.txt", $count); 
} 
elseif($button = "button2") 
{ 
// other counter 
} 

} 
0

你必須使用會話。如果尚未初始化,則首先將會話變量初始值設置爲1。初始化後,從第2個點擊它會計算+1到每一次點擊,因爲它會滿足else語句

<?php 
session_start(); 
?> 
<html> 
    <head></head> 
    <body> 
     <form method="post" action="submit.php"> 
      <input type="submit" name="count" value="Start counting" /> 
     </form> 
     <?php 
     if(isset($_POST['count'])){ 
      if(!($_SESSION['count'])){ 
       $_SESSION['count'] = 1; 
      }else{ 
       $count = $_SESSION['count'] + 1; 
       $_SESSION['count'] = $count; 
      } 
     } 
     echo $_SESSION['count']; 
     ?> 
    </body> 
</html>