2011-06-07 41 views
2

我有一個簡單的表單,它有一個名稱和一個消息字段。用戶提交表單時,頁面會顯示用戶輸入的用戶標識號,並且在服務器中不存在時會提交一個「data.db」文件。每次存儲新提交時,用戶標識號都將從1開始並增加1。PHP數字增量問題

該文件的格式如下:

1|{name1}|{gender1}|{email1}|{phone1} 
2|{name2}|{gender2}|{email2}|{phone2} ... 

與顯示器的用戶數量,它只是每個表單提交時間停留在1不過,我有麻煩。

我創建的變量$用戶標識似乎並不在所有遞增......

這是用於表單提交後顯示數據PHP代碼...

<?php 
    include("email.php"); 

    $userid += 1; 

    echo "<b><u>Your submission has been added!</u></b> <br />"; 
    echo "User ID: " . $userid . "<br /><br />"; 
    echo "Name = "; 
    echo $_POST["name"]; 
    echo "<br /> Gender = "; 
    echo $_POST["gender"]; 
    echo "<br /> E-Mail = "; 
    echo $_POST["email"]; 
    echo "<br /> Phone No. = "; 
    echo $_POST["phone"]; 
    echo "<br />"; 
    echo "<p>Thank You</p>"; 

    $entry = $userid . "|" . $_POST["name"] . "|" . $_POST["gender"] . "|" . $_POST["email"] . "|" . $_POST["phone"] . "\n"; 

    file_put_contents("data.db", $entry, FILE_APPEND|LOCK_EX); 

    echo "Confirm email sent!"; 
    ?> 
+3

你在哪裏初始化'$ userid'? – 2011-06-07 12:33:59

+0

你的腳本不知道它被調用的頻率。所以userid將永遠是一個。你可以使用_SESSION,如果它基於同一個用戶在同一個會話中,或者你必須將增量值永久存儲(如在db或文件中) – Rufinus 2011-06-07 12:37:34

回答

3

值$ userid不保存在頁面的不同負載上。您可以將其存儲在全局的$ _SESSION中以便訪問它,但只有在以下情況下才有效:(a)您正在使用會話,以及(b)它在同一會話的同一終端中是同一用戶。

我想你想要的是當任何用戶查看頁面時使用的值(並增加)。因此,您需要將該值存儲在文件或SQL數據庫中。在頁面加載時查找它,增加它,將其寫回到磁盤。但是,如果兩個用戶同時打開該頁面,則會遇到同時訪問問題 - 您可能無法獲得唯一的[增加]數字。

我建議使用某種SQL後端,並讓它自動生成一個唯一的ID在輸出中使用,從而保證您每次都有一個唯一的用戶ID。

1

正如我在評論中寫的,你的腳本無法知道它被調用的頻率。所以你必須存儲用戶標識符。

你可以使用這個(警告:我不照顧filelhandling的,例如,當2種形式完全相同的時間submited。):

<?php 
include("email.php"); 
include('counter.php'); 

$userid += 1; 

file_put_contents('counter.php', '<?php $userid = '.$userid.';'); 

echo "<b><u>Your submission has been added!</u></b> <br />"; 
echo "User ID: " . $userid . "<br /><br />"; 
echo "Name = "; 
echo $_POST["name"]; 
echo "<br /> Gender = "; 
echo $_POST["gender"]; 
echo "<br /> E-Mail = "; 
echo $_POST["email"]; 
echo "<br /> Phone No. = "; 
echo $_POST["phone"]; 
echo "<br />"; 
echo "<p>Thank You</p>"; 

$entry = $userid . "|" . $_POST["name"] . "|" . $_POST["gender"] . "|" . $_POST["email"] . "|" . $_POST["phone"] . "\n"; 

file_put_contents("data.db", $entry, FILE_APPEND|LOCK_EX); 

echo "Confirm email sent!"; 
?> 
+0

啊。好。也許我可以用'0'作爲內容創建一個名爲「userid.txt」的文本文件。讓腳本讀取值,然後將值增加1並重新保存文件? – Jason 2011-06-07 12:50:18

+0

爲什麼一個文本文件...使用我的代碼它寫入一個phpfile與userid變量。並自動包含它。 (你應該使用'<?php $ userid = 0創建counter.php;'當然是第一次運行。「 – Rufinus 2011-06-07 12:53:21

+0

噢好了,謝謝。:) – Jason 2011-06-07 12:56:23