Jump to content
Flaviaac

[Resolvido] Ajuda! Meu campo está exibindo o valor selecionado corretamente mas gravando como 0(zero) no banco de dados.

Recommended Posts

Boa tarde pessoal,

 

Sou iniciante em Desenvolvimento Web e não estou conseguindo resolver um problema no meu código, se alguém puder me ajudar agradeço imensamente.

 


Vamos lá!

 

Na tela de cadastro eu tenho um campo tipo select, onde escolho o tipo de documento, e no campo de baixo eu tenho um tipo text que mostrará a quantidade de anos para descarte deste documento. Então quando o usuário selecionar um dos documentos no campo de cima automaticamente deve aparecer o valor do tempo de descarte no campo de baixo, e ai sim o usuário poderá cadastrar o documento em si.
 
Obs.: estou ignorando o restante dos campos de cadastro pois não são relevantes para este problema.

 

451700898_Capturadetelade2022-07-1208-40-07.thumb.png.b45aa11d0414765e6bdd9a89cf672b39.png

 

Este evento está funcionando perfeitamente, o problema é que quando clico no botão "cadastrar" o campo de "periodicidade de descarte" não está salvando no bando de dados com o valor exibido, mas sim como zero.

 

No arquivo processa_cadastro.php quando dou um var_dump em $periodo_doc ele imprime: int(0)

 

 

Não consegui identificar onde estou errando.

 

Por favor, poderiam me dar uma luz.

Obrigada!

 

 

 

Segue os códigos para entendimento.

 

 

tipo_arquivo.sql:

-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Tempo de geração: 12-Jul-2022 às 14:46
-- Versão do servidor: 10.4.24-MariaDB
-- versão do PHP: 7.4.29

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Banco de dados: `sistemadescarte`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `tipo_arquivo`
--

