$value) { $update_fields[] = "{$key} = '" . sql_real_escape_string($value) . "'"; } $update_sql .= implode(', ', $update_fields); $update_sql .= ", me_updated_by = '{$admin_id}', me_updated_at = '{$now}' WHERE me_id = '{$me_id}'"; sql_query($update_sql); $data_after = array_merge($original, $changes); sql_query("INSERT INTO g5_menu_history SET me_id = '{$me_id}', mh_action = '수정', mh_data_before = '" . sql_real_escape_string(json_encode($original, JSON_UNESCAPED_UNICODE)) . "', mh_data_after = '" . sql_real_escape_string(json_encode($data_after, JSON_UNESCAPED_UNICODE)) . "', mh_editor = '{$admin_id}', mh_ip = '{$current_ip}', mh_datetime = '{$now}'"); } } else { // 4. me_id가 없으면 '신규' 메뉴 등록 처리 $sql = "INSERT INTO {$g5['menu_table']} SET me_parent_id = '{$me_parent_id}', me_depth = '{$me_depth}', me_name = '" . sql_real_escape_string($me_name) . "', me_link = '" . sql_real_escape_string($me_link) . "', me_target = '" . sql_real_escape_string($me_target) . "', me_order = '{$me_order}', me_use = '{$me_use}', me_mobile_use = '{$me_mobile_use}', me_level = '{$me_level}', me_level_opt = '{$me_level_opt}', me_created_by = '{$admin_id}', me_updated_by = '{$admin_id}', me_created_at = '{$now}', me_updated_at = '{$now}'"; sql_query($sql); $new_me_id = sql_insert_id(); // 💡 [핵심] 새로 생성된 DB ID를 임시 ID와 매핑 if ($is_new) { $temp_id_map[$me_id_input] = $new_me_id; } $data_after = sql_fetch("SELECT * FROM {$g5['menu_table']} WHERE me_id = '{$new_me_id}'"); sql_query("INSERT INTO g5_menu_history SET me_id = '{$new_me_id}', mh_action = '생성', mh_data_after = '" . sql_real_escape_string(json_encode($data_after, JSON_UNESCAPED_UNICODE)) . "', mh_editor = '{$admin_id}', mh_ip = '{$current_ip}', mh_datetime = '{$now}'"); } } // 5. 화면에서 넘어오지 않은 메뉴는 '삭제'된 것으로 간주하고 처리 (Soft Delete) $deleted_ids = array_diff(array_keys($original_menus), $submitted_ids); if (!empty($deleted_ids)) { foreach ($deleted_ids as $del_id) { $original = $original_menus[$del_id]; sql_query("UPDATE {$g5['menu_table']} SET me_deleted_at = '{$now}', me_updated_by = '{$admin_id}', me_updated_at = '{$now}' WHERE me_id = '{$del_id}'"); sql_query("INSERT INTO g5_menu_history SET me_id = '{$del_id}', mh_action = '삭제', mh_data_before = '" . sql_real_escape_string(json_encode($original, JSON_UNESCAPED_UNICODE)) . "', mh_editor = '{$admin_id}', mh_ip = '{$current_ip}', mh_datetime = '{$now}'"); } } run_event('admin_menu_list_update'); goto_url('./menu_list.php');