salvar_canvas.php — leitura técnica completa

sistema/painel/paginas/simulador/salvar_canvas.php
Endpoint que salva a imagem ajustada manualmente no canvas.

SimuladorEndpoint do canvas90 linhas

Responsabilidade do arquivo

Endpoint que salva a imagem ajustada manualmente no canvas.

Dependências observadas:
Conexão PDO / configurações globaisCanvas / edição visualBanco de dados

Tipo

Endpoint do canvas

Grupo

Simulador

Total de linhas

90

Código completo

1<?php 2require_once("../../../conexao.php"); 3 4$tabela = 'simulacoes_protese'; 5$pasta_upload = __DIR__ . '/../../images/simulacoes/'; 6 7$id = @$_POST['id']; 8$imagem = @$_POST['img']; 9 10if($id == ""){ 11 echo 'ID não informado'; 12 exit(); 13} 14 15if($imagem == ""){ 16 echo 'Imagem não recebida'; 17 exit(); 18} 19 20if(!is_dir($pasta_upload)){ 21 echo 'Pasta de imagens da simulação não encontrada'; 22 exit(); 23} 24 25if(!is_writable($pasta_upload)){ 26 echo 'Pasta de imagens da simulação sem permissão de escrita'; 27 exit(); 28} 29 30$query = $pdo->prepare("SELECT * FROM $tabela WHERE id = :id"); 31$query->bindValue(":id", $id); 32$query->execute(); 33$res = $query->fetchAll(PDO::FETCH_ASSOC); 34 35if(@count($res) == 0){ 36 echo 'Registro não encontrado'; 37 exit(); 38} 39 40if(strpos($imagem, 'data:image/png;base64,') === false){ 41 echo 'Formato da imagem inválido'; 42 exit(); 43} 44 45$imagem = str_replace('data:image/png;base64,', '', $imagem); 46$imagem = str_replace(' ', '+', $imagem); 47 48if($imagem == ""){ 49 echo 'Imagem inválida'; 50 exit(); 51} 52 53$dados = base64_decode($imagem); 54 55if($dados === false || $dados == ""){ 56 echo 'Erro ao decodificar imagem'; 57 exit(); 58} 59 60$nome_img = md5(uniqid()) . '.png'; 61$caminho = $pasta_upload . $nome_img; 62 63$salvou_arquivo = file_put_contents($caminho, $dados); 64 65if($salvou_arquivo === false){ 66 echo 'Erro ao salvar imagem do canvas'; 67 exit(); 68} 69 70if(!file_exists($caminho)){ 71 echo 'Arquivo da imagem do canvas não foi gravado'; 72 exit(); 73} 74 75$imagem_antiga = $res[0]['imagem_simulada']; 76 77if($imagem_antiga != ""){ 78 $caminho_antigo = $pasta_upload . $imagem_antiga; 79 if(file_exists($caminho_antigo)){ 80 @unlink($caminho_antigo); 81 } 82} 83 84$query2 = $pdo->prepare("UPDATE $tabela SET imagem_simulada = :imagem_simulada WHERE id = :id"); 85$query2->bindValue(":imagem_simulada", $nome_img); 86$query2->bindValue(":id", $id); 87$query2->execute(); 88 89echo 'Salvo com Sucesso'; 90?>

Leitura linha por linha

LinhaCódigoExplicação técnica
1<?phpAbre 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 Linha em branco usada para separar blocos e melhorar a leitura.
4$tabela = 'simulacoes_protese';Centraliza o nome da tabela `simulacoes_protese` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
5$pasta_upload = __DIR__ . '/../../images/simulacoes/';Define a variável `$pasta_upload`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
6 Linha em branco usada para separar blocos e melhorar a leitura.
7$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.
8$imagem = @$_POST['img'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
9 Linha em branco usada para separar blocos e melhorar a leitura.
10if($id == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
11 echo 'ID não informado';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
12 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.
13}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
14 Linha em branco usada para separar blocos e melhorar a leitura.
15if($imagem == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
16 echo 'Imagem não recebida';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(!is_dir($pasta_upload)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
21 echo 'Pasta de imagens da simulação 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.
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.
25if(!is_writable($pasta_upload)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
26 echo 'Pasta de imagens da simulação sem permissão de escrita';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
27 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.
28}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
29 Linha em branco usada para separar blocos e melhorar a leitura.
30$query = $pdo->prepare("SELECT * FROM $tabela WHERE id = :id");Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
31$query->bindValue(":id", $id);Associa um valor PHP a um parâmetro nomeado da query preparada.
32$query->execute();Executa a query preparada no banco de dados.
33$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.
34 Linha em branco usada para separar blocos e melhorar a leitura.
35if(@count($res) == 0){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
36 echo 'Registro não encontrado';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.
40if(strpos($imagem, 'data:image/png;base64,') === false){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
41 echo 'Formato da 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$imagem = str_replace('data:image/png;base64,', '', $imagem);Define a variável `$imagem`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
46$imagem = str_replace(' ', '+', $imagem);Define a variável `$imagem`, 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.
48if($imagem == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
49 echo 'Imagem inválida';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$dados = base64_decode($imagem);Define a variável `$dados`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
54 Linha em branco usada para separar blocos e melhorar a leitura.
55if($dados === false || $dados == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
56 echo 'Erro ao decodificar imagem';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
57 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.
58}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
59 Linha em branco usada para separar blocos e melhorar a leitura.
60$nome_img = md5(uniqid()) . '.png';Define a variável `$nome_img`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
61$caminho = $pasta_upload . $nome_img;Define a variável `$caminho`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
62 Linha em branco usada para separar blocos e melhorar a leitura.
63$salvou_arquivo = file_put_contents($caminho, $dados);Define a variável `$salvou_arquivo`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
64 Linha em branco usada para separar blocos e melhorar a leitura.
65if($salvou_arquivo === false){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
66 echo 'Erro ao salvar imagem do canvas';Envia saída para o navegador ou para o AJAX. O conteúdo retornado aqui precisa respeitar o contrato esperado pela tela.
67 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.
68}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
69 Linha em branco usada para separar blocos e melhorar a leitura.
70if(!file_exists($caminho)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
71 echo 'Arquivo da imagem do canvas 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.
72 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.
73}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
74 Linha em branco usada para separar blocos e melhorar a leitura.
75$imagem_antiga = $res[0]['imagem_simulada'];Define a variável `$imagem_antiga`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
76 Linha em branco usada para separar blocos e melhorar a leitura.
77if($imagem_antiga != ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
78 $caminho_antigo = $pasta_upload . $imagem_antiga;Define a variável `$caminho_antigo`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
79 if(file_exists($caminho_antigo)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
80 @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.
81 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
82}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
83 Linha em branco usada para separar blocos e melhorar a leitura.
84$query2 = $pdo->prepare("UPDATE $tabela SET imagem_simulada = :imagem_simulada WHERE id = :id");Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
85$query2->bindValue(":imagem_simulada", $nome_img);Associa um valor PHP a um parâmetro nomeado da query preparada.
86$query2->bindValue(":id", $id);Associa um valor PHP a um parâmetro nomeado da query preparada.
87$query2->execute();Executa a query preparada no banco de dados.
88 Linha em branco usada para separar blocos e melhorar a leitura.
89echo '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.
90?>Fecha o bloco PHP atual para voltar à saída HTML.

Navegação entre arquivos do grupo