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 daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

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