Ir para conteúdo
Fórum Script Brasil
  • 0

PHP Parse error: syntax error, unexpected end of file in... Usando Fetch API


Moisés B Almeida

Pergunta

Código JS:

// Função que permite o cadastro do administrador.
function cadastrarAdm() {
    let form = document.querySelector('#adm-cadastro-form');
    form.addEventListener('submit', async (e) => {
        e.preventDefault();
        try {
            let response = await fetch('controllers/ajax/adm.cadastro.php', {
                method : 'post',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body : new FormData(form)
            });
            let result = await response.text();
            let final = `<span>${result}</span>`;
            let div = document.querySelector('#div-log');
            div.innerHTML = final;
        } catch (error) {
            console.log(error);
            alert(error);
        }
    });
}

Código PHP:

<?php

    require $_SERVER['DOCUMENT_ROOT'] . '/../config.php';

    // Cadastro básico do cliente feito pelo Administrador.

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {

        // Criando o objeto cliente.
        $cliente = new Pessoa;
        $cliente->setCpf(trim(intval($_POST['cpf'])));
        $cliente->setNome(ucfirst(strtolower(trim(strval($_POST['nome'])))));
        $cliente->setEmail(trim(strval($_POST['email'])));

        // Passar função para transformar ESTADO.
        $cliente->setEstado(intval($_POST['estado']));
        $cliente->setCidade(strval($_POST['cidade']));
        $cliente->setSenha(randomPassword2());
        $cliente->setEmpresa(trim(strval($_POST['empresa'])));

        // Encriptar a senha e configurando variáveis.
        $senha = $cliente->getSenha();
        $nome = $cliente->getNome();
        $hash = password_hash($senha, PASSWORD_DEFAULT);


        // Inserindo o cliente no banco de dados.

        try {
            $sql = 'INSERT INTO clientes (clt_cpf, clt_nome, clt_email, clt_cidade, clt_estado, clt_senha, clt_empresa)
                    VALUES (
                        :cpf,
                        :nome,
                        :email,
                        :cidade,
                        :estado,
                        :senha,
                        :empresa
                    )';
            $query = $pdo->prepare($sql);
            $query->execute([
                'cpf' => $cliente->getCpf(),
                'nome' => $nome,
                'email' => $cliente->getEmail(),
                'estado' => $cliente->getEstado(),
                'cidade' => $cliente->getCidade(),
                'senha' => $hash,
                'empresa' => $cliente->getEmpresa()
            ]);
        } catch (PDOException $th) {
            echo $th->getMessage();
            die();
        }

        if ($query->rowCount()) {
            // Enviar e-mail para o cliente com os dados e a senha randômica.
    
            try {
                // Create the Transport
                $transport = (new Swift_SmtpTransport(EMAIL_H, 465, 'ssl'))
                ->setUsername(EMAIL_C)
                ->setPassword(EMAIL_S);
    
                // Create the Mailer using your created Transport
                $mailer = new Swift_Mailer($transport);
    
                // Create a message
                $message = (new Swift_Message('Bem-vindo à empresa'))
                ->setFrom([EMAIL_C => 'empresa Tecnologias'])
                ->setTo($cliente->getEmail())
                ->setBody('<h3>oi<h3>', 'text/html')
                ->addPart('oi', 'text/plain');
    
    
                // Send the message
                $result = $mailer->send($message);
            } catch (Swift_TransportException $th) {
                echo $th->getMessage();
            }
    
            echo "Cliente $nome cadastrado com sucesso.";
        }
    }

Error_log:

PHP Parse error:  syntax error, unexpected end of file in /home/user/dominio.com.br/admin/controllers/ajax/clt.cadastro.php on line 103

O ajax está buscando o arquivo php, mas o status fica em 500 e gera esse PARSE ERROR.

script.js:66 POST https://dominio.com.br/admin/controllers/ajax/clt.cadastro.php 500
(anônimo) @ script.js:66

Por favor me ajudem, pois não estou conseguindo consertar isso.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Eu fiz o teste aqui, e o VS Code reclamou que tem um braço "}" sobrando, eu tirei, e o VS Code parou de reclamar.

Eu procurei no código PHP uma chamada para a função java cadastrarAdm, mas não achei nenhuma conexão. Logo, a mensagem de erro do JavaScript veio de um outro código e não desse que você publicou.

A única coisa estranha que eu achei no código PHP foi

$cliente->setCpf(trim(intval($_POST['cpf'])));

eu mudei para

$cliente->setCpf(trim('123.456.789-00')); (eu tirei a função intval, ele não faz sentido nesse contexto).

Para achar esses erros, usei o banco de dados MySQL com essa tabela

CREATE TABLE `clientes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `clt_cpf` varchar(45) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `clt_senha` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

e esse código que eu chamei de astudy.php

<?php
class Pessoa {
    public $cpf;
    public function setCPF($cpf){$this->cpf=$cpf;}
    public function getSenha(){return "1234";}
    public function getCPF(){return $this->cpf;}}
$pdo=new PDO("mysql:host=localhost;dbname=astudy","root","");
$cliente = new Pessoa;
$cliente->setCpf(trim('123.456.789-00'));
$senha = $cliente->getSenha();
$hash = password_hash($senha, PASSWORD_DEFAULT);
try {$sql='INSERT INTO clientes (clt_cpf,clt_senha) VALUES 
        (:cpf,:senha)';
    $query = $pdo->prepare($sql);
    $query->execute(['cpf' => $cliente->getCpf(),'senha' => $hash]);} 
catch (PDOException $th) {echo $th->getMessage();die();}
echo "Cliente com cpf ". $cliente->getCPF()." cadastrado com sucesso.";

A parte da rotina do email eu não testei porque não tenho servidor de email aqui.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...