Ir para conteúdo

POWERED BY:

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();
     
?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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)

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • 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.