CREATE TABLE `tipo_arquivo` (
  `id_tipo` int(11) NOT NULL,
  `nome_tipo` varchar(255) NOT NULL,
  `descarte` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `tipo_arquivo`
--

INSERT INTO `tipo_arquivo` (`id_tipo`, `nome_tipo`, `descarte`) VALUES
(1, 'Ata Extraordinária', 5),
(2, 'Ata Ordinária', 5),
(3, 'carta', 8),
(4, 'Memorando', 10),
(5, 'Memorando Circular', 8),
(6, 'Ofício', 5),
(7, 'Ofício Circular', 5),
(8, 'Processo', 10);


--
-- Índices para tabelas despejadas
--

--
-- Índices para tabela `tipo_arquivo`
--
ALTER TABLE `tipo_arquivo`
  ADD PRIMARY KEY (`id_tipo`),
  ADD KEY `id_tipo` (`id_tipo`);

--
-- AUTO_INCREMENT de tabelas despejadas
--

--
-- AUTO_INCREMENT de tabela `tipo_arquivo`
--
ALTER TABLE `tipo_arquivo`
  MODIFY `id_tipo` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

documento.sql:

-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Tempo de geração: 12-Jul-2022 às 14:47
-- Versão do servidor: 10.4.24-MariaDB
-- versão do PHP: 7.4.29

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Banco de dados: `sistemadescarte`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `documento`
--

CREATE TABLE `documento` (
  `ID_DOC` int(11) NOT NULL,
  `NUMERO_DOC` varchar(20) NOT NULL,
  `TIPO_DOC` int(11) NOT NULL,    
  `INTERESSADO` varchar(255) NOT NULL, 
  `TITULO` varchar(400) NOT NULL, 
  `OBS` varchar(400) DEFAULT NULL,
  `PERIODICIDADE` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `documento`
--

INSERT INTO `documento` (`ID_DOC`, `NUMERO_DOC`, `TIPO_DOC`, `INTERESSADO`, `TITULO`, `OBS`, `PERIODICIDADE`) VALUES
(2, '788741-2019/65', 1, 'admin', 'Ata extraordinária de 2018', 0),
(3, '888888-2021/21', 3, 'gerencia', 'Carta a gerencia', 0),
(4, '333653-2022/1', 8, 'teste', 'Processo', 'teste na observação', 0),
(6, '224568-2022/3', 2, 'teste', 'Ata Ordinária', 0);


--
-- Índices para tabelas despejadas
--

--
-- Índices para tabela `documento`
--
ALTER TABLE `documento`
  ADD PRIMARY KEY (`ID_DOC`),
  ADD KEY `TIPO_DOC` (`TIPO_DOC`);

--
-- AUTO_INCREMENT de tabelas despejadas
--

--
-- AUTO_INCREMENT de tabela `documento`
--
ALTER TABLE `documento`
  MODIFY `ID_DOC` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2295;

--
-- Restrições para despejos de tabelas
--

--
-- Limitadores para a tabela `documento`
--
ALTER TABLE `documento`
  ADD CONSTRAINT `documento_ibfk_1` FOREIGN KEY (`TIPO_DOC`) REFERENCES `tipo_arquivo` (`id_tipo`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

 

cadastro.php:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">  
  <script type="text/javascript" src="js/descarte.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <title>Cadastro de Documento</title>  
</head>



<form action="" method="post">

	<div class="form-row">
		<!-- tipo de documento -->
		<div class="form-group col-md-1">
			<label>Tipo de Documento</label>
				<select name="tipo" id="tipo" class="form-control" onchange="funcaoDescarte()">                                
				    <option selected>Selecione...</option>
					<!---------------  P H P  ---------------->
					<?php                        
					    while($row = $result->fetch_assoc())
					    {
					    echo "<option value=".$row['id_tipo'].">".$row['nome_tipo']."</option>";
					    }
					?>
					<!---------------  F I M  P H P  --------->
				</select>                                
		</div>
   	</div>  	
    
	<div class="form-row">
		<!-- tempo para descarte -->                                                             
		<div class="form-group col-md-2">  
			<span class="form-text">Periodicidade para descarte deste documento:</span>                                                                             
			<input name="descarte" type="text" class="form-control" id="descarte" value="" disabled="">  
			<input type="text" readonly class="form-control-plaintext" value="Anos">                                
		</div>    
	</div>  
    
    
    
<!------------------- botão cadastrar e limpar ---------------------------------------------->
	&nbsp;
	</br>
	
	<div class="form-row">
		<!-- Cadastrar e Limpar -->
		<div class="form-group col-md-4">
			<button type="submit" name="cadastrar_doc" class="btn btn-primary">Cadastrar</button>
			<button type="reset" name="limpar_doc" class="btn btn-primary">Limpar campos</button>
		</div>
	</div>

</form

 

descarte.js:

function funcaoDescarte(){

var x = document.getElementById("tipo").value;
    
   y = $.ajax({
        url:"periodicidade.php",
        method:"POST",
        data:{ id : x },        
        success:function(data){
            $("#descarte").val(data); 
       }
   })     
}

 

periodicidade.php:

<?php  

include_once "conexao.php";   


  $k = $_POST['id'];
  $k = trim($k);
  $sql = "SELECT * FROM tipo_doc WHERE id_tipo ='{$k}'";
  $result = $conn->query($sql);

  while($row = $result->fetch_assoc()){

    echo $row['descarte'];
    
  }
  
?>

 

processa_cadastro.php:

<?php
	
	$tipo_doc = intval(filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_NUMBER_INT));    
	$periodo_doc = intval(filter_input(INPUT_POST, 'descarte', FILTER_SANITIZE_NUMBER_INT)); 
    
  
	if(isset($_POST['cadastrar_doc']))
	{
		if($tipo_doc !='' || $periodo_doc !='')
		{

			$stmt = $conn->prepare("INSERT INTO documento (tipo_doc, periodicidade) VALUES (?, ?)");
			$stmt->bind_param("ii", $tipo_doc, $periodo_doc);

			$stmt->execute();
			echo "<span class='alert alert-success'> Cadastrado com sucesso</span>";
			$erro = mysqli_error($conn);
			echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>';
			
		}else{
		
			echo "<span class='alert alert-danger'> Não cadastrado</span>";
			$erro = mysqli_error($conn);
			echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>';
			
		}
	}

	$stmt->close();
	$conn->close();
     
?>

 

 

Share this post


Link to post
Share on other sites

Olhando aqui não consegui identificar onde está o problema, mas dar para saber onde pode está ocorrendo.

 

- Primeiro clique com o botão direito sobre a tag <select> #tipo e selecione inspecionar, olhe no html processado pelo navegador se as propriedade value desse seletor estão corretas.

Se não estiverem o problema está na foma da leitura da tabela tipo_arquivo.

 

- Se os values estão corretos certifique-se que no documento HTML não exista outro elemento com o id #tipo (isso em todo documento processado, até mesmo html carregado por ajax)

Na via das dúvidas você pode remover o comando onchange do seletor e adicionar um ouvinte de eventos

Spoiler

<?php
$row = [
    ['id_tipo' => 1, 'nome_tipo' => 'Ata Extraordinária'],
    ['id_tipo' => 2, 'nome_tipo' => 'Ata Ordinária'],
    ['id_tipo' => 3, 'nome_tipo' => 'carta']
];
?>
<select name="tipo" id="tipo">                                
    <option selected="">Selecione...</option>
    <?php
    foreach ($row as $valor) {
        echo ("<option value=\"{$valor['id_tipo']}\">{$valor['nome_tipo']}</option>");
    }
    ?>
</select>

<script>
    // Isso fica no próprio documento HTML depois do elemento ter sido criado
    document.getElementById('tipo').addEventListener('change', funcaoDescarte, false);

    // Já a função pode ficar em qualquer arquivo JS se preferir
    function funcaoDescarte(ouvinte) {
        console.log('Quem disparou esse evento foi:');
        console.log(ouvinte.target);
        if (ouvinte.target.value && typeof (ouvinte.target.value != 'undefined')) {
            console.log('E o valor anexo ao alvo é:');
            console.log(ouvinte.target.value);
        }
    }
</script>

 

 

- Antes de enviar seu ajax verifique no console do navegador como os dados são processados através do comendo console.log( o que analisar )  "clique e inspecionar depois na aba console"

 

- Se em todos os casos não deram a noção onde está o erro pode ser um problema relacionado ao jQuery, mas como não mexo com isso não posso ajudar.

 

Até mesmo pode ser algo que passou despercebido por mim e o problema pode não ter nada haver com o que mencionei

Share this post


Link to post
Share on other sites

Olá!
O erro acontece pq o input[name="descarte"] está disabled
Esse valor nunca vai ser submetido.
Não vai chegar em processa_cadastro.php
e vai car no else do if($periodo_doc != '')
sempre exibindo a mensagem de erro (mesmo que não exista nenhum erro sql)

Share this post


Link to post
Share on other sites

Bem observado @washalbano

 

13 horas atrás, Flaviaac disse:

data:{ id : x },

Aqui também não está sendo repassado o valor do input. Somente o valor do seletor.


Olhando o cenário vejo periodicidade.php recebendo o ID do alvo então um select é feito para obter esse registro, então talvez por alguma inclusão processa_cadastro.php deve executar o insert

 

Sendo nesse conceito posso presumir as seguintes alterações:

 

Em periodicidade.php armazenar o valor de $row['descarte'];

$periodo_doc= $row['descarte'];

 

Então em processa_cadastro.php

$tipo_doc = intval(filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_NUMBER_INT));

//$periodo_doc = intval(filter_input(INPUT_POST, 'descarte', FILTER_SANITIZE_NUMBER_INT));

 

Só que tem de ver se é por inclusão mesmo que processa_cadastro.php entra na equação.

Share this post


Link to post
Share on other sites

Obrigada pelas respostas rápidas @Omar~ e @washalbano.

 

Fiz o teste aqui tirando o disabled do input e funcionou! Agora está cadastrando no banco corretamente. 

Mas farei os outros testes que vocês me sugeriram também, pois gostaria de manter aquele campo desabilitado.

 

Brigadão pessoal

Share this post


Link to post
Share on other sites

Adicionei a opção readonly="readonly" no lugar de disable no input e funcionou perfeitamente.

 

Mas obrigada novamente, vocês me deram uma baita luz. :smiley:

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 violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Quando programava em DOS. utilizava algumas teclas de atalho para: SALVAR / EDITAR / EXCLUIR / IMPRIMIR.
      Por exemplo:
      Salvar ----> ALT+S
      Editar ----> ALT+E
      Excluir --> ALT+X
      Imprimir -> ALT+I

      no PHP tem como colocar esses ATALHOS nos button, para o usuário trabalhar com esses atalhos e como seria ?

      grato,
       
      Cesar
    • By violin101
      Caros Amigos, saudações.
       
      Por favor, me perdoa em postar uma dúvida.
       
      Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja:
      - caso o usuário digita o Código, mostra os dados do Produto.
      - caso o usuário digita a Descrição, mostra os dados do Produto
       
      Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE.    <=== está funcionando certinho.
       
      Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também.
       
      o meu AutoComplete na MODEL está assim.
      public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } }  
       
      no CONTROLLER está assim:
      public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } }  
       
      na VIEW está assim:
      <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div>  
      VIEW + JAVASCRIPT
       
      //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete();  
      Grato,
       
      Cesar
    • By belann
      Olá!
       
      Estou tentando criar um projeto laravel e está dando o seguinte erro 
      curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: unable to get local issu
        er certificate
      Já tentei atualizar o composer, mas dá o mesmo erro acima.
    • By Rafael Castelhano
      Olá, quero preencher um dict dinamicamente onde a chave é uma string multidimencional no dict, ex:
      var dict = {} var path = 'a.b.c' dict[path] = 55 // isso faz dict ficar desta forma {'a.b.c': 55} // mais quero que fique assim {a: {b: {c: 55}}} Como consigo alterar desta forma? 
    • By violin101
      Caros amigos, saudações.
       
      Estou com um problema de cálculo que não estou conseguindo resolver.
       
      Tenho uma rotina em Javascript que faz o seguinte cálculo qtde x vrUnit = total.
       
      qtde   x  vrUnit    =    total
      1,23   x  1,00       =    1,23    << até aqui tudo bem.
       
      o problema seria fazer o arredondamento para cima para impedir de fazer este cálculo:
      0,01 x 0,01 = 0,0001
       
      para digitar o valor estou utilizando esta função:
       
      /*Esta função quando o usuário digitar o valor aparece * 1,23 */ function formataDigitacao(i) { //Adiciona os dados para a másrcara var decimais = 2; var separador_milhar = '.'; var separador_decimal = ','; var decimais_ele = Math.pow(10, decimais); var thousand_separator = '$1'+separador_milhar; var v = i.value.replace(/\D/g,''); v = (v/decimais_ele).toFixed(decimais) + ''; var splits = v.split("."); var p_parte = splits[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, thousand_separator); (typeof splits[1] === "undefined") ? i.value = p_parte : i.value = p_parte+separador_decimal+splits[1]; } /*Esta função faz a multiplicação entre Valor Unitário X Quantidade *faz a multiplicação correta */ function calcProd(){ //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Obter valor digitado do produto var valor_unit = document.getElementById("vlrunit").value; //Remover ponto e trocar a virgula por ponto while (valor_unit.indexOf(".") >= 0) { valor_unit = valor_unit.replace(".", ""); } valor_unit = valor_unit.replace(",","."); //Calcula o Valor do Desconto if (valor_unit > 0 && prod_qtde > 0) { calc_total_produto = (parseFloat(valor_unit) * parseFloat(prod_qtde)); var numero = calc_total_produto.toFixed(2).split('.'); //<<== aqui faço o arredondamento das casas decimais de 1,234 p/ 1,23 numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("vlrtotal").value = numero.join(','); } else { if (valor_unit > 0) { document.getElementById("vlrtotal").value = document.getElementById("vlrunit").value; } else { document.getElementById("vlrtotal").value = "0,00"; } } } Grato,
       
      Cesar
×

Important Information

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