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.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho o seguinte código:
       
      <script>
         $(function(){
      var jElement = $('.fixar_banner');
      $(window).scroll(function(){
          if ( $(this).scrollTop() > 120 ){
              jElement.css({
                  'position':'fixed',
                  'top':'10px'
              });
          }else{
              jElement.css({
                  'position':'relative',
                  'top':'auto'
              });
          }
      });
      });
      </script>
       
      Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol.
      https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm
       
      Espero ter sido claro.
       
      Obrigado :)
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

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