Jump to content

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

 

 

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









       
    • By 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
       
       
       
       
    • By violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • By violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • By violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
×

Important Information

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