2011-06-07 73 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