Jjeśli już robisz strukturalnie, to wypadało by sprawdzić czy zapytanie z INSERT się wykonało i czy choć jeden rekord został dodany, zanim wywołasz mysql_insert_id

Innymi słowy oprócz tego że to ma być int a nie varchar, myślę że bezpieczniejszym rozwiązaniem byłoby albo walnąć wszystko jako transakcję, albo jeśli nie jesteś aż tak obciążany:
$insert = mysql_query("INSERT INTO `$table` SET $set"); }
Bez tego może dojść do sytuacji, że będziesz próbował ustawić $id_ zarówno dla insert jak i update choć żaden z nich nie zwróci informacji iż zmiany/dodanie zaszły, bo mogło do nich nie dojść, czego powody mogą być różne: wyczerpał się limit dla autoincrement, nie doszło do zmian w rekordzie (update z danymi mimo poprawnego zapytania zwróci dla mysql_query prawdę, ale już 0 dla affected_rows ) lub podobne atrakcje.