Martin van den Berg <[EMAIL PROTECTED]> writes:

> I have this piece of php-code which inserts data into a database.
> Before inserting it must verify if the data is unique. The php code
> looks something like:
> 
> $query = "SELECT id FROM mytable WHERE bla LIKE " . $x .";
> $rows = execute( $query )
> if ( $rows == 0 )
> {
>    /* some more processing */
>   $query = "INSERT INTO mytable ...... etc etc
>   execute( $query )
> }
> 
> Now here is the problem: when the user enters the page, and directly
> refreshes the record is inserted twice.... Is is possible that both
> requests are processed simulatiounsly by the server (apache on linux)?
> And can I add something like a critical section or semaphore to
> overcome this problem.
> 

There are 2 ways to handle this problem -

- create a UNIQUE index on whatever columns you want to be unique in
  your database.  This way, when the user refreshes the page, the second
  insertion will fail.  Of course, it means you will need to handle the
  "duplicate key" error that the database will throw up gracefully.

- When the page loads, check if the $_SESSION["_insert_success"] is
  set.  If not, then do the insert part and if the insert is successful,
  set $_SESSION["_insert_success"]=true.  If the variable is set, then
  do not do the insert part , simply display the page again.
-- 
Raj Shekhar                        
blog : http://rajshekhar.net/blog  home : http://rajshekhar.net
Disclaimer : http://rajshekhar.net/disclaimer 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to