Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
luigiferrari

Botão excluir e editar em um DataTable

Pergunta

Bom dia, eu gostaria de fazer dois botões na datatable, um para excluir e outro que direcionaria o usuario para outra página.

Meu index.php está desta forma, 

<?php include('scripts/inicio.php') ?>


<link rel="stylesheet" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
        <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
        <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
        <script src="//cdn.datatables.net/plug-ins/1.10.19/i18n/Portuguese-Brasil.json"></script>

        <script src="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css"></script>
        <script src="../../extensions/Editor/css/editor.dataTables.min.css"></script>
<script>
        $(document).ready(function() {
            $('#listar-usuario').DataTable({            
                "processing": true,
                "serverSide": true,
                "ajax": {
                    "url": "proc_pesq_registro.php",
                    "type": "POST"

                }
            });
        } 
        );



 
</script>
        



              <script>
   
   // $(document).ready(function() {
        //$('#listar-usuario').DataTable( {
            //"language": {
    //"sEmptyTable": "Nenhum registro encontrado",
   // "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
    //"sInfoEmpty": "Mostrando 0 até 0 de 0 registros",
   // "sInfoFiltered": "(Filtrados de _MAX_ registros)",
   // "sInfoPostFix": "",
    //"sInfoThousands": ".",
    //"sLengthMenu": "_MENU_ resultados por página",
    //"sLoadingRecords": "Carregando...",
    //"sProcessing": "Processando...",
    //"sZeroRecords": "Nenhum registro encontrado",
    //"sSearch": "Pesquisar",
    //"oPaginate": {
     //   "sNext": "Próximo",
       // "sPrevious": "Anterior",
        //"sFirst": "Primeiro",
        //"sLast": "Último"
    //},
    //"oAria": {
      //  "sSortAscending": ": Ordenar colunas de forma ascendente",
        //"sSortDescending": ": Ordenar colunas de forma descendente"
    //}
//}
  //      } );
    //} );
</script>

    <title>Registos</title>
  </head>
  <body>
     <div class="container">
            
            <div class="row">
                
                <div class="col-md-8 col-lg-8">
                  <a href="cadregistro.php" class="btn btn-primary">Voltar</a>
                  <a href="index.php" class="btn btn-primary">Home</a>
                    <hr class="new1"> 
                </div>
                    
                    <div class="col-md-4">
                         <a href="http://www.novalima.mg.gov.br/" target="_blank" class="thumbnail" >
                <img data-src="holder.js/100%x180" />
   
                <img src="imagens/logo.png" class="img-responsive" alt="PMNL" />
                         </a>
                        
                    </div>
            </div> 

            <center><h1>Registros</h1></center>
            <br><br><br>

            <div class="row">
        <div class="col-md-12">
            <br><br>
            <div class="panel panel-primary">
                    <div class="panel-heading">
                        <h3 class="panel-title painel-title-responsive">Registros</h3>
                    </div>
<div class="panel-body">

            <table id="listar-usuario" class="table table-striped table table-bordered table-hover table-responsive">
                    
                <thead>
                 <tr>
                        <th>Data de Abertura</th>
                        <th>Data do Serviço</th>
                        <th>Data da Busca</th>
                        <th>Comentarios</th>
                        <th>Cliente</th>
                        <th>Problema</th>
                        <th>Prestador</th>
                        <th>Id</th>

                        
               
                        
                    </tr>
                </thead>
 
            </table>
        </div>
    </div>
</div>

</body>
<htnl>

PS: Também gostaria de deixar o form em português, o código está como comentário pois quando coloco ele, traduz, porém não lista nada...

 

Já a página proc_pesq_registro.php está desta forma:

<?php
include_once("conexoes/conexao.php");
?>

<?php


//Receber a requisão da pesquisa 
$requestData= $_REQUEST;


//Indice da coluna na tabela visualizar resultado => nome da coluna no banco de dados
$columns = array( 
	0 =>'dataabertura_os', 
	1 => 'dataservico_os',
	2=> 'databusca_os',
	3=> 'comentario_servico',
	4=> 'tbl_cliente_id_cliente',
	5=> 'tbl_prestador_id_prestador',
	6=> 'tbl_categoria_id_categoria',
	7=> 'id_os',

);

//Obtendo registros de número total sem qualquer pesquisa
$result_user = "SELECT * from tbl_os inner JOIN tbl_cliente
on tbl_cliente.id_cliente = tbl_os.tbl_cliente_id_cliente
inner JOIN tbl_prestador on tbl_prestador.id_prestador = tbl_os.tbl_prestador_id_prestador
INNER JOIN tbl_categoria on tbl_categoria.id_categoria = tbl_os.tbl_categoria_id_categoria
";
$resultado_user =mysqli_query($conn, $result_user);
$qnt_linhas = mysqli_num_rows($resultado_user);

