PHP号码增量问题

时间:2011-06-07 12:32:24

标签: php increment

我有一个简单的表单,其中包含名称和消息字段。当用户提交表单时,页面显示用户输入的用户ID号,并在提交时创建文件“data.db”,如果服务器中不存在该文件。每次存储新提交时,用户ID号将从1开始并递增1。

该文件具有以下格式:

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

但是,我在显示用户编号时遇到问题,每次提交表单时它都只保持1。

我创建的变量$ userid似乎根本没有递增......

这是用于在表单提交后显示数据的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!";
     ?>

2 个答案:

答案 0 :(得分:3)

$ userid的值不会保留在页面的不同负载上。您可以将它存储在$ _SESSION全局中以访问它,但这只有在(a)您正在使用会话时才会起作用,并且(b)它是同一会话中同一终端上的同一用户。

我认为你想要的是当任何用户查看页面时要使用(并递增)的值。因此,您需要将值存储在文件或SQL数据库中。在页面加载时查找,增加它,将其写回磁盘。但是你有同时访问的问题 - 如果两个用户同时打开页面会怎么样 - 你可能无法获得一个唯一的[递增]数字。

我建议使用某种SQL后端,让它自动生成一个唯一的ID以便在输出中使用,从而保证每次都有一个唯一的用户ID。

答案 1 :(得分:1)

正如我在评论中所写,您的脚本无法知道它的调用频率。所以你必须永久存储用户ID。

你可以使用它(警告:我没有处理文件处理,例如,当在同一时间提交2个表格时):

<?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!";
 ?>