Проблема с увеличением числа PHP - PullRequest
2 голосов
/ 07 июня 2011

У меня есть простая форма, которая имеет имя и поля сообщения. Когда пользователь отправил форму, на странице отобразится идентификационный номер пользователя, введенный пользователем, и файл «data.db» будет создан после отправки, когда он не существует на сервере. Идентификационный номер пользователя будет начинаться с 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 ]

3 голосов
/ 07 июня 2011

Значение $ userid не сохраняется при разных загрузках страницы.Вы можете сохранить его в глобальном $ _SESSION для доступа к нему, но это будет работать, только если (а) вы используете сеансы и (б) это один и тот же пользователь на том же терминале в том же сеансе.

Я думаю, что вы хотите, чтобы это значение использовалось (и увеличивалось), когда любой пользователь просматривает страницу.Поэтому вам необходимо сохранить значение, скажем, в файле или базе данных SQL.Посмотрите на загрузку страницы, увеличьте ее, запишите обратно на диск.Но тогда у вас возникают проблемы с одновременным доступом - что, если два пользователя открывают страницу одновременно - вы можете не получить уникальное [увеличенное] число.

Я бы предложил использовать какой-нибудь SQL-сервер и иметь его автоматически-генерируйте уникальный идентификатор для использования в выводе, таким образом гарантируя вам каждый раз уникальный идентификатор пользователя.

1 голос
/ 07 июня 2011

Как я уже писал в комментарии, ваш скрипт не знает, как часто он вызывается.Таким образом, вы должны хранить постоянный идентификатор пользователя.

вы можете использовать это (ВНИМАНИЕ: я не занимаюсь обработкой файлов, например, когда 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!";
 ?>
...