Registration Data
The first thing we want to know is what do we want to ask people. There are some obvious items here, but new ones always crop up. Think of every possible situation you could want to know, and then ask someone else the same question and see what elese they come up with!
The way these questions are asked is also very important. We also note that not everyone who will be reading this will understand English (you could easilly put in support for multiple languages...).
Presenting the user with the form will be a four stage process:
- Show the form for the user to fill in
- Show the form for the user to verify (and not change anything) If they dont like it, they can edit and repeat this stage
- Save the data, and redirect the user to the next phase (so this step is almost invisible to the user
- Thank the user, and give them the option to now pay....
When showing the form, we have two three possibilities:
- we have no data from the user yet, and want the user to enter it
- we have data, and want the user to verify it and not edit it (ie, it is ready to be saved)
- we have data, and want the user to update it
Simple Questions
Some of the easier parts of this are:
- Name
- Postal Address
- Email Address
Email Address
Email address is a relatively simple case to deal with; we want to mandate that everyone who registers must have an email address, and this address must meet some standard validation conditions. For example, a regular expression test can be set up to ensure that there is at least one character before the first '@' symbol, and two-level domain name ('blah.com') after it. Anything that doesn't match this minimal constraint is not valid for Internet SMTP systems, so we can reject it. We could send a message to this address, asking the user to visit a special URL (eg, 'www.linux.conf.au/register/iamreal.cgi?id=01231232') to ensure that this registration entry does have a valid email address, but this will slow down some users, and will annoy some people. The choice is yours, as this is easy to implement.
Name
Some people have different ideas about their name. Some people have aliases. Some people have only one name (eg, Madonna). Some people put their surname (family name) first. Do we want to mandate a first and last name? Not really, as we only want the name they go by so we can put it on their name badge as they would; we chose to leave this as one field that people would enter in freely (up to some size, eg, 100 characters?).
Postal Address
A physical mailing address, or a residential address? For our purposes, we didn't want to go and meet/stay with people, but wanted to be able to post them a CD of the proceedings (eg, pictures, electronic copies of the presentations). Looking at a postal address, we can work in reverse and see the simple bits can be their own questions, which aids in validation:
- Country (freeform, or a list)
- State/County/Region (freeform, because the list is far too long
- Postcode/Zip (free form, becasue some countries use digits, some use alphanumerics)
Validating this data is not simple, so we can leave this as freeform, with just length validation (eg, greater than 2 characters, shorter than 100?). This leaves just a street address, which again has to be freeform, since it may be a Post Office Box, a house, a flat and street number, or just a name (eg, "Bag End").
Registration Types
For our event, we had three different registration types: student/concession, hobbyist, and professional, each of which were charged at different rates. We had this as a list, and displayed it as a drop-down selection when permitting the user to chose.
T-Shirt size
We hacked this in, but it should have been much cleaner as a table in the database.
Special Requirements
This is vital. Some people are vegitarian. Some people are alergic to various substances. If you are going to feed people, you need to know this. You may also want to ask people what their alergies/medical conditions are. We had one situation where an attendee was unable to talk and had to be admitted to hospital for a few hours; what data do you need here on someone you don't know (next of kin? religion? health care cover? travel insurance? blood type?).
We also used the special requirements field as our back door for our freebies: speakers, organisers, sponsors, and services-in-kind. We had everyone in our database, which made it easy to know our capacities for venues. We issued people with special codes and instructions on how to use them, and these codes provided a percentage discount (eg, 100%), but these codes were only valid a certain number of times, typically once.
James Bromberger (james_AT_rcpt.to)
hosted by Pelican Manufacturing.