Jump to content
Kefatif

habilitado ou desabilita input

Recommended Posts

Prezados, boa tarde.

 

Preciso de ajuda com dois casos...

 

1) Preciso criar dois botões "habilitar" e "desabilitar".

 

Onde ao clicar no botão habilitar, ele grave no banco mysql no campo habilitado "S" para habilitado e "N" caso clique no desabilitar.

 

2) A segundo etapa seria ao carregar a página do input ele habilitar ou não de acordo com a informação do meu banco.

 

Agradeço desde já a ajuda de todos.

Share this post


Link to post
Share on other sites

Isso é relativamente simples.

Você precisará de recurso AJAX para não recarregar a página.

 

Vou lhe apresentar um conceito pois para um exemplo mais preciso conforme você disse, tem que ser feito com os dados de seu código. Mas só pela lógica qualquer um consegue fazer.

 

Arquivos necessários (para execução correta do AJAX):

https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest

 

Essa seria o arquivo onde estaria o botão

Spoiler

<?php
$resultado_do_banco = [
    ['id' => 0, 'habilitado' => 's', 'nome' => 'Registro 1'],
    ['id' => 1, 'habilitado' => 'n', 'nome' => 'Registro 2'],
    ['id' => 2, 'habilitado' => 's', 'nome' => 'Registro 3']
];
?>

<?php foreach ($resultado_do_banco as $volta) { ?>
    <form
        method="POST"
        id="habilitar-registro-<?= $volta['id'] ?>"
        action=""
        onsubmit="return exemplo('<?= $volta['id'] ?>')">
        <!-- Input para poder identificar qual registro é para atualizar -->
        <input type="text" name="id" value="<?= $volta['id'] ?>" />

        <button type="submit">
            <?= ($volta['habilitado'] == 's' ? 'Desabilitar' : 'Habilitar') ?>
            <?= $volta['nome'] ?>
        </button>
    </form>
<?php } ?>
<div id="executar-aqui"></div>

<script>
    function exemplo(parametro) {
        exemplo.prototype = new AjaxRequest();
        exemplo.prototype.form(
            'habilitar-registro-' + parametro, // #ID do formulário
            'executar-aqui', // #ID do local de resposta
            'registra.php' // Arquivo que irá receber o dados do formulário
        );
        return (false);
    }
</script>

 

O que temos então:

Uma simulação de uma consulta no banco de dados que retorna os registros representados pelo array $resultado_do_banco.

Fazemos então um loop nos resultados e a cada volta criamos um formulário identificado diferente para cada resultado.

Cada formulário ao ser submetido executa uma função enviando como parâmetro o id do registro correspondente para podermos identificar qual é o formulário que é para enviar.

 

E o arquivo registra.php

Spoiler

<?php
echo "<pre>";
var_dump($_POST);
echo "</pre>";

/*
 * Atravéns do valor recebido de $_POST['id']
 * faça a consulta do banco de dados buscando esse valor.
 * Exemplo:
 * SELECT coluna_id, coluna_habilitado FROM tabela WHERE coluna_id = '$valor_tratado_de_id'
 * $valor_tratado_de_id: Será $_POST['id'] limpo e verificado para impedir sql-inject, xss etc...
 * 
 * Ao retornar compare o valor da coluna habilitado se for A mude para B & vise-versa
 * Antão é só atualizar a coluna com o novo valor
 */

/*
 * Finalizando modificando o botão.
 */
?>
<script>
    var formulario = document.getElementById('<?= $_POST['form_id'] ?>');
    formulario.querySelector('button').innerHTML = 'Modifique conforme o valor da consulta';
</script>

 

 

Se você percebeu no primeiro arquivo temos uma condição ternária que se o resultado é de um tipo mostra o texto desabilitar e não é mostra habilitar.

Essa mesma técnica você usa para modificar o resultado do banco de dados e atualizar o botão depois que o registro for concluído.

Share this post


Link to post
Share on other sites

Bom se eu entende tu queres quando for clicado no botão ele ser gravado no banco de dados, pos ser gravado exibi a alteração certo?

 

Vou posta um forma que uso, e me ajuda muito...

 

