Ir para conteúdo
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 ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
×

Informação importante

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