salvar.php — leitura técnica completa

sistema/painel/paginas/analises/salvar.php
Endpoint que persiste análise capilar e processa upload da foto.

AnálisesEndpoint AJAX de persistência122 linhas

Responsabilidade do arquivo

Endpoint que persiste análise capilar e processa upload da foto.

Dependências observadas:
Conexão PDO / configurações globaisUpload de arquivosBanco de dados

Tipo

Endpoint AJAX de persistência

Grupo

Análises

Total de linhas

122

Código completo

1<?php 2require_once("../../../conexao.php"); 3$tabela = 'analise_capilar'; 4 5$id = @$_POST['id']; 6$cliente = @$_POST['cliente']; 7$cor_detectada = @$_POST['cor_detectada']; 8$densidade_detectada = @$_POST['densidade_detectada']; 9$grau_falha = @$_POST['grau_falha']; 10$sugestao_protese = @$_POST['sugestao_protese']; 11$observacoes = @$_POST['observacoes']; 12$data_analise = @$_POST['data_analise']; 13$foto_atual = @$_POST['foto_atual']; 14 15if($cliente == ""){ 16 echo 'Selecione um Cliente'; 17 exit(); 18} 19 20if($data_analise == ""){ 21 echo 'Informe a Data da Análise'; 22 exit(); 23} 24 25$nome_img = $foto_atual; 26$pasta = __DIR__ . '/../../images/analises/'; 27 28if(isset($_FILES['foto']) && @$_FILES['foto']['name'] != ''){ 29 30 if(!is_dir($pasta)){ 31 echo 'Pasta de imagens da análise não encontrada'; 32 exit(); 33 } 34 35 if(!is_writable($pasta)){ 36 echo 'Pasta de imagens da análise sem permissão de gravação'; 37 exit(); 38 } 39 40 if(!is_uploaded_file($_FILES['foto']['tmp_name'])){ 41 echo 'Arquivo de imagem inválido'; 42 exit(); 43 } 44 45 $foto = $_FILES['foto']['name']; 46 $extensao = strtolower(pathinfo($foto, PATHINFO_EXTENSION)); 47 48 if($extensao != 'png' && $extensao != 'jpg' && $extensao != 'jpeg' && $extensao != 'webp'){ 49 echo 'Formato de imagem não permitido'; 50 exit(); 51 } 52 53 $nome_img = md5(uniqid()) . "." . $extensao; 54 $caminho = $pasta . $nome_img; 55 56 $upload = move_uploaded_file($_FILES['foto']['tmp_name'], $caminho); 57 58 if($upload == false){ 59 echo 'Erro ao salvar a foto da análise'; 60 exit(); 61 } 62 63 if(!file_exists($caminho)){ 64 echo 'Arquivo da foto da análise não foi gravado'; 65 exit(); 66 } 67 68 if($foto_atual != ""){ 69 $caminho_antigo = $pasta . $foto_atual; 70 if(file_exists($caminho_antigo)){ 71 @unlink($caminho_antigo); 72 } 73 } 74} 75 76$query = $pdo->prepare("SELECT * FROM $tabela WHERE cliente = :cliente AND data_analise = :data_analise"); 77$query->bindValue(":cliente", $cliente); 78$query->bindValue(":data_analise", $data_analise); 79$query->execute(); 80$res = $query->fetchAll(PDO::FETCH_ASSOC); 81 82if(@count($res) > 0 and $id != $res[0]['id']){ 83 echo 'Registro já Cadastrado, escolha outro!!'; 84 exit(); 85} 86 87if($id == ""){ 88 $query = $pdo->prepare("INSERT INTO $tabela SET 89 cliente = :cliente, 90 foto = :foto, 91 cor_detectada = :cor_detectada, 92 densidade_detectada = :densidade_detectada, 93 grau_falha = :grau_falha, 94 sugestao_protese = :sugestao_protese, 95 observacoes = :observacoes, 96 data_analise = :data_analise"); 97}else{ 98 $query = $pdo->prepare("UPDATE $tabela SET 99 cliente = :cliente, 100 foto = :foto, 101 cor_detectada = :cor_detectada, 102 densidade_detectada = :densidade_detectada, 103 grau_falha = :grau_falha, 104 sugestao_protese = :sugestao_protese, 105 observacoes = :observacoes, 106 data_analise = :data_analise 107 WHERE id = :id"); 108 $query->bindValue(":id", $id); 109} 110 111$query->bindValue(":cliente", $cliente); 112$query->bindValue(":foto", $nome_img); 113$query->bindValue(":cor_detectada", $cor_detectada); 114$query->bindValue(":densidade_detectada", $densidade_detectada); 115$query->bindValue(":grau_falha", $grau_falha); 116$query->bindValue(":sugestao_protese", $sugestao_protese); 117$query->bindValue(":observacoes", $observacoes); 118$query->bindValue(":data_analise", $data_analise); 119$query->execute(); 120 121echo 'Salvo com Sucesso'; 122?>

