1. Ну на счет $def - случайность :) А если $form:do не указана, то она и сравниваться не будет, так?
2. ^form:id.int(0) - если не укзаана $form:id, или она не является не чилом, тогда нам будет возвращен ноль, а потом мы пытаемся из базы вытащить запись с номером ноль. Может быть лучше все это в try?
3. В каком порядке разбирал ошибки - в том и написал не задумываясь :)