if ($_POST[submit]) {
submit gibt es nicht.
Ja, darum castet PHP auch automatisch nicht existierende Konstanten zu Strings - dass (und warum) das schlechter Stil ist, weiß die Dokumentation.
mit einer 0 = NULL überschreibt..
0 != '' != NULL
Du updatest ja auch einfach wahllos alle Datensätze.
Und überschreibst die Felder handwerker, einheit und id vermutlich jeweils mit einem Leerstring. Ich geh aber davon aus, dass nicht in jedem der Felder tatsächlich ein String erwartet wird.