BTW, I'm assuming you don't allow editing or deleting of the signup forms, whereby the number of bookings on a course might change? The above obviously only handles the case of adding a new booking. If you then delete a booking, the spaces on the course would not get changed to reflect that.
That's why I typically recommend using a MySQL view to show a view of a "courses" (or whatever) table, where the available slot count (spaces, whatever you want to call them) is calculated on the fly, by joining and counting related rows on table(s) which "consume" those slots.
So the "courses" table then has a static number, "max_slots", and the view does something like ...
Code:
CREATE VIEW courses_with_slots AS SELECT courses.*, COUNT(bookings.*) AS booked_slots, courses.max_slots - COUNT(bookings.*) AS available_slots FROM courses LEFT JOIN bookings ON bookings.course_id = courses.course_id
NOTE - that's just an imaginary query as an example, it doesn't use your table names, etc.
That query also assumes each booking consumes one slot. If the bookings table allows for a variable number of slots ("Number of attendees:"), the query is a little more complicated, but the concept is the same. You aren't trying to micro-manage the available slot count as part of the form submission / edit / row deletion process, you are deriving it on the fly from the row data.
You can then add a second Fabrik list based on that view for display purposes, while using the original courses table for adding, editing and modifying course data.
-- hugh