11
respostas

Criar um novo registro

Bom dia a todos. Seria possível utilizando javascript ao entrar em uma pagina, automaticamente criar uma nova coluna em uma tabela no banco de dados ? Seria algo assim: O usuário entra na página e já recebe um número de atendimento e caso ele saia da pagina sem concluir faria um rollback apagando esse registro não iniciado no banco de dados.

Essa é a página que eu tenho:

<?php ini_set('display_errors', 1);?>
<?php error_reporting(E_ALL);?>
<?php include "header.php"; 
?>
<?php require_once 'php/conecta.php' ?>
<?php require_once 'php/banco-cliente.php' ?>
<?php require_once 'php/cliente.php' ?>
<?php require_once 'php/clienteDAO.php' ?>
<!-- main -->
<main class="container">
  <!-- messages -->

  <div class="space"></div>
<div class="col-md-6">

    <center><h1><i class="fas fa-balance-scale"></h1></i><br><br><h2>
    Atendimento #</h2></center>
    </div>

    </div>
  </div>
</main>
<!-- ./main -->
<br>
<br>
<!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery-slim.min.js"><\/script>')</script>
    <script src="assets/bootstrap-4.0.0/assets/js/vendor/popper.min.js"></script>
    <script src="assets/bootstrap-4.0.0/dist/js/bootstrap.min.js"></script>
    <script src="assets/bootstrap-4.0.0/assets/js/vendor/holder.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
    <script src="https://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"
            integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
            crossorigin="anonymous"></script>
11 respostas

Oi Sérgio tudo bem?

Você pode colocar uma função que faz uma chamada ajax pra uma página php que escreve algo no banco de dados.

Aí você coloca assim no body

<body onload="salvaBancoAjax()">

Espero ter ajudado!!!!

Entendi André, vou executar isso já e posto o resultado. Muito obrigado

Disponha, fico no aguardo!!!

Oi André começaram as duvidas você poderia, se possível, me ajudar?

Procurei um exemplo para montar a requisição e encontrei no blog da Alura "preenchendo formulário automaticamente com Ajax" e fiz assim, mas não está funcionando vc poderia dar uma olhada e me dizer onde estou errando?

<?php ini_set('display_errors', 1);?>
<?php error_reporting(E_ALL);?>
<?php include "header.php"; 
?>
<?php require_once 'php/conecta.php' ?>

<body onload="salvaBancoAjax()">

<!-- main -->
<main class="container">
  <!-- messages -->
//aqui deveria entrar o id registrado
<center><h1><i class="fas fa-balance-scale"></h1></i><br><br><h2>
    Atendimento numero <input class="o-form__data" name="id" type="text"></h2></center>

//este é o ajax

 <script type="text/javascript">

function salvaBancoAjax() {
    let url = 'php/adiciona-atendimento.php' + '/json';
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status = 200)
                preencheCampos(JSON.parse(xhr.responseText));
        }
    }
    xhr.send();
}

function preencheCampos(json) {
    document.querySelector('input[name=id]').value = json.id;

}

     </script>

adiciona-atendimento.php

<?php require_once 'conecta.php' ?>
<?php require_once 'atendimento.php' ?>
<?php require_once 'atendimentoDAO.php' ?>
<?php

$atendimento = new Atendimento();
$atendimento->setId($_POST["id"]) ;


//var_dump($atendimento);exit;

$dao = new atendimentoDAO($conexao);

if ($dao->insereAtendimento($atendimento)) {   
        ?>
        <script type="text/javascript">
        window.location="../novo-atendimento.php"
              </script>
        <?php
        } else {
        ?>

atendimentoDAO

function insereAtendimento($atendimento) {
    $query = "insert into atendimento (cliente_id) values ('{$atendimento->getId()}')";

        //var_dump($query);exit;

    return mysqli_query($this->conexao, $query);
    }

Oi Sergio

Bati o olho e vi algo errado (não sei se tem mais erros por que estou enferrujado em php rsrrs) no seu ajax do javascript tá escrito

let url = 'php/adiciona-atendimento.php' + '/json';

então tá chamando uma página php/adiciona-atendimento.php/json acho que não é bem isso né?

Oi André, obrigado. É assim que eu faço para inserir no BD utilizando php pego o dado envio para o adiciona-atendimento que por sua vez utiliza os arquivos atendimento e atendimentoDAO que por sua vez persiste no BD.

então achei que utilizando

let url = 'php/adiciona-atendimento.php' + '/json';

eu faria os dados do +json serem enviados para o arquivo php/adiciona-atendimento.php só que aí ja vai a primeira duvida que dados estou enviando não é?

Outra coisa que reparei é que no Ajax está usando o verbo GET de PEGAR ao invés de POST de postar.

Eu não sou bom em PHP (sou mais FrontEnd) vou encaminhar a sua dúvida para outro moderador que sabe mais que eu.

muito obrigado André

Disponha!

Oi Sérgio, tudo bom?

Acredito que rolou um engano no acesso ao script php.

Quando a gente acessa, por exemplo a url: localhost/php/adiciona-atendimento.php

Estamos acessando o script adiciona-atendimento.php disponível na pasta php dentro do servidor.

Agora, quando acessamos: localhost/php/adiciona-atendimento.php/json

Estamos acessando a pasta php, depois a pasta adiciona-atendimento.php depois a pasta json

Acredito que esse script não exista. Quando queremos acessar os arquivos PHP a partir de urls mais amigáveis, precisamos de um sistema de rotas. Algo que não vem direto com a linguagem mas está presente em frameworks MVC como o Laravel e o Symfony =)

Enfim, essa url aqui: let url = 'php/adiciona-atendimento.php' + '/json'; Não é valida mesmo.

Se você quer enviar por ajax, tenta passar o valor do json como corpo da requisição ajax:

$.ajax('php/adiciona-atendimento.php',{
    'data': JSON.stringify(suaVariavelComOsDados), 
    'type': 'POST',
    'processData': false,
    'contentType': 'application/json' ,
    complete: function(response) {
        // processa a resposta do script adiciona-atendimento
    }
});

Qualquer problema é só falar =)

Abraço!

Muito obrigado André! O que eu gostaria de fazer, se for possível, é utilizando ajax ao entrar em uma pagina, automaticamente criar uma nova coluna em uma tabela no banco de dados ? Seria algo assim: O usuário entra na página (a pagina carrega) e já recebe um número de atendimento e caso ele saia da pagina sem concluir faria um rollback apagando esse registro não iniciado no banco de dados. O André tinha me sugerido iniciar com

<body onload="salvaBancoAjax()">

Que seria o comportamento que eu preciso.

Olhando para o código que me passou não sei como passar essa (suaVariavelComDados) porque na verdade eu não estou passando nenhum dado, apenas querendo que seja criado um id na tabela atendimento do BD automaticamente e me retorne esse número como novo atendimentoe seja exibido no index neste campo no html abaixo (se é assim que eu devo exibir o retorno do ajax):

//aqui deveria entrar o id registrado

<center><h1><i class="fas fa-balance-scale"></h1></i><br><br><h2>
    Atendimento numero <input class="o-form__data" name="id" type="text"></h2></center>

eu pensei utilizando esse retorno com o numero do id retornado do BD

function preencheCampos(json) {
    document.querySelector('input[name=id]').value = json.id;

}

(futuramente a minha idéia é relacionar esse numero de atendimento criado com outra tabela)

Você poderia me ajudar com essa pergunta? Obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software