set_charset("utf8mb4"); } return $conn; } /*********************** * Rotas AJAX ***********************/ if (isset($_GET['action'])) { header('Content-Type: application/json; charset=utf-8'); try { if ($_GET['action'] === 'animals') { // Busca animais pelo CPF (exato). Se quiser aceitar prefixo, troque para LIKE CONCAT(?, '%') $cpf = trim($_GET['cpf'] ?? ''); if ($cpf === '') { echo json_encode([]); exit; } $sql = " SELECT ani.codigo, ani.nome_ani FROM cli JOIN animais ani ON ani.id = cli.CPF WHERE cli.CPF = ? ORDER BY ani.nome_ani "; $stmt = db()->prepare($sql); $stmt->bind_param('s', $cpf); $stmt->execute(); $res = $stmt->get_result(); $out = []; while ($row = $res->fetch_assoc()) { $out[] = $row; } echo json_encode($out); exit; } if ($_GET['action'] === 'query') { // Executa a sua query (UNION ALL) filtrando por CPF e por COD_ANIMAL selecionado $cpf = trim($_GET['cpf'] ?? ''); $codAnimal = trim($_GET['cod_animal'] ?? ''); if ($cpf === '' || $codAnimal === '') { echo json_encode(['error' => 'CPF e Animal são obrigatórios.']); exit; } // A query abaixo é a SUA, apenas adicionei o filtro do animal (ani.codigo = ?) $sql = " -- Parte 1: dados de procedimentos SELECT cli.nome AS Tutor_Nome, cli.CPF AS Tutor_CPF, ani.codigo AS Cod_Animal, ani.nome_ani AS Nome_Animal, lp.data_proced AS Data_Abertura, lp.vet AS Vet_Responsavel, al.id_ana AS ID_Anaminese, al.id_campo AS ID_CAMPO, al.valor AS Anamnese, 'Procedimento' AS Origem, NULL AS Retorno_Descricao, NULL AS Retorno_Data, NULL AS Retorno_Vet FROM cli JOIN animais AS ani ON ani.id = cli.CPF JOIN lanc_proced AS lp ON ani.codigo = lp.codigo_ani JOIN anamnese_lancamentos AS al ON lp.codigo = al.id_ana WHERE cli.CPF = ? AND ani.codigo = ? UNION ALL -- Parte 2: dados de retornos SELECT cli.nome AS Tutor_Nome, cli.CPF AS Tutor_CPF, ani.codigo AS Cod_Animal, ani.nome_ani AS Nome_Animal, r.DATA AS Data_Abertura, r.VETERINARIO AS Vet_Responsavel, NULL AS ID_Anaminese, NULL AS ID_CAMPO, NULL AS Anaminese, 'Retorno' AS Origem, r.DESCRICAO AS Retorno_Descricao, r.DATA AS Retorno_Data, r.VETERINARIO AS Retorno_Vet FROM cli JOIN animais AS ani ON ani.id = cli.CPF JOIN retornos AS r ON ani.codigo = r.COD_ANIMAL WHERE cli.CPF = ? AND ani.codigo = ? ORDER BY Data_Abertura, Origem "; $stmt = db()->prepare($sql); // bind 4 params: CPF, COD_ANIMAL, CPF, COD_ANIMAL $stmt->bind_param('siss', $cpf, $codAnimal, $cpf, $codAnimal); $stmt->execute(); $res = $stmt->get_result(); $rows = []; while ($row = $res->fetch_assoc()) { // Proteção básica contra XSS (se for exibir como HTML) foreach ($row as $k => $v) { if (is_string($v)) $row[$k] = $v; } $rows[] = $row; } echo json_encode(['data' => $rows]); exit; } echo json_encode(['error' => 'Ação inválida.']); exit; } catch (Throwable $e) { http_response_code(500); echo json_encode(['error' => $e->getMessage()]); exit; } } ?>