Joe didn't even fill in his last name. He didn't even try with his email address. We indicate to him that there is a problem with his submission with some generic text and highlight the fields that need to be corrected. In this example, the only field that could warrant an explanation is the zip code field. However, the marked fields should do fine and there is only a very small chance that Joe will get confused.
Some people like to pick a form field and test it for a value.
This subroutine simply writes the HTML for the form. Still, I don't like this method much. Most likely, when Joe User first visits your form page, his browser will use the GET method. This holds the root-relative path as well as the filename of the current script. Also fairly simple.