//Obter os dados a serem apresentados
$result_usuarios = "SELECT * from tbl_os inner JOIN tbl_cliente
on tbl_cliente.id_cliente = tbl_os.tbl_cliente_id_cliente
inner JOIN tbl_prestador on tbl_prestador.id_prestador = tbl_os.tbl_prestador_id_prestador
INNER JOIN tbl_categoria on tbl_categoria.id_categoria = tbl_os.tbl_categoria_id_categoria
WHERE 1=1";

if( !empty($requestData['search']['value']) ) {   // se houver um parâmetro de pesquisa, $requestData['search']['value'] contém o parâmetro de pesquisa
	$result_usuarios.=" AND ( dataabertura_os LIKE '".$requestData['search']['value']."%' "; 

	$result_usuarios.=" OR dataservico_os LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR databusca_os LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR comentario_servico LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR nome_cliente LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR nome_prestador LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR descricao_categoria LIKE '".$requestData['search']['value']."%' ";

	$result_usuarios.=" OR id_os LIKE '".$requestData['search']['value']."%' )";


	
}

$resultado_usuarios=mysqli_query($conn, $result_usuarios);
$totalFiltered = mysqli_num_rows($resultado_usuarios);
//Ordenar o resultado
$result_usuarios.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."  LIMIT ".$requestData['start']." ,".$requestData['length']."   ";
$resultado_usuarios=mysqli_query($conn, $result_usuarios);
	
// Ler e criar o array de dados
$dados = array();
while( $row_usuarios =mysqli_fetch_array($resultado_usuarios) ) {  
	$dado = array(); 
	$dado[] = $row_usuarios["dataabertura_os"];
	$dado[] = $row_usuarios["dataservico_os"];
	$dado[] = $row_usuarios["databusca_os"];
	$dado[] = utf8_encode($row_usuarios["comentario_servico"]);
	$dado[] =  utf8_encode($row_usuarios["nome_cliente"]);
	$dado[] = utf8_encode($row_usuarios["nome_prestador"]);
	$dado[] = utf8_encode($row_usuarios["descricao_categoria"]);
	$dado[] = utf8_encode($row_usuarios["id_os"]);

	

 
	$dados[] = $dado;
}


//Cria o array de informações a serem retornadas para o Javascript
$json_data = array(
	"draw" => intval( $requestData['draw'] ),//para cada requisição é enviado um número como parâmetro
	"recordsTotal" => intval( $qnt_linhas ),  //Quantidade de registros que há no banco de dados
	"recordsFiltered" => intval( $totalFiltered ), //Total de registros quando houver pesquisa
	"data" => $dados   //Array de dados completo dos dados retornados da tabela 
);

echo json_encode($json_data);  //enviar dados como formato json

 

 

Então para resumir, eu gostaria de saber como coloco um botão para excluir o registro, e um para direcionar o usuário para uma outra página para alterar aquele registro. Também gostaria de saber onde coloco o código para tradução...

Obrigado!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

7 respostas a esta questão

Recommended Posts

Eu costumo criar uma função para gerar os botões e retorna-los para o datatables:

 

<?php

...

while( $row_usuarios =mysqli_fetch_array($resultado_usuarios) ) {  
	$dado = array(); 
	$dado[] = $row_usuarios["dataabertura_os"];
	$dado[] = $row_usuarios["dataservico_os"];
	$dado[] = $row_usuarios["databusca_os"];
	$dado[] = utf8_encode($row_usuarios["comentario_servico"]);
	$dado[] =  utf8_encode($row_usuarios["nome_cliente"]);
	$dado[] = utf8_encode($row_usuarios["nome_prestador"]);
	$dado[] = utf8_encode($row_usuarios["descricao_categoria"]);
	$dado[] = utf8_encode($row_usuarios["id_os"]);
  
  	//Cria o botão de exclusão
	$dado[] = criarBotao($row_usuarios["id"]);

 
	$dados[] = $dado;
}

/**
 * função para cirar botão html
 *
 */
function criarBotaoExcluir($id_linha) {
	$botao = sprintf("<button onclick='excluir(%s)'>Excluir</button>", $id_linha);
	return $botao;
}

Depois disso só adicionar mais uma coluna na sua tabela do datatables para exibir o botão, e criar uma função javascript para executar a exclusão do item.

 

Para o botão de editar o principio é exatamente o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 04/06/2019 at 10:47, paulpolidoro disse:

Eu costumo criar uma função para gerar os botões e retorna-los para o datatables:

 


<?php

...

while( $row_usuarios =mysqli_fetch_array($resultado_usuarios) ) {  
	$dado = array(); 
	$dado[] = $row_usuarios["dataabertura_os"];
	$dado[] = $row_usuarios["dataservico_os"];
	$dado[] = $row_usuarios["databusca_os"];
	$dado[] = utf8_encode($row_usuarios["comentario_servico"]);
	$dado[] =  utf8_encode($row_usuarios["nome_cliente"]);
	$dado[] = utf8_encode($row_usuarios["nome_prestador"]);
	$dado[] = utf8_encode($row_usuarios["descricao_categoria"]);
	$dado[] = utf8_encode($row_usuarios["id_os"]);
  
  	//Cria o botão de exclusão
	$dado[] = criarBotao($row_usuarios["id"]);

 
	$dados[] = $dado;
}

