Anti-MySQL Injection
[indent]Don't forget to use [man]mysql_real_escape_string/man on strings[/indent]
Locking tables
[indent]Really, this can become a big issue if you're not careful. If you have multiple users trying to lock the table, you can run into collisions and it's something to be weary of. If you want to "lock" the data during update, possibly use InnoDB table type which can do row-level locking or use PostgreSQL[/indent]
MySQL Close
[indent]Typically you can free memory on the server by closing the connection. Although once the script is finished executing, the connection will be severed (unless you use persistent connection).[/indent]
Using Functions
[indent]Entirely up to you. Typically the more modular you make it, the easier it can be to understand, and you can eventually create one library of functions for use in any page. Then it's a matter of calling the proper functions to get the information you want.[/indent]
Any Others
[indent]I would suggest using a templating system (SMARTY, or your own flavor of template system) to help reduce differences between pages.
I'd also suggest using an outside email system (like HTMLMimeMail) as your emailer so that's one less item for you to "worry" about.[/indent]
The other options are just opinions, but it can make things better and easier to maintain sometimes.