Per that hidden field, I see what you are saying. No JS enabled = no onload handler. But if the field is hidden, then how could they fill this in by hand? I don't follow you there.
I think ultimately that, yes, I should do both types of validation, as you say. I was thinking "either-or" instead of just doing both. If they have JS enabled, then that should catch any errors on the client. And, assuming everthing works properly, they will never see the server side PHP validation forms, as all input errors will have been corrected. If JS is not enabled, and they have input errors, then they WILL see my PHP validation forms.
The only downside I can see to this is that the extra PHP form will be in the loop no matter their configuration. IOW, even if there are no errors, the server must still send the form to the client for the validation check. And the idea is to put this burden on the client, not the server. But with CPU and modem speeds as fast as they are these days, does this even matter anymore? I suppose it does if you count hits against the server, however. What are your thoughts on that?