Leitura linha por linha

LinhaCódigoExplicação técnica
1<?php Abre um bloco PHP. A partir daqui o arquivo passa a executar lógica no servidor.
2require_once("../../../conexao.php");Importa `../../../conexao.php` para disponibilizar conexão, sessão, funções utilitárias ou validações necessárias ao restante do fluxo.
3$tabela = 'analise_capilar';Centraliza o nome da tabela `analise_capilar` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
4 Linha em branco usada para separar blocos e melhorar a leitura.
5$id = @$_POST['id'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
6$cliente = @$_POST['cliente'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
7$cor_detectada = @$_POST['cor_detectada'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
8$densidade_detectada = @$_POST['densidade_detectada'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
9$grau_falha = @$_POST['grau_falha'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
10$sugestao_protese = @$_POST['sugestao_protese'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
11$observacoes = @$_POST['observacoes'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
12$data_analise = @$_POST['data_analise'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
13$foto_atual = @$_POST['foto_atual'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
14 Linha em branco usada para separar blocos e melhorar a leitura.
15if($cliente == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
16 echo 'Selecione um Cliente';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
17 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
18}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
19 Linha em branco usada para separar blocos e melhorar a leitura.
20if($data_analise == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
21 echo 'Informe a Data da Análise';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
22 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
23}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
24 Linha em branco usada para separar blocos e melhorar a leitura.
25$nome_img = $foto_atual;Define a variável `$nome_img`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
26$pasta = __DIR__ . '/../../images/analises/';Define a variável `$pasta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
27 Linha em branco usada para separar blocos e melhorar a leitura.
28if(isset($_FILES['foto']) && @$_FILES['foto']['name'] != ''){Trabalha com dados vindos da requisição HTTP, sessão ou upload. Esse é um ponto sensível de validação.
29 Linha em branco usada para separar blocos e melhorar a leitura.
30 if(!is_dir($pasta)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
31 echo 'Pasta de imagens da análise não encontrada';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
32 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
33 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
34 Linha em branco usada para separar blocos e melhorar a leitura.
35 if(!is_writable($pasta)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
36 echo 'Pasta de imagens da análise sem permissão de gravação';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
37 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
38 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
39 Linha em branco usada para separar blocos e melhorar a leitura.
40 if(!is_uploaded_file($_FILES['foto']['tmp_name'])){Trabalha com dados vindos da requisição HTTP, sessão ou upload. Esse é um ponto sensível de validação.
41 echo 'Arquivo de imagem inválido';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
42 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
43 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
44 Linha em branco usada para separar blocos e melhorar a leitura.
45 $foto = $_FILES['foto']['name'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
46 $extensao = strtolower(pathinfo($foto, PATHINFO_EXTENSION));Define a variável `$extensao`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
47 Linha em branco usada para separar blocos e melhorar a leitura.
48 if($extensao != 'png' && $extensao != 'jpg' && $extensao != 'jpeg' && $extensao != 'webp'){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
49 echo 'Formato de imagem não permitido';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
50 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
51 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
52 Linha em branco usada para separar blocos e melhorar a leitura.
53 $nome_img = md5(uniqid()) . "." . $extensao;Define a variável `$nome_img`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
54 $caminho = $pasta . $nome_img;Define a variável `$caminho`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
55 Linha em branco usada para separar blocos e melhorar a leitura.
56 $upload = move_uploaded_file($_FILES['foto']['tmp_name'], $caminho);Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
57 Linha em branco usada para separar blocos e melhorar a leitura.
58 if($upload == false){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
59 echo 'Erro ao salvar a foto da análise';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
60 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
61 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
62 Linha em branco usada para separar blocos e melhorar a leitura.
63 if(!file_exists($caminho)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
64 echo 'Arquivo da foto da análise não foi gravado';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
65 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
66 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
67 Linha em branco usada para separar blocos e melhorar a leitura.
68 if($foto_atual != ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
69 $caminho_antigo = $pasta . $foto_atual;Define a variável `$caminho_antigo`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
70 if(file_exists($caminho_antigo)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
71 @unlink($caminho_antigo);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
72 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
73 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
74}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
75 Linha em branco usada para separar blocos e melhorar a leitura.
76$query = $pdo->prepare("SELECT * FROM $tabela WHERE cliente = :cliente AND data_analise = :data_analise");Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
77$query->bindValue(":cliente", $cliente);Associa um valor PHP a um parâmetro nomeado da query preparada.
78$query->bindValue(":data_analise", $data_analise);Associa um valor PHP a um parâmetro nomeado da query preparada.
79$query->execute();Executa a query preparada no banco de dados.
80$res = $query->fetchAll(PDO::FETCH_ASSOC);Lê o resultado retornado pelo banco e o converte para uma estrutura PHP que o restante do arquivo consegue consumir.
81 Linha em branco usada para separar blocos e melhorar a leitura.
82if(@count($res) > 0 and $id != $res[0]['id']){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
83 echo 'Registro já Cadastrado, escolha outro!!';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
84 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
85}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
86 Linha em branco usada para separar blocos e melhorar a leitura.
87if($id == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
88 $query = $pdo->prepare("INSERT INTO $tabela SET Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
89 cliente = :cliente, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
90 foto = :foto, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
91 cor_detectada = :cor_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
92 densidade_detectada = :densidade_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
93 grau_falha = :grau_falha, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
94 sugestao_protese = :sugestao_protese, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
95 observacoes = :observacoes, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
96 data_analise = :data_analise");Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
97}else{Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
98 $query = $pdo->prepare("UPDATE $tabela SET Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
99 cliente = :cliente, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
100 foto = :foto, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
101 cor_detectada = :cor_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
102 densidade_detectada = :densidade_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
103 grau_falha = :grau_falha, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
104 sugestao_protese = :sugestao_protese, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
105 observacoes = :observacoes, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
106 data_analise = :data_analise Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
107 WHERE id = :id");Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
108 $query->bindValue(":id", $id);Associa um valor PHP a um parâmetro nomeado da query preparada.
109}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
110 Linha em branco usada para separar blocos e melhorar a leitura.
111$query->bindValue(":cliente", $cliente);Associa um valor PHP a um parâmetro nomeado da query preparada.
112$query->bindValue(":foto", $nome_img);Associa um valor PHP a um parâmetro nomeado da query preparada.
113$query->bindValue(":cor_detectada", $cor_detectada);Associa um valor PHP a um parâmetro nomeado da query preparada.
114$query->bindValue(":densidade_detectada", $densidade_detectada);Associa um valor PHP a um parâmetro nomeado da query preparada.
115$query->bindValue(":grau_falha", $grau_falha);Associa um valor PHP a um parâmetro nomeado da query preparada.
116$query->bindValue(":sugestao_protese", $sugestao_protese);Associa um valor PHP a um parâmetro nomeado da query preparada.
117$query->bindValue(":observacoes", $observacoes);Associa um valor PHP a um parâmetro nomeado da query preparada.
118$query->bindValue(":data_analise", $data_analise);Associa um valor PHP a um parâmetro nomeado da query preparada.
119$query->execute();Executa a query preparada no banco de dados.
120 Linha em branco usada para separar blocos e melhorar a leitura.
121echo 'Salvo com Sucesso';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
122?>Fecha o bloco PHP atual para voltar à saída HTML.

Navegação entre arquivos do grupo