Primeiro vamos ao gravar no banco que seria isso..

 

OBS: so ajustar conforme for o seu código ai

 

<?
// Habilitar
    if (isset($_GET['Habilitar'])) {
        $id = get('Habilitar');
        $Atualiza = array(
            'habilitado' => 'S'
        );

        $Query = DBUpdate("minha_tbl",$Atualiza,"id = '{$id}'");
        if ($Query != 0) {
            Redireciona('?sucesso');
        } elseif ($Query == 0) {
            Redireciona('?erro');
        }
    }

// Desabilitar
    if (isset($_GET['Desabilitar'])) {
        $id = get('Desabilitar');
        $Atualiza = array(
            'habilitado'      => 'N'
        );

        $Query = DBUpdate("minha_tbl",$Atualiza,"id = '{$id}'");
        if ($Query != 0) {
            Redireciona('?sucesso');
        } else {
            Redireciona('?erro');
        }
    }
?>

Na parte onde vai ter opção de habilitar e desabilitar ficaria assim

 

  	<?php if ($habilitado =='S') { ?>
<span><a href="?Desabilitar=<?= $row['id']; ?>"><small class='btn btn-info' <?php Tooltip('Desabilitar '.$row['titulo'].'?','top'); ?>>Habilitado</small></a></span>
	<?php } else { ?>
<span><a href="?Habilitar=<?= $row['id']; ?>"><small class='btn btn-danger' <?php Tooltip('Habilitar '.$row['titulo'].'?','top'); ?>>Desabilitado</small></a></span>
	<?php } ?>