/**
 * função para cirar botão html
 *
 */
function criarBotaoExcluir($id_linha) {
	$botao = sprintf("<button onclick='excluir(%s)'>Excluir</button>", $id_linha);
	return $botao;
}

Depois disso só adicionar mais uma coluna na sua tabela do datatables para exibir o botão, e criar uma função javascript para executar a exclusão do item.

 

Para o botão de editar o principio é exatamente o mesmo.

A estrutura do meu é diferene. Testei essa e não exibiu os dados.
Na estrutura que estou usando não aceitou essa função.

Eu insiro um botão, ou no caso um radio input, assim:

while ($row = mysqli_fetch_assoc($empRecords)) {
    $data[] = array(
            "DATA_VENDA"=>$row['DATA_VENDA'],
            "SENHA"=>$row['SENHA'],
            "VALOR_TOTAL"=>$row['VALOR_TOTAL'],
            "PAGO"=>$row['PAGO'],
            "NOME"=>$row['NOME'],
            "radio"=>"<label><input type='radio' name='prod' value='$row[CODIGO]'>Produtos</label>"
        );
}

Mas onde vocês estão escrevendo a função java scrip para pegar o evento do botão, pois esse arquivo em json não aceita.

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Saudações!

Minha intenção era por botões de imprimir e ver produtos onde eu só precisasse de um único click.

Como inicialmente não consegui, acabei colocando os botões com os eventos no html do datatables e o input rádio no php pegando o idl . O que ficou melhor, pois ao retira-los da tabela,  tenho mais espaço para listar outras colunas, apesar que posso oculta-las, mas os botões estando a vista, é mais rápido o acesso e aqui às vezes no atendimento não tenho tempo nem de clicar para mostrar as colunas(risos).

No entanto, acabei conseguindo por no php. Segue o código para ajudar alguém que talvez venha a precisar:

$data = array();

while ($row = mysqli_fetch_assoc($empRecords)) {
    $data[] = array(
    		"DATA_VENDA"=>$row['DATA_VENDA'],
    		"SENHA"=>$row['SENHA'],
    		"VALOR_TOTAL"=>$row['VALOR_TOTAL'],
    		"PAGO"=>$row['PAGO'],
    		"NOME"=>$row['NOME'],
			"radio"=>"<label><input type='radio' name='produtosvr' value='$row[CODIGO]'>teste</input></label>
			<script> $(document).ready(function(){
               $('input[name=produtosvr]').click(function() {
				   alert('')
            $.post('../centralmix/insere3.php', // post em insere  
                  
				  function(valor){
                     $('#saida').html(valor); //retorna o resultado
                  })
			   })
	  })
	  </script>",
    	);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, oliveiros disse:

Fiz o teste aqui:

Colocando no php eu mando imprimir e ele imprime três vezes.

Alguém sabe dizer porque?

Amigo pega esta base do meu aqui e tenta ai

 <?php  
 defined('BASEPATH') OR exit('No direct script access allowed');  
 class Crud extends CI_Controller {  
      //functions  
      function index(){  
           $data["title"] = "Titulo do Meu Site Aqui";  
           $this->load->view('crud_view', $data);  
      }  
      function fetch_user(){  
           $this->load->model("crud_model");  
           $fetch_data = $this->crud_model->make_datatables();  
           $data = array();  
           foreach($fetch_data as $row)  
           {  
                $sub_array = array();  
                $sub_array[] = '<img src="'.base_url().'upload/'.$row->image.'" class="img-thumbnail" width="50" height="35" />';  
                $sub_array[] = $row->first_name;  
                $sub_array[] = $row->last_name;  
                $sub_array[] = '<button type="button" name="update" id="'.$row->id.'" class="btn btn-warning btn-xs">Editar</button>';  
                $sub_array[] = '<button type="button" name="delete" id="'.$row->id.'" class="btn btn-danger btn-xs">Deletar</button>';  
                $data[] = $sub_array;  
           }  
           $output = array(  
                "draw"                    =>     intval($_POST["draw"]),  
                "recordsTotal"          =>      $this->crud_model->get_all_data(),  
                "recordsFiltered"     =>     $this->crud_model->get_filtered_data(),  
                "data"                    =>     $data  
           );  
           echo json_encode($output);  
      }  
 }  

Veja se vai te ajudar....

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, oliveiros disse:

Fiz o teste aqui:

Colocando no php eu mando imprimir e ele imprime três vezes.

Alguém sabe dizer porque?

Deve ser porque ta dentro do while.... iiii!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.