How about this idea:
table bookings (starts off empty, but filled up with blanks)
===========
date | am1 | am2 | pm1 pm 2
----------------------------
2010-02-14 | null | null | null | null
Denzel Washington books a morning slot, he is client number 77.
table clients
==========
id | name | etc
----------------
77 | Denzel Washington | etc
Booking table becomes:
2010-02-14 | 77p | null | null | null
Your man decides its not spoof and books him in
2010-02-14 | 77 | null | null | null
GUI shows:
2010-02-14 | am : Only 1 place remaining | pm: Free for 2 bookings, book now!
Matt Damon books a morning slot, he is client number 78.
table clients
===========
id | name | etc
--------------
77 | Denzel Washington | etc
78 | Matt Damon | etc
Booking table becomes:
2010-02-14 | 77 | 78p | null | null
GUI shows:
2010-02-14 | am : Only 1 place remaining which is only provisionally booked, you could try again later | pm: Free for 2 bookings, book now!
Your man decides its not spoof and books him in
2010-02-14 | 77 | 78 | null | null
GUI shows:
2010-02-14 | am : Sorry all booked up for this morning | pm: Free for 2 bookings, book now!
Create special user #1 in your clients table
table clients
===========
id | name | etc
--------------
1 | Staff holidays
77 | Denzel Washington | etc
78 | Matt Damon | etc
When Jeff, the 2nd worker is on hols for 3 days do this beforehand:
2010-07-13 | 1 | null | 1 | null
2010-07-14 | 1 | null | 1 | null
2010-07-15 | 1 | null | 1 | null
If you need help working out how PHP would format that then ask.
Would that work? Anyone else got any ideas?