Espero ter ajudo......

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Jack Oliveira
      Ola pessoal  boa noite..
      Vou tentar explicar aqui o meu problema da melhor forma que der, espero que possam entender...
       
      Amigos eu estou tendo um problema em fazer uma atualização 
      Bom quando vou cadastrar da sucesso e é gravado normal no banco de dados ate ai esta ok..
       
      Seria  o seguinte dentro de um form ele gera linhas ou seja + inputs caso seja preciso entende? Usando javascript´s, quando vou atualizar as informações que esta nas tabelas ou seja
      são 3 tabelas 
      tbl_department 
      dep_id
      nome
      news etc....
       
      tbl_department_openning_hour
      hou_id
      titulo
      time
      dep_id  <-- Aqui onde pega o id da tabela tbl_department
       
       
      tbl_department_faq
      faq_id
      titulo
      conteudo
      dep_id  <-- Aqui onde pega tbm o id da tabela tbl_department
       
      Obs: Ele Grava normal no banco de dados, porem quando atualizar que não esta dando certo, e é preciso que seja atualizado todos os input das tabelas tbl_department_faq e tbl_department_openning_hour. Acredito que já entenderam aqui umas das parte que seria preciso.
       
      Bom vou posta uma parte do HTML  do FORM para melhor entender o que seria ok!!, Sei que não tem nada a ver com o PHP, mais como tinha dito apenas para melhor entender..
      <?php $dep_id = get('EditarItem'); $QueryTblDepartment = DBRead('tbl_department','*',"WHERE dep_id = '{$dep_id}'"); if (is_array($QueryTblDepartment)) { foreach ($QueryTblDepartment as $TblDepartment) { ?> <form method="post" action="?Atualizar=<?= $TblDepartment['dep_id']; ?>" enctype="multipart/form-data"> <div class="col-md-6"> <div class="form-group"> <label>Titulo:</label> <input class="form-control" name="dep_name" value="<?= $TblDepartment['dep_name']; ?>" placeholder="Exemplo: Globo City" autocomplete="off" required> </div> </div> <div class="col-md-6"> <div class="form-group"> <label>Telefone:</label> <input class="form-control telefone" name="dep_phone" value="<?= $TblDepartment['dep_phone']; ?>" placeholder="Exemplo: (00) 0000-0000" autocomplete="off"> </div> </div> <div class="col-md-6"> <div class="form-group"> <label>WhatsApp:</label> <input class="form-control whatsapp" name="dep_whatsapp" value="<?= $TblDepartment['dep_whatsapp']; ?>" placeholder="Exemplo: (00) 0.0000-0000" autocomplete="off"> </div> </div> <div class="col-md-6"> <div class="form-group"> <label>Fax:</label> <input class="form-control" name="dep_fax" value="<?= $TblDepartment['dep_fax']; ?>" placeholder="Exemplo: (00) 0000-0000" autocomplete="off"> </div> </div> <div class="form-group"> <label>Seção de FAQ:</label> <table id="fqSection" class="table table-bordered table-striped"> <thead> <tr> <th style="width:50%;">Titulo</th> <th>Contente</th> <th>Ação</th> </tr> </thead> <tbody> <?php //Departamento FAQ $QueryDepartamentoFaq = DBRead('tbl_department_faq','*',"WHERE dep_id='{$dep_id}'"); if (is_array($QueryDepartamentoFaq)) { foreach ($QueryDepartamentoFaq as $Fa) { $arr_fq_id[] = $Fa['fq_id']; $arr_fq_title[] = $Fa['fq_title']; $arr_fq_content[] = $Fa['fq_content']; }} if(isset($arr_fq_title)): for($i=0;$i<count($arr_fq_title);$i++) { ?> <tr> <td> <input autocomplete="off" type="text" class="form-control" style="width:100%" name="fq_title" value="<?= $arr_fq_title[$i]; ?>"> </td> <td> <textarea class="form-control" cols="30" rows="10" style="width:100%;height:50px;" name="fq_content"><?= $arr_fq_content[$i]; ?></textarea> </td> <td> <span class="btn btn-danger btn-xs"><a onclick="DeletarItem(<?= $arr_fq_id[$i]; ?>, 'DeletarFaq');" href="#!" style="color: #fff;">Excluir</a></span> </td> </tr> <?php //}} } endif; ?> </tbody> </table> <!-- Aqui para criar novos input para serem gravado no banco caso seja preciso --> <input type="button" class="btn btn-info btn-small" id="btnAddFaq" value="+ Adicionar linha" style="margin-bottom:10px;"> </div> <center><hr> <button class="btn btn-primary">Atualizar</button> <br><br> </center> </div> </form> <?php } } ?> Bom ai esta apenas um pouco do form tem mais coisa que seria igual o que preciso resolver
       
      Agora a parte do PHP que preciso resolver, vou posta apenas uma parte para poder entender tbm
       
      <?php // Atualizar Item de Departamento if (isset($_GET['Atualizar'])) { $dep_id = get('Atualizar'); $fq_empty = 0; if( !empty($_POST['fq_title']) && !empty($_POST['fq_content']) ) { $fq_empty = 1; foreach ($_POST['fq_title'] as $value) { //Sempre mostra o erro nesta linha $arr1[] = $value; } foreach ($_POST['fq_content'] as $value) { //Sempre mostra o erro nesta linha $arr2[] = $value; } $j=0; for($i=0;$i<count($arr1);$i++) { //Sempre mostra o erro nesta linha if($arr1[$i]=='' && $arr2[$i]=='') {continue;} else { $new_arr1[$j] = $arr1[$i]; $new_arr2[$j] = $arr2[$i]; $j++; } } } $AtualizarDepartment = array( 'dep_name' => post('dep_name'), 'dep_slug' => UrlAmigavel(post('dep_name')), 'dep_detail' => post('dep_detail'), 'dep_address' => post('dep_address'), 'dep_phone' => post('dep_phone'), 'dep_whatsapp' => post('dep_whatsapp'), 'dep_fax' => post('dep_fax'), 'dep_email' => post('dep_email'), 'meta_title' => post('dep_name'), 'meta_keyword' => post('meta_keyword'), 'meta_description' => LimitarTexto(post('dep_detail'),'200','...') ); $QueryTblDepartment = DBUpdate('tbl_department', $AtualizarDepartment, "dep_id = '{$dep_id}'", TRUE); if ($QueryTblDepartment != 0) { Redireciona('?sucesso&Department'); } else { Redireciona('?erro&Department'); } // Atualizar tbl_department_faq if($fq_empty == 1) { for($i=0;$i<count($new_arr1);$i++) { $TblDepartmentFaq = array( 'fq_title' => $new_arr1[$i], 'fq_content' => $new_arr2[$i], 'dep_id' => $dep_id ); $QueryTblDepartmentFaq = DBUpdate('tbl_department_faq', $TblDepartmentFaq, "dep_id = '{$dep_id}'"); } } if ($QueryTblDepartmentFaq != 0) { Redireciona('?sucesso&AtualizarFaq'); } else { Redireciona('?erro&AtualizarFaq'); } // Criar Novo input para tbl_department_faq if($fq_empty == 1) { for($i=0;$i<count($new_arr1);$i++) { $SqlFaq = array( 'fq_title' => $new_arr1[$i], 'fq_content' => $new_arr2[$i], 'dep_id' => $QueryTblDepartment ); $QueryFaq = DBRead('tbl_department_faq', $SqlFaq); } } if ($QueryFaq != 0) { Redireciona('?sucesso&Faq'); } else { Redireciona('?erro&Faq'); } } Neste caso ao mesmo tempo que teria que atualizar a
      tbl_department_faq
      faq_id
      titulo
      conteudo
      dep_id  <-- Aqui onde pega tbm o id da tabela tbl_department
       
      Ele precisa grava caso seja preciso criar nova linha ou seja criar novo input para atualizar junto entende?
       
      Pessoal espero que eu tenha sido bem objetivo aqui para que possam entender....
       
      Desde já agradeço
    • By biakelly
      Oi, vim do fórum de PHP,  eu havia postado uma dúvida lá, mas acredito e por recomendação que minha dúvida seja melhor aplicada aqui.
       
      Bem, estou fazendo uma página que precisa ter a cotação do Bitcoin.
      Nesta pagina preciso de 2 inputs um que traga o preço do bitcoin e outro que traga o preço em real.
      Ex: 1 Bitcoin custa R$ xxx,00 reais (valor padrão)
       
      Mas ao digitar R$100,00 no campo real ele precisa trazer o preço equivalente a quantidade de Bitcoins que vale R$100,00
      O mesmo para o Bitcoin, se eu digitar uma fração ele precisaria trazer o valor em Reais.
       
      Encontrei um site que faz isso (https://dolarhoje.com/bitcoin-hoje/), mas queria algo para minha página parecido
       
       
      Bem, até consigo pegar o valor com este código simples em PHP:
       
      <?php $url = 'https://www.mercadobitcoin.net/api/btc/ticker'; $result = file_get_contents($url); $result = json_decode($result, true); ?>  
      Será que em Javascript é possível fazer isso? Desculpem, entendo quase zero de Javascript
      Vocês conseguem me ajudar?
    • By Sapinn
      Eu tenho um form e toda vez que alguém clicar no input eu quero que a borda de baixo mude a cor e quando ele clicar fora quero que volte ao normal quero isso para todos os campo de todos os foms que eu tiver
    • By fideles
      Fala pessoal, tudo tranquilo?
       
      Venho recorrer a vós pois já não consigo mais.... 
       
      Tenho um campo select com algumas opções de nome.
      <select class="seleciona_nome"> <option value="Joao">Joao</option> <option value="Julio">Julio</option> <option value="Pedro">Pedro</option> </select>  
      E um campo input do tipo "text"
      <input type="text" class="opcaoSelect" autocomplete="off" disabled="disabled">  
      Preciso que ao selecionar uma opção do "Select" seja auto preenchido no input. Tenho um codigo que funcionava e não sei mais porque não funciona, veja abaixo;
       
      <script> $(document).ready(function(){ $('.seleciona_nome').on('change', addOption); }); function addOption(){ $('.opcaoSelect').val(this.value); } </script>  
      Peço ajuda ai caso alguém consiga me ajudar a entender porque este não funciona mais.
       
      Obrigado.
       
    • By kaioneresm
      Olá, tenho um formulario que pede um nome de usuário.
      Preciso que ao tentar digitar o espaço do teclado ele não funcione. Ou seja o input text bloquea no mesmo momento que for digiado.
       
      Alguem pode me ajudar? Obrigado !!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.