Jump to content

Recommended Posts

I don’t know if this can be accomplished with php, html, javascript.

 

Anyway, I have a form that I want to be submitted to a php file that will create a pdf with the data from the form. This part I know how to do.

 

However, whenever the form is submitted I want to create an auto increment number every time the form is submitted.

 

I know this could be accomplished with a database that stores the form data and keep track of the number sequencing.

 

Since I don’t have a database, I want to know if there is another way to accomplish this.

 

Do I create a text file and record the last number in the file and read from that file to see what number to use next?

 

Does php have a function that I can use to keep track every time a php scripts is ran or can this be accomplish with javascript/html?

You have to store the number somewhere on the server and use PHP to control access to it. Any javascript solution is unreliable and would only work for a single client.

 

If you cannot use a database then that leaves you with storing the number in text file. You'll need to create a file with the starting number then write code that will read the current number, increment it, and write it back out to the file. During this read/write process you also need to lock the file to prevent concurrent script executions from interfering with each other.

 

To do this you'll be using the fopen, fread, fwrite, rewind, ftruncate, flock, fflush and fclose functions.

 

For example

<?php
$filename = 'counter.txt';

$fp = fopen($filename, 'r+');
if (!$fp){
    die('Could not open file.  Create it first.');
}

echo 'Attempting to acquire lock'.PHP_EOL;
if (flock($fp, LOCK_EX)){
    echo 'Lock has been acquired'.PHP_EOL;
    $value = trim(fgets($fp));
    rewind($fp);
    ftruncate($fp, 0);
    fwrite($fp, $value+1);
    echo 'Read value '.$value.'; Incremented value to '.($value+1).' and wrote it back'.PHP_EOL;
    echo 'Pausing for a while for testing'.PHP_EOL;
    sleep(10);
    fflush($fp);
    flock($fp, LOCK_UN);
    echo 'Lock has now been released'.PHP_EOL;
}
fclose($fp);
echo 'Finished'.PHP_EOL;

First the script opens the file containing the number for read/write access. Next it attempts to acquire an exclusive lock on the file. The script will pause on this line until the lock can be acquired. Once the lock is acquired it means that no other instances of the script can access the file until the lock is released (they will pause instead).

 

After acquiring the lock we read the current value of the file. We then clear the file's existing contents by moving the pointer back to the start and truncating the file to 0 length. The new value is then written to the file.

 

The sleep is there just for testing so you can try running multiple copies of the script and see how they wait on each other due to the locking.

 

Next the file is flushed to disk and unlocked and closed so that other scripts can access it.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.